diff --git a/3rdparty/libprojectm/CMakeLists.txt b/3rdparty/libprojectm/CMakeLists.txt new file mode 100644 index 000000000..76f6c8d43 --- /dev/null +++ b/3rdparty/libprojectm/CMakeLists.txt @@ -0,0 +1,170 @@ +PROJECT(projectM) +cmake_minimum_required(VERSION 2.6.0) +SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The projectM core library.") + + +cmake_policy(SET CMP0005 OLD) + + +OPTION (USE_DEVIL "Use devIL for image loading rather than the builtin SOIL library" OFF) + +OPTION (USE_FBO "Use Framebuffer Objects for increased rendering quality. Disable this for OpenGL ES 1.x or if you are experiencing problems on older or poorly supported hardware." ON) + +OPTION(USE_FTGL "Use FTGL for on-screen fonts (found on your system)" OFF) + +OPTION (USE_GLES1 "Use OpenGL ES 1.x" OFF) + +OPTION (USE_THREADS "Use threads for parallelization" OFF) + +OPTION (USE_OPENMP "Use OpenMP and OMPTL for multi-core parallelization" ON) + +OPTION (USE_NATIVE_GLEW "Use projectM's native implemention of GLEW." OFF) + +OPTION (USE_CG "Use Cg for Pixel Shader support" OFF) + +OPTION (BUILD_PROJECTM_STATIC "Build the projectM target library in the platform's native static (NOT shared) format." ON) + +OPTION (DISABLE_NATIVE_PRESETS "Turn off support for native (C++ style) presets" OFF) +OPTION (DISABLE_MILKDROP_PRESETS "Turn off support for Milkdrop (.milk / .prjm) presets" OFF) + +ADD_DEFINITIONS(-DCMAKE_INSTALL_PREFIX="\\\"${CMAKE_INSTALL_PREFIX}\\\"") + +if (USE_NATIVE_GLEW) +ADD_DEFINITIONS(-DUSE_NATIVE_GLEW) +SET(GLEW_SOURCES glew.h glew.c) +SET(GLEW_LINK_TARGETS ) +else(USE_NATIVE_GLEW) +SET(GLEW_SOURCES ) +SET (GLEW_LINK_TARGETS GLEW) +endif(USE_NATIVE_GLEW) + +SET(projectM_SOURCES projectM.cpp PCM.cpp Preset.cpp fftsg.cpp KeyHandler.cpp +timer.cpp wipemalloc.cpp PresetLoader.cpp PresetChooser.cpp PipelineMerger.cpp ConfigFile.cpp TimeKeeper.cpp PresetFactory.cpp PresetFactoryManager.cpp ${GLEW_SOURCES}) + +if (MSVC) +SET(projectM_SOURCES ${projectM_SOURCES} dlfcn.c win32-dirent.cpp) +endif(MSVC) + +if (NOT DISABLE_NATIVE_PRESETS) +add_subdirectory(NativePresetFactory) +SET(PRESET_FACTORY_SOURCES ${PRESET_FACTORY_SOURCES} ${NativePresetFactory_SOURCE_DIR}) +SET(PRESET_FACTORY_BINARY_DIR ${PRESET_FACTORY_BINARY_DIR} ${NativePresetFactory_BINARY_DIR}) +SET(PRESET_FACTORY_LINK_TARGETS ${PRESET_FACTORY_LINK_TARGETS} NativePresetFactory) +endif(NOT DISABLE_NATIVE_PRESETS) + +if (NOT DISABLE_MILKDROP_PRESETS) +add_subdirectory(MilkdropPresetFactory) +SET(PRESET_FACTORY_SOURCES ${PRESET_FACTORY_SOURCES} ${MilkdropPresetFactory_SOURCE_DIR}) +SET(PRESET_FACTORY_BINARY_DIR ${PRESET_FACTORY_BINARY_DIR} ${MilkdropPrmaesetFactory_BINARY_DIR}) +SET(PRESET_FACTORY_LINK_TARGETS ${PRESET_FACTORY_LINK_TARGETS} MilkdropPresetFactory) +endif(NOT DISABLE_MILKDROP_PRESETS) + +if (USE_DEVIL) +SET (projectM_SOURCES ${projectM_SOURCES}) +ADD_DEFINITIONS(-DUSE_DEVIL) +SET (IMAGE_LINK_TARGETS IL ILU ILUT) +else (USE_DEVIL) +SET (projectM_SOURCES ${projectM_SOURCES}) +SET (IMAGE_LINK_TARGETS ) +endif (USE_DEVIL) + +if (USE_CG) +ADD_DEFINITIONS(-DUSE_CG) +SET (CG_LINK_TARGETS Cg CgGL) +else (USE_CG) +SET (CG_LINK_TARGETS) +endif(USE_CG) + + +if(USE_GLES1) +ADD_DEFINITIONS(-DUSE_GLES1) +endif(USE_GLES1) + +if(USE_FBO) +ADD_DEFINITIONS(-DUSE_FBO) +endif(USE_FBO) + +if(USE_FTGL) +ADD_DEFINITIONS(-DUSE_FTGL) + +find_package( Freetype2 REQUIRED) +include_directories( ${FREETYPE2_INCLUDE_DIR} ) + +endif(USE_FTGL) + + +if(COMMAND cmake_policy) + cmake_policy(SET CMP0003 NEW) +endif(COMMAND cmake_policy) + +if (BUILD_PROJECTM_STATIC) +ADD_LIBRARY(projectM STATIC ${projectM_SOURCES}) +else(BUILD_PROJECTM_STATIC) +ADD_LIBRARY(projectM SHARED ${projectM_SOURCES}) +endif(BUILD_PROJECTM_STATIC) + +SET_TARGET_PROPERTIES(projectM PROPERTIES VERSION 2.00 SOVERSION 2) + +if (USE_THREADS) +ADD_DEFINITIONS(-DUSE_THREADS) +endif(USE_THREADS) + +if (APPLE) +ADD_DEFINITIONS(-DMACOS -DSTBI_NO_DDS) +set(RESOURCE_PREFIX "Resources") +else (APPLE) +if (WIN32) +set (RESOURCE_PREFIX "Resources") +ADD_DEFINITIONS(-DWIN32 -DSTBI_NO_DDS) +else(WIN32) +set (RESOURCE_PREFIX "share/projectM") +ADD_DEFINITIONS(-DLINUX -DSTBI_NO_DDS) +endif(WIN32) +endif(APPLE) + +add_subdirectory(Renderer) + +#ADD_DEFINITIONS(-DCMAKE_INSTALL_PREFIX="\\\"${CMAKE_INSTALL_PREFIX}\\\"") + +FIND_PACKAGE(OpenGL) + + +#set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH};/opt/local/include;/Developer/SDKs/MACOSX10.5.sdk/usr/X11/include) +#set(CMAKE_LIBRARY_PATH /opt/local/lib;/Developer/SDKs/MACOSX10.5.sdk;/Developer/SDKs/MacOSX10.5.sdk/usr/X11/lib/) + + +IF(USE_OPENMP) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp ") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp ") +ENDIF(USE_OPENMP) + +INCLUDE_DIRECTORIES(${projectM_SOURCE_DIR} ${FTGL_INCLUDE_DIRS} ${Renderer_SOURCE_DIR} ${PRESET_FACTORY_SOURCES}) +LINK_DIRECTORIES(${FTGL_LINK_DIRS} ${Renderer_BINARY_DIR} ${PRESET_FACTORY_BINARY_DIR}) + +if(MSVC) + SET (MATH_LIBRARIES ) +else(MSVC) + SET (MATH_LIBRARIES m) +endif(MSVC) + +if(BUILD_PROJECTM_STATIC) + TARGET_LINK_LIBRARIES(projectM ${GLEW_LINK_TARGETS} ${MATH_LIBRARIES} ${FTGL_LINK_TARGETS} ${OPENGL_LIBRARIES} ${IMAGE_LINK_TARGETS} ${CG_LINK_TARGETS} ${PRESET_FACTORY_LINK_TARGETS}) +else(BUILD_PROJECTM_STATIC) + +TARGET_LINK_LIBRARIES(projectM ${GLEW_LINK_TARGETS} ${MATH_LIBRARIES} ${FTGL_LINK_TARGETS} ${OPENGL_LIBRARIES} ${IMAGE_LINK_TARGETS} ${CG_LINK_TARGETS} ${PRESET_FACTORY_LINK_TARGETS}) + +endif(BUILD_PROJECTM_STATIC) + + +CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/libprojectM.pc.in" "${CMAKE_CURRENT_SOURCE_DIR}/libprojectM.pc" @ONLY) +CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/config.inp.in" "${CMAKE_CURRENT_SOURCE_DIR}/config.inp" @ONLY) + +FILE(GLOB presets "presets/*.milk" "presets/*.prjm" "presets/*.tga") +INSTALL(FILES ${presets} DESTINATION ${CMAKE_INSTALL_PREFIX}/share/projectM/presets) +FILE(GLOB fonts "fonts/*.ttf") +INSTALL(FILES ${fonts} DESTINATION ${CMAKE_INSTALL_PREFIX}/share/projectM/fonts) +INSTALL(FILES ${Renderer_SOURCE_DIR}/projectM.cg ${Renderer_SOURCE_DIR}/blur.cg DESTINATION ${CMAKE_INSTALL_PREFIX}/share/projectM/shaders) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/libprojectM.pc DESTINATION ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/pkgconfig) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/config.inp DESTINATION ${CMAKE_INSTALL_PREFIX}/share/projectM) +INSTALL(FILES projectM.hpp event.h dlldefs.h fatal.h PCM.hpp Common.hpp DESTINATION include/libprojectM) +INSTALL(TARGETS projectM DESTINATION lib${LIB_SUFFIX}) diff --git a/3rdparty/libprojectm/COPYING b/3rdparty/libprojectm/COPYING new file mode 100644 index 000000000..4a162d36a --- /dev/null +++ b/3rdparty/libprojectm/COPYING @@ -0,0 +1,21 @@ +/** +* projectM -- Milkdrop-esque visualisation SDK +* Copyright (C)2003-2009 projectM Team +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; either +* version 2.1 of the License, or (at your option) any later version. +* +* This library 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* See 'LICENSE.txt' included within this release +* +*/ + diff --git a/3rdparty/libprojectm/ChangeLog b/3rdparty/libprojectm/ChangeLog new file mode 100644 index 000000000..fbf9a3585 --- /dev/null +++ b/3rdparty/libprojectm/ChangeLog @@ -0,0 +1,96 @@ +New for version 1.1 +------------------------------------------------------ +* general performance improvements and improved video card compatability +* multi-threading during smooth preset switching +* pulse audio support +* Qt4 GUI implemented for playlist management and preset editing (jack / pulseaudio only) + +New for versoin 1.01 +------------------------------------------------------ +* Bugfixes + +New for version 1.00 +------------------------------------------------------ +This release includes months of refactoring. The code changes are immense. The list below does not even begin to explain the amount of upheaval that has occured. + +*Smooth Preset Switching + +*OpenGL Framebuffer Objects (sharper rendering) + +*PerPixel Warp effect added + +*Custom Shape Texturing via Images (imageURL property) + +*Serious Parser/Evaluator improvements for better .milk Compatability + +*projectM-engine can render to a texture instead of the framebuffer (see projectM-test/projectM-test-texture.cpp) + +*projectM-engine, projectM-xmms, projectM-jack, and projectM-test build system converted to CMake + +*3D Song title animation + +*New Configuration File (more options, more flexible) + +New for version 0.99 +------------------------------------------------------ +*config file now saved at ~/.projectM/config + +*internal rendering coordinate spaces corrected. (basically, I made some stupid decisions a long time ago, and just fixed them now) + +*xmms plugins close properly via window decorations + +*mouse cursor hidden in xmms-projectM during fullscreen + +*menus should resize relative to the screen size now + +*Fixed numerous compilation bugs + +*when the player changes to a new song, libprojectM will zoom in the title for a few seconds, then blend the title into the vis (ala milkdrop), if the player support sending the title to libprojectM (only xmms-projectM now) + + +New for version 0.98 +------------------------------------------------------ +*projectM has been refactored into a shared library called libprojectM. + -Now compiles as C++ (even though 99% of the code is C) + +*libvisual-projectM now supports libvisual 0.4.0 + +*Preset library updated (~150 new, ~25 removed) + +*Improved Rendering Engine + -rewrote per pixel mathematics + -fixed waveforms 0, 1, and 4 + -fixed Order of drawing (Vectors, Custom Shapes, Custom Waves, Waveform, Borders) + -fixed custom shape rotation and texture parameter bugs + -added support for the bDarkenCenter feature + -added pbuffer support (however, you can't use it yet) + -improved motion vectors when using pbuffers + +*Improved .milk Parser + -corrected behavior of frame, wave, and shape init_eqns + -fixed bug with multiple equations on one line + +*Menu/Help/Display System Improvements + -Replaced GLF with FTGL (TrueType) fonts. + -Added the solarize, brighten, darken, and invert filters to the post-processing menu + -(F4) new Rendering stats display + -(F5) Framerate display fixed + +*New Framerate limiter + +*n0dalus contributed some autotools patches. + +*Chris Byrne of Monstavision contributed: + -3 Memory Leak fixes! + -Performance improvements during PCM input + -Preset index code rewritten to allow presets to be added while projectM is running + +*Hai Zaar helped us clean up the autotools stuff + -Presets/fonts will be stored in $DATADIR/projectM/fonts and /presets + -The config file will be stored in $SYSCONFDIR/projectM + -By default DATADIR is $PREFIX/share and SYSCONFDIR is $PREFIX/etc + so we reccomend you run configure like so: + + ./configure --sysconfdir=/etc + + diff --git a/3rdparty/libprojectm/Common.hpp b/3rdparty/libprojectm/Common.hpp new file mode 100755 index 000000000..b29249528 --- /dev/null +++ b/3rdparty/libprojectm/Common.hpp @@ -0,0 +1,245 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id$ + * + * $Log$ + */ + +#ifndef COMMON_HPP +#define COMMON_HPP +#include +#include +#include +#include +#ifdef _MSC_sVER +#define strcasecmp(s, t) _strcmpi(s, t) +#endif + +#ifdef _MSC_VER + #pragma warning( disable : 4244 4305 4996; once : 4018 ) + #define WIN32_LEAN_AND_MEAN + #define NOMINMAX + #include + typedef unsigned int uint; +#endif + +#ifdef DEBUG +//extern FILE *debugFile; +#endif + +#ifdef MACOS +#include +extern FILE *fmemopen(void *buf, size_t len, const char *pMode); +#endif /** MACOS */ + +#include "dlldefs.h" + +#define DEFAULT_FONT_PATH "/home/carm/fonts/courier1.glf" +#define MAX_TOKEN_SIZE 512 +#define MAX_PATH_SIZE 4096 + +#define STRING_BUFFER_SIZE 1024*150 +#define STRING_LINE_SIZE 1024 + + +#ifdef LINUX +#include +#define projectM_isnan isnan + +#endif + +#ifdef WIN32 +#define projectM_isnan(x) ((x) != (x)) +#endif + +#ifdef MACOS +#define projectM_isnan(x) ((x) != (x)) +#endif + +#ifdef LINUX +#define projectM_fmax fmax +#endif + +#ifdef WIN32 +#define projectM_fmax(x,y) ((x) >= (y) ? (x): (y)) +#endif + +#ifdef MACOS +#define projectM_fmax(x,y) ((x) >= (y) ? (x): (y)) +#endif + +#ifdef LINUX +#define projectM_fmin fmin +#endif + +#ifdef WIN32 +#define projectM_fmin(x,y) ((x) <= (y) ? (x): (y)) +#endif + +#ifdef MACOS +#define projectM_fmin(x,y) ((x) <= (y) ? (x): (y)) +#endif + +#ifndef TRUE +#define TRUE true +#endif + +#ifndef FALSE +#define FALSE false +#endif + + +#define MAX_DOUBLE_SIZE 10000000.0 +#define MIN_DOUBLE_SIZE -10000000.0 + +#define MAX_INT_SIZE 10000000 +#define MIN_INT_SIZE -10000000 + +/* default float initial value */ +#define DEFAULT_DOUBLE_IV 0.0 + +/* default float lower bound */ +#define DEFAULT_DOUBLE_LB MIN_DOUBLE_SIZE + +/* default float upper bound */ +#define DEFAULT_DOUBLE_UB MAX_DOUBLE_SIZE + +#ifdef WIN32 +#include +#define isnan _isnan +#endif /** WIN32 */ + +/** Per-platform path separators */ +#define WIN32_PATH_SEPARATOR '\\' +#define UNIX_PATH_SEPARATOR '/' +#ifdef WIN32 +#define PATH_SEPARATOR WIN32_PATH_SEPARATOR +#else +#define PATH_SEPARATOR UNIX_PATH_SEPARATOR +#endif /** WIN32 */ +#include + +const unsigned int NUM_Q_VARIABLES(32); +const std::string PROJECTM_FILE_EXTENSION("prjm"); +const std::string MILKDROP_FILE_EXTENSION("milk"); +const std::string PROJECTM_MODULE_EXTENSION("so"); + + template + void traverse(Container & container) + { + + TraverseFunctor functor; + + for (typename Container::iterator pos = container.begin(); pos != container.end(); ++pos) + { + assert(pos->second); + functor(pos->second); + } + + } + + + template + void traverseVector(Container & container) + { + + TraverseFunctor functor; + + for (typename Container::iterator pos = container.begin(); pos != container.end(); ++pos) + { + assert(*pos); + functor(*pos); + } + + } + + template + void traverse(Container & container, TraverseFunctor & functor) + { + + for (typename Container::iterator pos = container.begin(); pos != container.end(); ++pos) + { + assert(pos->second); + functor(pos->second); + } + + } + + namespace TraverseFunctors + { + template + class Delete + { + + public: + + void operator() (Data * data) + { + assert(data); + delete(data); + } + + }; + } + + +inline std::string parseExtension(const std::string & filename) { + +const std::size_t start = filename.find_last_of('.'); + +if (start == std::string::npos || start >= (filename.length()-1)) + return ""; +else + return filename.substr(start+1, filename.length()); + +} + +inline std::string parseFilename(const std::string & filename) { + +const std::size_t start = filename.find_last_of('/'); + +if (start == std::string::npos || start >= (filename.length()-1)) + return ""; +else + return filename.substr(start+1, filename.length()); + +} + +inline double meanSquaredError(const double & x, const double & y) { + return (x-y)*(x-y); +} + + +enum PresetRatingType { + FIRST_RATING_TYPE = 0, + HARD_CUT_RATING_TYPE = FIRST_RATING_TYPE, + SOFT_CUT_RATING_TYPE, + LAST_RATING_TYPE = SOFT_CUT_RATING_TYPE, + TOTAL_RATING_TYPES = SOFT_CUT_RATING_TYPE+1 +}; + + +typedef std::vector RatingList; + +#endif + + diff --git a/3rdparty/libprojectm/ConfigFile.cpp b/3rdparty/libprojectm/ConfigFile.cpp new file mode 100644 index 000000000..f041064e5 --- /dev/null +++ b/3rdparty/libprojectm/ConfigFile.cpp @@ -0,0 +1,142 @@ +// ConfigFile.cpp + +#include "ConfigFile.h" + +using std::string; + +ConfigFile::ConfigFile( string filename, string delimiter, + string comment, string sentry ) + : myDelimiter(delimiter), myComment(comment), mySentry(sentry) +{ + // Construct a ConfigFile, getting keys and values from given file + + std::ifstream in( filename.c_str() ); + + if( !in ) throw file_not_found( filename ); + + in >> (*this); +} + + +ConfigFile::ConfigFile() + : myDelimiter( string(1,'=') ), myComment( string(1,'#') ) +{ + // Construct a ConfigFile without a file; empty +} + + +void ConfigFile::remove( const string& key ) +{ + // Remove key and its value + myContents.erase( myContents.find( key ) ); + return; +} + + +bool ConfigFile::keyExists( const string& key ) const +{ + // Indicate whether key is found + mapci p = myContents.find( key ); + return ( p != myContents.end() ); +} + + +/* static */ +void ConfigFile::trim( string& s ) +{ + // Remove leading and trailing whitespace + static const char whitespace[] = " \n\t\v\r\f"; + s.erase( 0, s.find_first_not_of(whitespace) ); + s.erase( s.find_last_not_of(whitespace) + 1U ); +} + + +std::ostream& operator<<( std::ostream& os, const ConfigFile& cf ) +{ + // Save a ConfigFile to os + for( ConfigFile::mapci p = cf.myContents.begin(); + p != cf.myContents.end(); + ++p ) + { + os << p->first << " " << cf.myDelimiter << " "; + os << p->second << std::endl; + } + return os; +} + + +std::istream& operator>>( std::istream& is, ConfigFile& cf ) +{ + // Load a ConfigFile from is + // Read in keys and values, keeping internal whitespace + typedef string::size_type pos; + const string& delim = cf.myDelimiter; // separator + const string& comm = cf.myComment; // comment + const string& sentry = cf.mySentry; // end of file sentry + const pos skip = delim.length(); // length of separator + + string nextline = ""; // might need to read ahead to see where value ends + + while( is || nextline.length() > 0 ) + { + // Read an entire line at a time + string line; + if( nextline.length() > 0 ) + { + line = nextline; // we read ahead; use it now + nextline = ""; + } + else + { + std::getline( is, line ); + } + + // Ignore comments + line = line.substr( 0, line.find(comm) ); + + // Check for end of file sentry + if( sentry != "" && line.find(sentry) != string::npos ) return is; + + // Parse the line if it contains a delimiter + pos delimPos = line.find( delim ); + if( delimPos < string::npos ) + { + // Extract the key + string key = line.substr( 0, delimPos ); + line.replace( 0, delimPos+skip, "" ); + + // See if value continues on the next line + // Stop at blank line, next line with a key, end of stream, + // or end of file sentry + bool terminate = false; + while( !terminate && is ) + { + std::getline( is, nextline ); + terminate = true; + + string nlcopy = nextline; + ConfigFile::trim(nlcopy); + if( nlcopy == "" ) continue; + + nextline = nextline.substr( 0, nextline.find(comm) ); + if( nextline.find(delim) != string::npos ) + continue; + if( sentry != "" && nextline.find(sentry) != string::npos ) + continue; + + nlcopy = nextline; + ConfigFile::trim(nlcopy); + if( nlcopy != "" ) line += "\n"; + line += nextline; + terminate = false; + } + + // Store key and value + ConfigFile::trim(key); + ConfigFile::trim(line); + cf.myContents[key] = line; // overwrites if key is repeated + } + } + + return is; +} diff --git a/3rdparty/libprojectm/ConfigFile.h b/3rdparty/libprojectm/ConfigFile.h new file mode 100644 index 000000000..c2f002447 --- /dev/null +++ b/3rdparty/libprojectm/ConfigFile.h @@ -0,0 +1,253 @@ +// ConfigFile.h +// Class for reading named values from configuration files +// Richard J. Wagner v2.1 24 May 2004 wagnerr@umich.edu + +// Copyright (c) 2004 Richard J. Wagner +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. + +// Typical usage +// ------------- +// +// Given a configuration file "settings.inp": +// atoms = 25 +// length = 8.0 # nanometers +// name = Reece Surcher +// +// Named values are read in various ways, with or without default values: +// ConfigFile config( "settings.inp" ); +// int atoms = config.read( "atoms" ); +// double length = config.read( "length", 10.0 ); +// string author, title; +// config.readInto( author, "name" ); +// config.readInto( title, "title", string("Untitled") ); +// +// See file example.cpp for more examples. + +#ifndef CONFIGFILE_H +#define CONFIGFILE_H + +#include +#include +#include +#include +#include + +using std::string; + +class ConfigFile { +// Data +protected: + string myDelimiter; // separator between key and value + string myComment; // separator between value and comments + string mySentry; // optional string to signal end of file + std::map myContents; // extracted keys and values + + typedef std::map::iterator mapi; + typedef std::map::const_iterator mapci; + +// Methods +public: + ConfigFile( string filename, + string delimiter = "=", + string comment = "#", + string sentry = "EndConfigFile" ); + ConfigFile(); + + // Search for key and read value or optional default value + template T read( const string& key ) const; // call as read + template T read( const string& key, const T& value ) const; + template bool readInto( T& var, const string& key ) const; + template + bool readInto( T& var, const string& key, const T& value ) const; + + // Modify keys and values + template void add( string key, const T& value ); + void remove( const string& key ); + + // Check whether key exists in configuration + bool keyExists( const string& key ) const; + + // Check or change configuration syntax + string getDelimiter() const { return myDelimiter; } + string getComment() const { return myComment; } + string getSentry() const { return mySentry; } + string setDelimiter( const string& s ) + { string old = myDelimiter; myDelimiter = s; return old; } + string setComment( const string& s ) + { string old = myComment; myComment = s; return old; } + + // Write or read configuration + friend std::ostream& operator<<( std::ostream& os, const ConfigFile& cf ); + friend std::istream& operator>>( std::istream& is, ConfigFile& cf ); + +protected: + template static string T_as_string( const T& t ); + template static T string_as_T( const string& s ); + static void trim( string& s ); + + +// Exception types +public: + struct file_not_found { + string filename; + file_not_found( const string& filename_ = string() ) + : filename(filename_) {} }; + struct key_not_found { // thrown only by T read(key) variant of read() + string key; + key_not_found( const string& key_ = string() ) + : key(key_) {} }; +}; + + +/* static */ +template +string ConfigFile::T_as_string( const T& t ) +{ + // Convert from a T to a string + // Type T must support << operator + std::ostringstream ost; + ost << t; + return ost.str(); +} + + +/* static */ +template +T ConfigFile::string_as_T( const string& s ) +{ + // Convert from a string to a T + // Type T must support >> operator + T t; + std::istringstream ist(s); + ist >> t; + return t; +} + + +/* static */ +template<> +inline string ConfigFile::string_as_T( const string& s ) +{ + // Convert from a string to a string + // In other words, do nothing + return s; +} + + +/* static */ +template<> +inline bool ConfigFile::string_as_T( const string& s ) +{ + // Convert from a string to a bool + // Interpret "false", "F", "no", "n", "0" as false + // Interpret "true", "T", "yes", "y", "1", "-1", or anything else as true + bool b = true; + string sup = s; + for( string::iterator p = sup.begin(); p != sup.end(); ++p ) + *p = toupper(*p); // make string all caps + if( sup==string("FALSE") || sup==string("F") || + sup==string("NO") || sup==string("N") || + sup==string("0") || sup==string("NONE") ) + b = false; + return b; +} + + +template +T ConfigFile::read( const string& key ) const +{ + // Read the value corresponding to key + mapci p = myContents.find(key); + if( p == myContents.end() ) throw key_not_found(key); + return string_as_T( p->second ); +} + + +template +T ConfigFile::read( const string& key, const T& value ) const +{ + // Return the value corresponding to key or given default value + // if key is not found + mapci p = myContents.find(key); + if( p == myContents.end() ) return value; + return string_as_T( p->second ); +} + + +template +bool ConfigFile::readInto( T& var, const string& key ) const +{ + // Get the value corresponding to key and store in var + // Return true if key is found + // Otherwise leave var untouched + mapci p = myContents.find(key); + bool found = ( p != myContents.end() ); + if( found ) var = string_as_T( p->second ); + return found; +} + + +template +bool ConfigFile::readInto( T& var, const string& key, const T& value ) const +{ + // Get the value corresponding to key and store in var + // Return true if key is found + // Otherwise set var to given default + mapci p = myContents.find(key); + bool found = ( p != myContents.end() ); + if( found ) + var = string_as_T( p->second ); + else + var = value; + return found; +} + + +template +void ConfigFile::add( string key, const T& value ) +{ + // Add a key with given value + string v = T_as_string( value ); + trim(key); + trim(v); + myContents[key] = v; + return; +} + +#endif // CONFIGFILE_H + +// Release notes: +// v1.0 21 May 1999 +// + First release +// + Template read() access only through non-member readConfigFile() +// + ConfigurationFileBool is only built-in helper class +// +// v2.0 3 May 2002 +// + Shortened name from ConfigurationFile to ConfigFile +// + Implemented template member functions +// + Changed default comment separator from % to # +// + Enabled reading of multiple-line values +// +// v2.1 24 May 2004 +// + Made template specializations inline to avoid compiler-dependent linkage +// + Allowed comments within multiple-line values +// + Enabled blank line termination for multiple-line values +// + Added optional sentry to detect end of configuration file +// + Rewrote messy trimWhitespace() function as elegant trim() diff --git a/3rdparty/libprojectm/FindPkgConfig.cmake b/3rdparty/libprojectm/FindPkgConfig.cmake new file mode 100644 index 000000000..afae15cb0 --- /dev/null +++ b/3rdparty/libprojectm/FindPkgConfig.cmake @@ -0,0 +1,360 @@ +# - a pkg-config module for CMake +# +# Usage: +# pkg_check_modules( [REQUIRED] []*) +# checks for all the given modules +# +# pkg_search_module( [REQUIRED] []*) +# checks for given modules and uses the first working one +# +# When the 'REQUIRED' argument was set, macros will fail with an error +# when module(s) could not be found +# +# It sets the following variables: +# PKG_CONFIG_FOUND ... true iff pkg-config works on the system +# PKG_CONFIG_EXECUTABLE ... pathname of the pkg-config program +# _FOUND ... set to 1 iff module(s) exist +# +# For the following variables two sets of values exist; first one is the +# common one and has the given PREFIX. The second set contains flags +# which are given out when pkgconfig was called with the '--static' +# option. +# _LIBRARIES ... only the libraries (w/o the '-l') +# _LIBRARY_DIRS ... the paths of the libraries (w/o the '-L') +# _LDFLAGS ... all required linker flags +# _LDFLAGS_OTHERS ... all other linker flags +# _INCLUDE_DIRS ... the '-I' preprocessor flags (w/o the '-I') +# _CFLAGS ... all required cflags +# _CFLAGS_OTHERS ... the other compiler flags +# +# = for common case +# = _STATIC for static linking +# +# There are some special variables whose prefix depends on the count +# of given modules. When there is only one module, stays +# unchanged. When there are multiple modules, the prefix will be +# changed to _: +# _VERSION ... version of the module +# _PREFIX ... prefix-directory of the module +# _INCLUDEDIR ... include-dir of the module +# _LIBDIR ... lib-dir of the module +# +# = when |MODULES| == 1, else +# = _ +# +# A parameter can have the following formats: +# {MODNAME} ... matches any version +# {MODNAME}>={VERSION} ... at least version is required +# {MODNAME}={VERSION} ... exactly version is required +# {MODNAME}<={VERSION} ... modules must not be newer than +# +# Examples +# pkg_check_modules (GLIB2 glib-2.0) +# +# pkg_check_modules (GLIB2 glib-2.0>=2.10) +# requires at least version 2.10 of glib2 and defines e.g. +# GLIB2_VERSION=2.10.3 +# +# pkg_check_modules (FOO glib-2.0>=2.10 gtk+-2.0) +# requires both glib2 and gtk2, and defines e.g. +# FOO_glib-2.0_VERSION=2.10.3 +# FOO_gtk+-2.0_VERSION=2.8.20 +# +# pkg_check_modules (XRENDER REQUIRED xrender) +# defines e.g.: +# XRENDER_LIBRARIES=Xrender;X11 +# XRENDER_STATIC_LIBRARIES=Xrender;X11;pthread;Xau;Xdmcp +# +# pkg_search_module (BAR libxml-2.0 libxml2 libxml>=2) + + +# Copyright (C) 2006 Enrico Scholz +# +# Redistribution and use, with or without modification, are permitted +# provided that the following conditions are met: +# +# 1. Redistributions must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# 2. The name of the author may not be used to endorse or promote +# products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +### Common stuff #### +set(PKG_CONFIG_VERSION 1) +set(PKG_CONFIG_FOUND 0) + +find_program(PKG_CONFIG_EXECUTABLE NAMES pkg-config DOC "pkg-config executable") +mark_as_advanced(PKG_CONFIG_EXECUTABLE) + +if(PKG_CONFIG_EXECUTABLE) + set(PKG_CONFIG_FOUND 1) +endif(PKG_CONFIG_EXECUTABLE) + + +# Unsets the given variables +macro(_pkgconfig_unset var) + set(${var} "" CACHE INTERNAL "") +endmacro(_pkgconfig_unset) + +macro(_pkgconfig_set var value) + set(${var} ${value} CACHE INTERNAL "") +endmacro(_pkgconfig_set) + +# Invokes pkgconfig, cleans up the result and sets variables +macro(_pkgconfig_invoke _pkglist _prefix _varname _regexp) + set(_pkgconfig_invoke_result) + + execute_process( + COMMAND ${PKG_CONFIG_EXECUTABLE} ${ARGN} ${_pkglist} + OUTPUT_VARIABLE _pkgconfig_invoke_result + RESULT_VARIABLE _pkgconfig_failed) + + if (_pkgconfig_failed) + set(_pkgconfig_${_varname} "") + _pkgconfig_unset(${_prefix}_${_varname}) + else(_pkgconfig_failed) + string(REGEX REPLACE "[\r\n]" " " _pkgconfig_invoke_result "${_pkgconfig_invoke_result}") + string(REGEX REPLACE " +$" "" _pkgconfig_invoke_result "${_pkgconfig_invoke_result}") + + if (NOT ${_regexp} STREQUAL "") + string(REGEX REPLACE "${_regexp}" " " _pkgconfig_invoke_result "${_pkgconfig_invoke_result}") + endif(NOT ${_regexp} STREQUAL "") + + separate_arguments(_pkgconfig_invoke_result) + + #message(STATUS " ${_varname} ... ${_pkgconfig_invoke_result}") + set(_pkgconfig_${_varname} ${_pkgconfig_invoke_result}) + _pkgconfig_set(${_prefix}_${_varname} "${_pkgconfig_invoke_result}") + endif(_pkgconfig_failed) +endmacro(_pkgconfig_invoke) + +# Invokes pkgconfig two times; once without '--static' and once with +# '--static' +macro(_pkgconfig_invoke_dyn _pkglist _prefix _varname cleanup_regexp) + _pkgconfig_invoke("${_pkglist}" ${_prefix} ${_varname} "${cleanup_regexp}" ${ARGN}) + _pkgconfig_invoke("${_pkglist}" ${_prefix} STATIC_${_varname} "${cleanup_regexp}" --static ${ARGN}) +endmacro(_pkgconfig_invoke_dyn) + +# Splits given arguments into options and a package list +macro(_pkgconfig_parse_options _result _is_req) + set(${_is_req} 0) + + foreach(_pkg ${ARGN}) + if (_pkg STREQUAL "REQUIRED") + set(${_is_req} 1) + endif (_pkg STREQUAL "REQUIRED") + endforeach(_pkg ${ARGN}) + + set(${_result} ${ARGN}) + list(REMOVE_ITEM ${_result} "REQUIRED") +endmacro(_pkgconfig_parse_options) + +### +macro(_pkg_check_modules_internal _is_required _is_silent _prefix) + _pkgconfig_unset(${_prefix}_FOUND) + _pkgconfig_unset(${_prefix}_VERSION) + _pkgconfig_unset(${_prefix}_PREFIX) + _pkgconfig_unset(${_prefix}_INCLUDEDIR) + _pkgconfig_unset(${_prefix}_LIBDIR) + _pkgconfig_unset(${_prefix}_LIBS) + _pkgconfig_unset(${_prefix}_LIBS_L) + _pkgconfig_unset(${_prefix}_LIBS_PATHS) + _pkgconfig_unset(${_prefix}_LIBS_OTHER) + _pkgconfig_unset(${_prefix}_CFLAGS) + _pkgconfig_unset(${_prefix}_CFLAGS_I) + _pkgconfig_unset(${_prefix}_CFLAGS_OTHER) + _pkgconfig_unset(${_prefix}_STATIC_LIBDIR) + _pkgconfig_unset(${_prefix}_STATIC_LIBS) + _pkgconfig_unset(${_prefix}_STATIC_LIBS_L) + _pkgconfig_unset(${_prefix}_STATIC_LIBS_PATHS) + _pkgconfig_unset(${_prefix}_STATIC_LIBS_OTHER) + _pkgconfig_unset(${_prefix}_STATIC_CFLAGS) + _pkgconfig_unset(${_prefix}_STATIC_CFLAGS_I) + _pkgconfig_unset(${_prefix}_STATIC_CFLAGS_OTHER) + + # create a better addressable variable of the modules and calculate its size + set(_pkg_check_modules_list ${ARGN}) + list(LENGTH _pkg_check_modules_list _pkg_check_modules_cnt) + + if(PKG_CONFIG_EXECUTABLE) + # give out status message telling checked module + if (NOT ${_is_silent}) + if (_pkg_check_modules_cnt EQUAL 1) + message(STATUS "checking for module '${_pkg_check_modules_list}'") + else(_pkg_check_modules_cnt EQUAL 1) + message(STATUS "checking for modules '${_pkg_check_modules_list}'") + endif(_pkg_check_modules_cnt EQUAL 1) + endif(NOT ${_is_silent}) + + set(_pkg_check_modules_packages) + set(_pkg_check_modules_failed) + + # iterate through module list and check whether they exist and match the required version + foreach (_pkg_check_modules_pkg ${_pkg_check_modules_list}) + set(_pkg_check_modules_exist_query) + + # check whether version is given + if (_pkg_check_modules_pkg MATCHES ".*(>=|=|<=).*") + string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\1" _pkg_check_modules_pkg_name "${_pkg_check_modules_pkg}") + string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\2" _pkg_check_modules_pkg_op "${_pkg_check_modules_pkg}") + string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\3" _pkg_check_modules_pkg_ver "${_pkg_check_modules_pkg}") + else(_pkg_check_modules_pkg MATCHES ".*(>=|=|<=).*") + set(_pkg_check_modules_pkg_name "${_pkg_check_modules_pkg}") + set(_pkg_check_modules_pkg_op) + set(_pkg_check_modules_pkg_ver) + endif(_pkg_check_modules_pkg MATCHES ".*(>=|=|<=).*") + + # handle the operands + if (_pkg_check_modules_pkg_op STREQUAL ">=") + list(APPEND _pkg_check_modules_exist_query --atleast-version) + endif(_pkg_check_modules_pkg_op STREQUAL ">=") + + if (_pkg_check_modules_pkg_op STREQUAL "=") + list(APPEND _pkg_check_modules_exist_query --exact-version) + endif(_pkg_check_modules_pkg_op STREQUAL "=") + + if (_pkg_check_modules_pkg_op STREQUAL "<=") + list(APPEND _pkg_check_modules_exist_query --max-version) + endif(_pkg_check_modules_pkg_op STREQUAL "<=") + + # create the final query which is of the format: + # * --atleast-version + # * --exact-version + # * --max-version + # * --exists + if (_pkg_check_modules_pkg_op) + list(APPEND _pkg_check_modules_exist_query "${_pkg_check_modules_pkg_ver}") + else(_pkg_check_modules_pkg_op) + list(APPEND _pkg_check_modules_exist_query --exists) + endif(_pkg_check_modules_pkg_op) + + _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_VERSION) + _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_PREFIX) + _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_INCLUDEDIR) + _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_LIBDIR) + + list(APPEND _pkg_check_modules_exist_query "${_pkg_check_modules_pkg_name}") + list(APPEND _pkg_check_modules_packages "${_pkg_check_modules_pkg_name}") + + # execute the query + execute_process( + COMMAND ${PKG_CONFIG_EXECUTABLE} ${_pkg_check_modules_exist_query} + RESULT_VARIABLE _pkgconfig_retval) + + # evaluate result and tell failures + if (_pkgconfig_retval) + if(NOT ${_is_silent}) + message(STATUS " package '${_pkg_check_modules_pkg}' not found") + endif(NOT ${_is_silent}) + + set(_pkg_check_modules_failed 1) + endif(_pkgconfig_retval) + endforeach(_pkg_check_modules_pkg) + + if(_pkg_check_modules_failed) + # fail when requested + if (${_is_required}) + message(SEND_ERROR "A required package was not found") + endif (${_is_required}) + else(_pkg_check_modules_failed) + # when we are here, we checked whether requested modules + # exist. Now, go through them and set variables + + _pkgconfig_set(${_prefix}_FOUND 1) + list(LENGTH _pkg_check_modules_packages pkg_count) + + # iterate through all modules again and set individual variables + foreach (_pkg_check_modules_pkg ${_pkg_check_modules_packages}) + # handle case when there is only one package required + if (pkg_count EQUAL 1) + set(_pkg_check_prefix "${_prefix}") + else(pkg_count EQUAL 1) + set(_pkg_check_prefix "${_prefix}_${_pkg_check_modules_pkg}") + endif(pkg_count EQUAL 1) + + _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" VERSION "" --modversion ) + _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" PREFIX "" --variable=prefix ) + _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" INCLUDEDIR "" --variable=includedir ) + _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" LIBDIR "" --variable=libdir ) + + message(STATUS " found ${_pkg_check_modules_pkg}, version ${_pkgconfig_VERSION}") + endforeach(_pkg_check_modules_pkg) + + # set variables which are combined for multiple modules + _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LIBRARIES "(^| )-l" --libs-only-l ) + _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LIBRARY_DIRS "(^| )-L" --libs-only-L ) + _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LDFLAGS "" --libs ) + _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LDFLAGS_OTHER "" --libs-only-other ) + + _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" INCLUDE_DIRS "(^| )-I" --cflags-only-I ) + _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" CFLAGS "" --cflags ) + _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" CFLAGS_OTHER "" --cflags-only-other ) + endif(_pkg_check_modules_failed) + else(PKG_CONFIG_EXECUTABLE) + if (${_is_required}) + message(SEND_ERROR "pkg-config tool not found") + endif (${_is_required}) + endif(PKG_CONFIG_EXECUTABLE) +endmacro(_pkg_check_modules_internal) + +### +### User visible macros start here +### + +### +macro(pkg_check_modules _prefix _module0) + # check cached value + if (NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION}) + _pkgconfig_parse_options (_pkg_modules _pkg_is_required "${_module0}" ${ARGN}) + _pkg_check_modules_internal("${_pkg_is_required}" 0 "${_prefix}" ${_pkg_modules}) + + _pkgconfig_set(__pkg_config_checked_${_prefix} ${PKG_CONFIG_VERSION}) + endif(NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION}) +endmacro(pkg_check_modules) + +### +macro(pkg_search_module _prefix _module0) + # check cached value + if (NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION}) + set(_pkg_modules_found 0) + _pkgconfig_parse_options(_pkg_modules_alt _pkg_is_required "${_module0}" ${ARGN}) + + message(STATUS "checking for one of the modules '${_pkg_modules_alt}'") + + # iterate through all modules and stop at the first working one. + foreach(_pkg_alt ${_pkg_modules_alt}) + if(NOT _pkg_modules_found) + _pkg_check_modules_internal(0 1 "${_prefix}" "${_pkg_alt}") + endif(NOT _pkg_modules_found) + + if (${_prefix}_FOUND) + set(_pkg_modules_found 1) + endif(${_prefix}_FOUND) + endforeach(_pkg_alt) + + if (NOT ${_prefix}_FOUND) + if(${_pkg_is_required}) + message(SEND_ERROR "None of the required '${_pkg_modules_alt}' found") + endif(${_pkg_is_required}) + endif(NOT ${_prefix}_FOUND) + + _pkgconfig_set(__pkg_config_checked_${_prefix} ${PKG_CONFIG_VERSION}) + endif(NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION}) +endmacro(pkg_search_module) + +### Local Variables: +### mode: cmake +### End: diff --git a/3rdparty/libprojectm/HungarianMethod.hpp b/3rdparty/libprojectm/HungarianMethod.hpp new file mode 100644 index 000000000..4b6b93c58 --- /dev/null +++ b/3rdparty/libprojectm/HungarianMethod.hpp @@ -0,0 +1,192 @@ +#ifndef HUNGARIAN_METHOD_HPP +#define HUNGARIAN_METHOD_HPP +//#include "Common.hpp" +#include +#include +#include +#include + +/// A function object which calculates the maximum-weighted bipartite matching between +/// two sets via the hungarian method. +template +class HungarianMethod { +public : +static const int MAX_SIZE = N; + +private: +int n, max_match; //n workers and n jobs +double lx[N], ly[N]; //labels of X and Y parts +int xy[N]; //xy[x] - vertex that is matched with x, +int yx[N]; //yx[y] - vertex that is matched with y +bool S[N], T[N]; //sets S and T in algorithm +double slack[N]; //as in the algorithm description +double slackx[N]; //slackx[y] such a vertex, that + // l(slackx[y]) + l(y) - w(slackx[y],y) = slack[y] +int prev[N]; //array for memorizing alternating paths + +void init_labels(const double cost[N][N]) +{ + memset(lx, 0, sizeof(lx)); + memset(ly, 0, sizeof(ly)); + for (int x = 0; x < n; x++) + for (int y = 0; y < n; y++) + lx[x] = std::max(lx[x], cost[x][y]); +} + +void augment(const double cost[N][N]) //main function of the algorithm +{ + if (max_match == n) return; //check wether matching is already perfect + int x, y, root; //just counters and root vertex + int q[N], wr = 0, rd = 0; //q - queue for bfs, wr,rd - write and read + //pos in queue + memset(S, false, sizeof(S)); //init set S + memset(T, false, sizeof(T)); //init set T + memset(prev, -1, sizeof(prev)); //init set prev - for the alternating tree + for (x = 0; x < n; x++) //finding root of the tree + if (xy[x] == -1) + { + q[wr++] = root = x; + prev[x] = -2; + S[x] = true; + break; + } + + for (y = 0; y < n; y++) //initializing slack array + { + slack[y] = lx[root] + ly[y] - cost[root][y]; + slackx[y] = root; + } + while (true) //main cycle + { + while (rd < wr) //building tree with bfs cycle + { + x = q[rd++]; //current vertex from X part + for (y = 0; y < n; y++) //iterate through all edges in equality graph + if (cost[x][y] == lx[x] + ly[y] && !T[y]) + { + if (yx[y] == -1) break; //an exposed vertex in Y found, so + //augmenting path exists! + T[y] = true; //else just add y to T, + q[wr++] = yx[y]; //add vertex yx[y], which is matched + //with y, to the queue + add_to_tree(yx[y], x, cost); //add edges (x,y) and (y,yx[y]) to the tree + } + if (y < n) break; //augmenting path found! + } + if (y < n) break; //augmenting path found! + + update_labels(); //augmenting path not found, so improve labeling + wr = rd = 0; + for (y = 0; y < n; y++) + //in this cycle we add edges that were added to the equality graph as a + //result of improving the labeling, we add edge (slackx[y], y) to the tree if + //and only if !T[y] && slack[y] == 0, also with this edge we add another one + //(y, yx[y]) or augment the matching, if y was exposed + if (!T[y] && slack[y] == 0) + { + if (yx[y] == -1) //exposed vertex in Y found - augmenting path exists! + { + x = slackx[y]; + break; + } + else + { + T[y] = true; //else just add y to T, + if (!S[yx[y]]) + { + q[wr++] = yx[y]; //add vertex yx[y], which is matched with + //y, to the queue + add_to_tree(yx[y], slackx[y],cost); //and add edges (x,y) and (y, + //yx[y]) to the tree + } + } + } + if (y < n) break; //augmenting path found! + } + + if (y < n) //we found augmenting path! + { + max_match++; //increment matching + //in this cycle we inverse edges along augmenting path + for (int cx = x, cy = y, ty; cx != -2; cx = prev[cx], cy = ty) + { + ty = xy[cx]; + yx[cy] = cx; + xy[cx] = cy; + } + augment(cost); //recall function, go to step 1 of the algorithm + } +}//end of augment() function + +void update_labels() +{ + int x, y; + double delta = std::numeric_limits::max(); + for (y = 0; y < n; y++) //calculate delta using slack + if (!T[y]) + delta = std::min(delta, slack[y]); + for (x = 0; x < n; x++) //update X labels + if (S[x]) lx[x] -= delta; + for (y = 0; y < n; y++) //update Y labels + if (T[y]) ly[y] += delta; + for (y = 0; y < n; y++) //update slack array + if (!T[y]) + slack[y] -= delta; +} + +void add_to_tree(int x, int prevx, const double cost[N][N]) +//x - current vertex,prevx - vertex from X before x in the alternating path, +//so we add edges (prevx, xy[x]), (xy[x], x) +{ + S[x] = true; //add x to S + prev[x] = prevx; //we need this when augmenting + for (int y = 0; y < n; y++) //update slacks, because we add new vertex to S + if (lx[x] + ly[y] - cost[x][y] < slack[y]) + { + slack[y] = lx[x] + ly[y] - cost[x][y]; + slackx[y] = x; + } +} + +public: +/// Computes the best matching of two sets given its cost matrix. +/// See the matching() method to get the computed match result. +/// \param cost a matrix of two sets I,J where cost[i][j] is the weight of edge i->j +/// \param logicalSize the number of elements in both I and J +/// \returns the total cost of the best matching +inline double operator()(const double cost[N][N], int logicalSize) +{ + + n = logicalSize; + assert(n <= N); + double ret = 0; //weight of the optimal matching + max_match = 0; //number of vertices in current matching + memset(xy, -1, sizeof(xy)); + memset(yx, -1, sizeof(yx)); + init_labels(cost); //step 0 + augment(cost); //steps 1-3 + for (int x = 0; x < n; x++) //forming answer there + ret += cost[x][xy[x]]; + return ret; +} + +/// Gets the matching element in 2nd set of the ith element in the first set +/// \param i the index of the ith element in the first set (passed in operator()) +/// \returns an index j, denoting the matched jth element of the 2nd set +inline int matching(int i) const { + return xy[i]; +} + + +/// Gets the matching element in 1st set of the jth element in the 2nd set +/// \param j the index of the jth element in the 2nd set (passed in operator()) +/// \returns an index i, denoting the matched ith element of the 1st set +/// \note inverseMatching(matching(i)) == i +inline int inverseMatching(int j) const { + return yx[j]; +} + +}; + + +#endif diff --git a/3rdparty/libprojectm/IdleTextures.hpp b/3rdparty/libprojectm/IdleTextures.hpp new file mode 100644 index 000000000..7efcac943 --- /dev/null +++ b/3rdparty/libprojectm/IdleTextures.hpp @@ -0,0 +1,5985 @@ + +/* begin binary data: */ +const int M_bytes = 27965; + +/* begin binary data: */ +const unsigned char M_data[] = /* 27965 */ +{0x00,0x00,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00 +,0x01,0x20,0x08,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xAD,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x7D,0xFF,0x00 +,0x00,0x00,0x00,0xA1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAA,0xAD,0x00 +,0x00,0x00,0xFF,0xAD,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xC7,0xFF,0x00 +,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00 +,0x00,0xEC,0xAD,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0xAC,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x13,0xFF,0x00,0x00,0x00 +,0x00,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x35,0xAD,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xC2,0xAD,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x5A,0xFF,0x00,0x00,0x00,0x00,0x9F,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x7D,0xAD,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0xC2,0x00,0x00,0x00,0x00,0x6C,0x83,0x00,0x00,0x00,0xFF,0x00,0x0D,0x0D,0x0D +,0xFF,0xA3,0x37,0x37,0x37,0xFF,0x00,0x2B,0x2B,0x2B,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xA4,0xFF,0x00,0x00,0x00,0x00,0x9F,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0xC5,0x83,0x00,0x00,0x00,0xFF,0x00,0x34,0x34,0x34 +,0xFF,0xA3,0x37,0x37,0x37,0xFF,0x00,0x0D,0x0D,0x0D,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x6B,0x01,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0xFD +,0x82,0x00,0x00,0x00,0xFF,0x01,0x10,0x10,0x10,0xFF,0xF9,0xF9,0xF9,0xFF,0xA2 +,0xFF,0xFF,0xFF,0xFF,0x01,0xF0,0xF0,0xF0,0xFF,0x04,0x04,0x04,0xFF,0x82,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEB,0x00,0x00,0x00,0x02,0xFF,0x00,0x00 +,0x00,0x00,0x9D,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x10,0x00,0x00,0x00 +,0xFC,0x82,0x00,0x00,0x00,0xFF,0x00,0x1C,0x1C,0x1C,0xFF,0xA3,0xFF,0xFF,0xFF +,0xFF,0x01,0xF9,0xF9,0xF9,0xFF,0x10,0x10,0x10,0xFF,0x82,0x00,0x00,0x00,0xFF +,0x01,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0xBF,0x83,0x00,0x00,0x00,0xFF,0x00,0xB3,0xB3,0xB3,0xFF,0xA3,0xFF +,0xFF,0xFF,0xFF,0x00,0x3E,0x3E,0x3E,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x37,0xFF,0x00,0x00,0x00,0x00,0x9D,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x54,0x83,0x00,0x00,0x00,0xFF,0x00,0x63,0x63,0x63,0xFF,0xA3,0xFF +,0xFF,0xFF,0xFF,0x00,0xB2,0xB2,0xB2,0xFF,0x83,0x00,0x00,0x00,0xFF,0x01,0x00 +,0x00,0x00,0xBD,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x69,0x83,0x00,0x00,0x00,0xFF,0x00,0x5D,0x5D,0x5D,0xFF,0xA3,0xFF,0xFF,0xFF +,0xFF,0x00,0x87,0x87,0x87,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x80,0xFF,0x00,0x00,0x00,0x00,0x9D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x9C,0x83,0x00,0x00,0x00,0xFF,0x00,0xAA,0xAA,0xAA,0xFF,0xA3,0xFF,0xFF,0xFF +,0xFF,0x00,0x5B,0x5B,0x5B,0xFF,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00 +,0x66,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x00 +,0x00,0x00,0xFC,0x82,0x00,0x00,0x00,0xFF,0x01,0x0E,0x0E,0x0E,0xFF,0xF8,0xF8 +,0xF8,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0xD1,0xD1,0xD1,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xCA,0xFF,0x00,0x00,0x00,0x00,0x9D,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0xE4,0x82,0x00,0x00,0x00,0xFF,0x01,0x03,0x03 +,0x03,0xFF,0xEF,0xEF,0xEF,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x01,0xF7,0xF7,0xF7 +,0xFF,0x0D,0x0D,0x0D,0xFF,0x82,0x00,0x00,0x00,0xFF,0x02,0x00,0x00,0x00,0xFB +,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0xBC,0x83,0x00,0x00,0x00,0xFF,0x00,0xB1,0xB1,0xB1,0xFF,0xA3,0xFF +,0xFF,0xFF,0xFF,0x00,0x1B,0x1B,0x1B,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00 +,0x00,0x00,0xFE,0x00,0x00,0x00,0x15,0xFF,0x00,0x00,0x00,0x00,0x9B,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x2C,0x83,0x00,0x00,0x00,0xFF,0x00,0x3A,0x3A +,0x3A,0xFF,0xA3,0xFF,0xFF,0xFF,0xFF,0x00,0xAD,0xAD,0xAD,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x81,0x00,0x00,0x00,0x00,0x81,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x83,0x00,0x00,0x00,0xFF,0x00,0x5A,0x5A +,0x5A,0xFF,0xA3,0xFF,0xFF,0xFF,0xFF,0x00,0x64,0x64,0x64,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x5D,0xFF,0x00,0x00,0x00,0x00,0x9B,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x74,0x83,0x00,0x00,0x00,0xFF,0x00,0x81,0x81 +,0x81,0xFF,0xA3,0xFF,0xFF,0xFF,0xFF,0x00,0x56,0x56,0x56,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x61,0x81,0x00,0x00,0x00,0x00,0x81,0x00,0x00 +,0x00,0x00,0x01,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xFB,0x82,0x00,0x00,0x00 +,0xFF,0x01,0x0D,0x0D,0x0D,0xFF,0xF7,0xF7,0xF7,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF +,0x00,0xAD,0xAD,0xAD,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA6 +,0xFF,0x00,0x00,0x00,0x00,0x9B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBB +,0x83,0x00,0x00,0x00,0xFF,0x00,0xC9,0xC9,0xC9,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF +,0x01,0xF4,0xF4,0xF4,0xFF,0x0A,0x0A,0x0A,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xF9,0x00,0x00,0x00,0x10,0x81,0x00,0x00,0x00,0x00,0x82,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB9,0x83,0x00,0x00,0x00,0xFF,0x00,0xAE +,0xAE,0xAE,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x01,0xF2,0xF2,0xF2,0xFF,0x05,0x05 +,0x05,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xED,0x00,0x00,0x00 +,0x02,0xFF,0x00,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00 +,0x0A,0x00,0x00,0x00,0xF8,0x82,0x00,0x00,0x00,0xFF,0x01,0x13,0x13,0x13,0xFF +,0xFD,0xFD,0xFD,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0xA8,0xA8,0xA8,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB3,0x82,0x00,0x00,0x00,0x00,0x82 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x58,0x58,0x58,0xFF,0xA3,0xFF,0xFF,0xFF,0xFF,0x00,0x40,0x40,0x40,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x39,0xFF,0x00,0x00,0x00,0x00,0x99 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4B,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x59,0x59,0x59,0xFF,0xA3,0xFF,0xFF,0xFF,0xFF,0x00,0x51,0x51,0x51,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x5C,0x82,0x00,0x00,0x00,0x00,0x82 +,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xFA,0x82,0x00 +,0x00,0x00,0xFF,0x01,0x0B,0x0B,0x0B,0xFF,0xF6,0xF6,0xF6,0xFF,0xA2,0xFF,0xFF +,0xFF,0xFF,0x00,0x8A,0x8A,0x8A,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x83,0xFF,0x00,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x93,0x83,0x00,0x00,0x00,0xFF,0x00,0xA0,0xA0,0xA0,0xFF,0xA2,0xFF,0xFF +,0xFF,0xFF,0x01,0xF2,0xF2,0xF2,0xFF,0x08,0x08,0x08,0xFF,0x82,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xF7,0x00,0x00,0x00,0x0D,0x82,0x00,0x00,0x00,0x00 +,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB7,0x83,0x00,0x00,0x00,0xFF +,0x00,0xAB,0xAB,0xAB,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0xD3,0xD3,0xD3,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xCC,0xFF,0x00,0x00,0x00,0x00 +,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDB,0x82,0x00,0x00,0x00,0xFF +,0x01,0x01,0x01,0x01,0xFF,0xE7,0xE7,0xE7,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00 +,0xA3,0xA3,0xA3,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xAE,0x83 +,0x00,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x55,0x55,0x55,0xFF,0xA3,0xFF,0xFF,0xFF,0xFF,0x00 +,0x1D,0x1D,0x1D,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x17,0xFF,0x00,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x22,0x83,0x00,0x00,0x00,0xFF,0x00,0x30,0x30,0x30,0xFF,0xA3,0xFF +,0xFF,0xFF,0xFF,0x00,0x4C,0x4C,0x4C,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x57,0x83,0x00,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x00,0x01,0x00 +,0x00,0x00,0x10,0x00,0x00,0x00,0xF9,0x82,0x00,0x00,0x00,0xFF,0x01,0x0A,0x0A +,0x0A,0xFF,0xF4,0xF4,0xF4,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x66,0x66,0x66 +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x5F,0xFF,0x00,0x00,0x00 +,0x00,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6A,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x77,0x77,0x77,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x01,0xEF,0xEF,0xEF +,0xFF,0x06,0x06,0x06,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF5 +,0x00,0x00,0x00,0x0B,0x83,0x00,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0xB4,0x83,0x00,0x00,0x00,0xFF,0x00,0xA8,0xA8,0xA8,0xFF,0xA2 +,0xFF,0xFF,0xFF,0xFF,0x00,0xB0,0xB0,0xB0,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xA9,0xFF,0x00,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0xB2,0x83,0x00,0x00,0x00,0xFF,0x00,0xBF,0xBF,0xBF,0xFF,0xA2 +,0xFF,0xFF,0xFF,0xFF,0x00,0x9E,0x9E,0x9E,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xA9,0x84,0x00,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x5E,0x83,0x00,0x00,0x00,0xFF,0x00,0x52,0x52,0x52,0xFF,0xA2 +,0xFF,0xFF,0xFF,0xFF,0x01,0xF3,0xF3,0xF3,0xFF,0x06,0x06,0x06,0xFF,0x82,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEE,0x00,0x00,0x00,0x03,0xFF,0x00,0x00 +,0x00,0x00,0x95,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00 +,0xF3,0x82,0x00,0x00,0x00,0xFF,0x01,0x0C,0x0C,0x0C,0xFF,0xFA,0xFA,0xFA,0xFF +,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x47,0x47,0x47,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x52,0x84,0x00,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00 +,0x01,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0xF8,0x82,0x00,0x00,0x00,0xFF,0x01 +,0x09,0x09,0x09,0xFF,0xF3,0xF3,0xF3,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x43 +,0x43,0x43,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x3C,0xFF,0x00 +,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x4E,0x4E,0x4E,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x01,0xEB +,0xEB,0xEB,0xFF,0x04,0x04,0x04,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00 +,0x00,0xF2,0x00,0x00,0x00,0x08,0x84,0x00,0x00,0x00,0x00,0x85,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0xB1,0x83,0x00,0x00,0x00,0xFF,0x00,0xA6,0xA6,0xA6 +,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x8C,0x8C,0x8C,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x85,0xFF,0x00,0x00,0x00,0x00,0x95,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x89,0x83,0x00,0x00,0x00,0xFF,0x00,0x96,0x96,0x96 +,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x99,0x99,0x99,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xA4,0x85,0x00,0x00,0x00,0x00,0x85,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x5B,0x83,0x00,0x00,0x00,0xFF,0x00,0x4F,0x4F,0x4F +,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0xD6,0xD6,0xD6,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xCF,0xFF,0x00,0x00,0x00,0x00,0x95,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0xD1,0x83,0x00,0x00,0x00,0xFF,0x00,0xDE,0xDE,0xDE +,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x42,0x42,0x42,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x4D,0x85,0x00,0x00,0x00,0x00,0x85,0x00,0x00,0x00 +,0x00,0x01,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0xF7,0x82,0x00,0x00,0x00,0xFF +,0x01,0x07,0x07,0x07,0xFF,0xF1,0xF1,0xF1,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00 +,0x20,0x20,0x20,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x19,0xFF,0x00,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x1A,0x83,0x00,0x00,0x00,0xFF,0x00,0x25,0x25,0x25,0xFF,0xA2,0xFF +,0xFF,0xFF,0xFF,0x01,0xE8,0xE8,0xE8,0xFF,0x03,0x03,0x03,0xFF,0x82,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xEF,0x00,0x00,0x00,0x06,0x85,0x00,0x00,0x00 +,0x00,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAE,0x83,0x00,0x00,0x00 +,0xFF,0x00,0xA3,0xA3,0xA3,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x69,0x69,0x69 +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x61,0xFF,0x00,0x00,0x00 +,0x00,0x93,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x6D,0x6D,0x6D,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x94,0x94,0x94 +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x9F,0x86,0x00,0x00,0x00 +,0x00,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x4D,0x4D,0x4D,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0xB3,0xB3,0xB3 +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xAB,0xFF,0x00,0x00,0x00 +,0x00,0x93,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,0x83,0x00,0x00,0x00 +,0xFF,0x00,0xB5,0xB5,0xB5,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x3D,0x3D,0x3D +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x48,0x86,0x00,0x00,0x00 +,0x00,0x86,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0B,0x00,0x00,0x00,0xF6 +,0x82,0x00,0x00,0x00,0xFF,0x01,0x06,0x06,0x06,0xFF,0xF0,0xF0,0xF0,0xFF,0xA1 +,0xFF,0xFF,0xFF,0xFF,0x01,0xF4,0xF4,0xF4,0xFF,0x07,0x07,0x07,0xFF,0x82,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x04,0xFF,0x00,0x00 +,0x00,0x00,0x91,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00 +,0xED,0x82,0x00,0x00,0x00,0xFF,0x01,0x07,0x07,0x07,0xFF,0xF5,0xF5,0xF5,0xFF +,0xA1,0xFF,0xFF,0xFF,0xFF,0x01,0xE4,0xE4,0xE4,0xFF,0x01,0x01,0x01,0xFF,0x82 +,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEC,0x00,0x00,0x00,0x04,0x86,0x00 +,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAB,0x83,0x00 +,0x00,0x00,0xFF,0x00,0xA0,0xA0,0xA0,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x46 +,0x46,0x46,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x3E,0xFF,0x00 +,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x44,0x44,0x44,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x8F +,0x8F,0x8F,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x9A,0x87,0x00 +,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x4A,0x4A,0x4A,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x8F +,0x8F,0x8F,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x87,0xFF,0x00 +,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x8C,0x8C,0x8C,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x38 +,0x38,0x38,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x43,0x87,0x00 +,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0A,0x00,0x00 +,0x00,0xF4,0x82,0x00,0x00,0x00,0xFF,0x01,0x05,0x05,0x05,0xFF,0xEE,0xEE,0xEE +,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0xD9,0xD9,0xD9,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xD1,0xFF,0x00,0x00,0x00,0x00,0x91,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0xC8,0x83,0x00,0x00,0x00,0xFF,0x00,0xD4,0xD4,0xD4 +,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0xE0,0xE0,0xE0,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xE9,0x00,0x00,0x00,0x03,0x87,0x00,0x00,0x00,0x00 +,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA9,0x83,0x00,0x00,0x00,0xFF +,0x00,0x9D,0x9D,0x9D,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x22,0x22,0x22,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x1B,0xFF,0x00,0x00,0x00,0x00 +,0x8F,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xFD,0x82 +,0x00,0x00,0x00,0xFF,0x00,0x1C,0x1C,0x1C,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00 +,0x8A,0x8A,0x8A,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x95,0x88 +,0x00,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x52,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x47,0x47,0x47,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00 +,0x6C,0x6C,0x6C,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x64,0xFF +,0x00,0x00,0x00,0x00,0x8F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x63,0x63,0x63,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00 +,0x33,0x33,0x33,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x3E,0x88 +,0x00,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00 +,0x00,0x00,0xF3,0x82,0x00,0x00,0x00,0xFF,0x01,0x04,0x04,0x04,0xFF,0xEC,0xEC +,0xEC,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0xB5,0xB5,0xB5,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xAD,0xFF,0x00,0x00,0x00,0x00,0x8F,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x9F,0x83,0x00,0x00,0x00,0xFF,0x00,0xAB,0xAB +,0xAB,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0xDB,0xDB,0xDB,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xE5,0x00,0x00,0x00,0x02,0x88,0x00,0x00,0x00 +,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA6,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x9B,0x9B,0x9B,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x01,0xF6,0xF6,0xF6 +,0xFF,0x08,0x08,0x08,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF1 +,0x00,0x00,0x00,0x05,0xFF,0x00,0x00,0x00,0x00,0x8E,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0xE6,0x82,0x00,0x00,0x00,0xFF,0x01,0x03,0x03,0x03,0xFF,0xEF +,0xEF,0xEF,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0x85,0x85,0x85,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x90,0x89,0x00,0x00,0x00,0x00,0x89,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x83,0x00,0x00,0x00,0xFF,0x00,0x44 +,0x44,0x44,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x48,0x48,0x48,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x40,0xFF,0x00,0x00,0x00,0x00,0x8D,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,0x83,0x00,0x00,0x00,0xFF,0x00,0x3A +,0x3A,0x3A,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x2E,0x2E,0x2E,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x39,0x89,0x00,0x00,0x00,0x00,0x89,0x00 +,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xF1,0x82,0x00,0x00 +,0x00,0xFF,0x01,0x03,0x03,0x03,0xFF,0xEA,0xEA,0xEA,0xFF,0xA1,0xFF,0xFF,0xFF +,0xFF,0x00,0x92,0x92,0x92,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x8A,0xFF,0x00,0x00,0x00,0x00,0x8D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x76,0x83,0x00,0x00,0x00,0xFF,0x00,0x82,0x82,0x82,0xFF,0xA1,0xFF,0xFF,0xFF +,0xFF,0x00,0xD7,0xD7,0xD7,0xFF,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00 +,0xE1,0x00,0x00,0x00,0x01,0x89,0x00,0x00,0x00,0x00,0x8A,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0xA3,0x83,0x00,0x00,0x00,0xFF,0x00,0x98,0x98,0x98,0xFF +,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0xDB,0xDB,0xDB,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xD3,0xFF,0x00,0x00,0x00,0x00,0x8D,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0xBE,0x83,0x00,0x00,0x00,0xFF,0x00,0xC9,0xC9,0xC9,0xFF +,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0x80,0x80,0x80,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x8B,0x8A,0x00,0x00,0x00,0x00,0x8A,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x4D,0x83,0x00,0x00,0x00,0xFF,0x00,0x42,0x42,0x42,0xFF +,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x25,0x25,0x25,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x1D,0xFF,0x00,0x00,0x00,0x00,0x8B,0x00,0x00,0x00,0x00 +,0x01,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0xF9,0x82,0x00,0x00,0x00,0xFF,0x01 +,0x13,0x13,0x13,0xFF,0xFD,0xFD,0xFD,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0x29 +,0x29,0x29,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x34,0x8A,0x00 +,0x00,0x00,0x00,0x8A,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00 +,0x00,0xF0,0x82,0x00,0x00,0x00,0xFF,0x01,0x03,0x03,0x03,0xFF,0xE8,0xE8,0xE8 +,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0x6E,0x6E,0x6E,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x66,0xFF,0x00,0x00,0x00,0x00,0x8B,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x4E,0x83,0x00,0x00,0x00,0xFF,0x00,0x59,0x59,0x59 +,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0xD2,0xD2,0xD2,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xDD,0x8B,0x00,0x00,0x00,0x00,0x8B,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0xA0,0x83,0x00,0x00,0x00,0xFF,0x00,0x95,0x95,0x95 +,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0xB8,0xB8,0xB8,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xB0,0xFF,0x00,0x00,0x00,0x00,0x8B,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x95,0x83,0x00,0x00,0x00,0xFF,0x00,0xA0,0xA0,0xA0 +,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0x7B,0x7B,0x7B,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x86,0x8B,0x00,0x00,0x00,0x00,0x8B,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x4A,0x83,0x00,0x00,0x00,0xFF,0x00,0x3F,0x3F,0x3F +,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x01,0xF7,0xF7,0xF7,0xFF,0x0A,0x0A,0x0A,0xFF +,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF3,0x00,0x00,0x00,0x06,0xFF +,0x00,0x00,0x00,0x00,0x8A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDD,0x82 +,0x00,0x00,0x00,0xFF,0x01,0x01,0x01,0x01,0xFF,0xE7,0xE7,0xE7,0xFF,0xA1,0xFF +,0xFF,0xFF,0xFF,0x00,0x24,0x24,0x24,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x2F,0x8B,0x00,0x00,0x00,0x00,0x8B,0x00,0x00,0x00,0x00,0x01,0x00 +,0x00,0x00,0x05,0x00,0x00,0x00,0xEE,0x82,0x00,0x00,0x00,0xFF,0x01,0x02,0x02 +,0x02,0xFF,0xE6,0xE6,0xE6,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0x4B,0x4B,0x4B +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x43,0xFF,0x00,0x00,0x00 +,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x30,0x30,0x30,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0xCD,0xCD,0xCD +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xD8,0x8C,0x00,0x00,0x00 +,0x00,0x8C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9E,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x92,0x92,0x92,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0x94,0x94,0x94 +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8C,0xFF,0x00,0x00,0x00 +,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6D,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x77,0x77,0x77,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0x76,0x76,0x76 +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x81,0x8C,0x00,0x00,0x00 +,0x00,0x8C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x3C,0x3C,0x3C,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0xDE,0xDE,0xDE +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xD6,0xFF,0x00,0x00,0x00 +,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB5,0x83,0x00,0x00,0x00 +,0xFF,0x00,0xBF,0xBF,0xBF,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0x20,0x20,0x20 +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x2A,0x8C,0x00,0x00,0x00 +,0x00,0x8C,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xEC +,0x82,0x00,0x00,0x00,0xFF,0x01,0x01,0x01,0x01,0xFF,0xE4,0xE4,0xE4,0xFF,0xA1 +,0xFF,0xFF,0xFF,0xFF,0x00,0x27,0x27,0x27,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x1F,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x94 +,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x00,0x48,0xB7,0x00,0x00,0x00,0x00,0x01 +,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xF5,0x82,0x00,0x00,0x00,0xFF,0x01,0x0C +,0x0C,0x0C,0xFF,0xFA,0xFA,0xFA,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0xC8,0xC8 +,0xC8,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xD3,0x8D,0x00,0x00 +,0x00,0x00,0x8D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9B,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x90,0x90,0x90,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0x71,0x71 +,0x71,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x69,0xB7,0x00,0x00 +,0x00,0x00,0x01,0x00,0x00,0x00,0x1B,0x00,0x00,0x00,0xFD,0x94,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xEC,0x00,0x00,0x00,0x05,0xB6,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x44,0x83,0x00,0x00,0x00,0xFF,0x00,0x4E,0x4E,0x4E,0xFF +,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0x71,0x71,0x71,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x7C,0x8D,0x00,0x00,0x00,0x00,0x8D,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x44,0x83,0x00,0x00,0x00,0xFF,0x00,0x39,0x39,0x39,0xFF +,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0xBA,0xBA,0xBA,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB2,0xB7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73 +,0x96,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x4B,0xB6,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x8C,0x83,0x00,0x00,0x00,0xFF,0x00,0x96,0x96,0x96,0xFF +,0xA0,0xFF,0xFF,0xFF,0xFF,0x01,0xFE,0xFE,0xFE,0xFF,0x1B,0x1B,0x1B,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x26,0x8D,0x00,0x00,0x00,0x00,0x8D +,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xEA,0x82,0x00 +,0x00,0x00,0xFF,0x01,0x01,0x01,0x01,0xFF,0xE2,0xE2,0xE2,0xFF,0xA0,0xFF,0xFF +,0xFF,0xFF,0x01,0xF8,0xF8,0xF8,0xFF,0x0B,0x0B,0x0B,0xFF,0x82,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xF4,0x00,0x00,0x00,0x07,0xB6,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0xCB,0x96,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA3 +,0xB6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD4,0x83,0x00,0x00,0x00,0xFF +,0x00,0xDE,0xDE,0xDE,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0xC3,0xC3,0xC3,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xCF,0x8E,0x00,0x00,0x00,0x00 +,0x8E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x83,0x00,0x00,0x00,0xFF +,0x00,0x8D,0x8D,0x8D,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0x4D,0x4D,0x4D,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x45,0xB5,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x23,0x97,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF2 +,0x00,0x00,0x00,0x08,0xB4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x26,0x26,0x26,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00 +,0x6C,0x6C,0x6C,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x78,0x8E +,0x00,0x00,0x00,0x00,0x8E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x37,0x37,0x37,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00 +,0x97,0x97,0x97,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8F,0xB5 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7A,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x4D,0x4D,0x4D,0xFF,0x8E,0x9F,0x9F,0x9F,0xFF,0x00,0x34,0x34,0x34,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x52,0xB4,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x63,0x83,0x00,0x00,0x00,0xFF,0x00,0x6D,0x6D,0x6D,0xFF,0xA0 +,0xFF,0xFF,0xFF,0xFF,0x01,0xFD,0xFD,0xFD,0xFF,0x18,0x18,0x18,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x21,0x8E,0x00,0x00,0x00,0x00,0x8E,0x00 +,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xE8,0x83,0x00,0x00 +,0x00,0xFF,0x00,0xE0,0xE0,0xE0,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0xE0,0xE0 +,0xE0,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xD8,0xB5,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0x83,0x00,0x00,0x00,0xFF,0x00,0xC2,0xC2 +,0xC2,0xFF,0x8E,0xFF,0xFF,0xFF,0xFF,0x00,0x9A,0x9A,0x9A,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xAA,0xB4,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0xAB,0x83,0x00,0x00,0x00,0xFF,0x00,0xB5,0xB5,0xB5,0xFF,0xA0,0xFF,0xFF +,0xFF,0xFF,0x00,0xBE,0xBE,0xBE,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xCA,0x8F,0x00,0x00,0x00,0x00,0x8F,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x95,0x83,0x00,0x00,0x00,0xFF,0x00,0x8A,0x8A,0x8A,0xFF,0xA1,0xFF,0xFF +,0xFF,0xFF,0x00,0x2A,0x2A,0x2A,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x22,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2A,0x83,0x00,0x00 +,0x00,0xFF,0x01,0x1C,0x1C,0x1C,0xFF,0xFE,0xFE,0xFE,0xFF,0x8E,0xFF,0xFF,0xFF +,0xFF,0x01,0xED,0xED,0xED,0xFF,0x05,0x05,0x05,0xFF,0x82,0x00,0x00,0x00,0xFF +,0x01,0x00,0x00,0x00,0xF6,0x00,0x00,0x00,0x0C,0xB2,0x00,0x00,0x00,0x00,0x01 +,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xEF,0x82,0x00,0x00,0x00,0xFF,0x01,0x07 +,0x07,0x07,0xFF,0xF5,0xF5,0xF5,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0x67,0x67 +,0x67,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x73,0x8F,0x00,0x00 +,0x00,0x00,0x8F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x34,0x34,0x34,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0x73,0x73 +,0x73,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x6B,0xB3,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x83,0x00,0x00,0x00,0xFF,0x00,0x72,0x72 +,0x72,0xFF,0x90,0xFF,0xFF,0xFF,0xFF,0x00,0x4A,0x4A,0x4A,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x5A,0xB2,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x3B,0x83,0x00,0x00,0x00,0xFF,0x00,0x44,0x44,0x44,0xFF,0xA0,0xFF,0xFF +,0xFF,0xFF,0x01,0xFB,0xFB,0xFB,0xFF,0x14,0x14,0x14,0xFF,0x82,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x1D,0x8F,0x00,0x00,0x00,0x00 +,0x8F,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0xE6,0x83 +,0x00,0x00,0x00,0xFF,0x00,0xDD,0xDD,0xDD,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00 +,0xBD,0xBD,0xBD,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB4,0xB3 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0x83,0x00,0x00,0x00,0xFF,0x00 +,0xCA,0xCA,0xCA,0xFF,0x90,0xFF,0xFF,0xFF,0xFF,0x00,0xA2,0xA2,0xA2,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB1,0xB2,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x82,0x83,0x00,0x00,0x00,0xFF,0x00,0x8C,0x8C,0x8C,0xFF,0xA0 +,0xFF,0xFF,0xFF,0xFF,0x00,0xB9,0xB9,0xB9,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xC5,0x90,0x00,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x92,0x83,0x00,0x00,0x00,0xFF,0x00,0x87,0x87,0x87,0xFF,0xA0 +,0xFF,0xFF,0xFF,0xFF,0x01,0xF9,0xF9,0xF9,0xFF,0x0C,0x0C,0x0C,0xFF,0x82,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF6,0x00,0x00,0x00,0x08,0xB1,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x83,0x00,0x00,0x00,0xFF,0x00,0x22,0x22 +,0x22,0xFF,0x91,0xFF,0xFF,0xFF,0xFF,0x01,0xF2,0xF2,0xF2,0xFF,0x08,0x08,0x08 +,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF9,0x00,0x00,0x00,0x10 +,0xB1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCA,0x83,0x00,0x00,0x00,0xFF +,0x00,0xD4,0xD4,0xD4,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0x62,0x62,0x62,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x6E,0x90,0x00,0x00,0x00,0x00 +,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x83,0x00,0x00,0x00,0xFF +,0x00,0x31,0x31,0x31,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0x50,0x50,0x50,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x47,0xB1,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x89,0x83,0x00,0x00,0x00,0xFF,0x00,0x7A,0x7A,0x7A,0xFF +,0x92,0xFF,0xFF,0xFF,0xFF,0x00,0x52,0x52,0x52,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x61,0xB0,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x14 +,0x00,0x00,0x00,0xFD,0x82,0x00,0x00,0x00,0xFF,0x00,0x1C,0x1C,0x1C,0xFF,0xA0 +,0xFF,0xFF,0xFF,0xFF,0x01,0xFA,0xFA,0xFA,0xFF,0x11,0x11,0x11,0xFF,0x82,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x19,0x90,0x00,0x00 +,0x00,0x00,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00 +,0xE4,0x83,0x00,0x00,0x00,0xFF,0x00,0xDB,0xDB,0xDB,0xFF,0xA0,0xFF,0xFF,0xFF +,0xFF,0x00,0x99,0x99,0x99,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x91,0xB0,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xE0 +,0x83,0x00,0x00,0x00,0xFF,0x00,0xD2,0xD2,0xD2,0xFF,0x92,0xFF,0xFF,0xFF,0xFF +,0x00,0xAA,0xAA,0xAA,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB9 +,0xB0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x83,0x00,0x00,0x00,0xFF +,0x00,0x63,0x63,0x63,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0xB4,0xB4,0xB4,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xC0,0x91,0x00,0x00,0x00,0x00 +,0x91,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x83,0x00,0x00,0x00,0xFF +,0x00,0x85,0x85,0x85,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0xE2,0xE2,0xE2,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xDA,0xB0,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x39,0x83,0x00,0x00,0x00,0xFF,0x00,0x2A,0x2A,0x2A,0xFF +,0x93,0xFF,0xFF,0xFF,0xFF,0x01,0xF6,0xF6,0xF6,0xFF,0x0C,0x0C,0x0C,0xFF,0x82 +,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFB,0x00,0x00,0x00,0x15,0xAF,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA2,0x83,0x00,0x00,0x00,0xFF,0x00,0xAB +,0xAB,0xAB,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0x5D,0x5D,0x5D,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x69,0x91,0x00,0x00,0x00,0x00,0x91,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x39,0x83,0x00,0x00,0x00,0xFF,0x00,0x2E +,0x2E,0x2E,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0x2C,0x2C,0x2C,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x24,0xAF,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x91,0x83,0x00,0x00,0x00,0xFF,0x00,0x81,0x81,0x81,0xFF,0x94,0xFF +,0xFF,0xFF,0xFF,0x00,0x59,0x59,0x59,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x68,0xAE,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00 +,0x00,0xE8,0x82,0x00,0x00,0x00,0xFF,0x01,0x03,0x03,0x03,0xFF,0xEF,0xEF,0xEF +,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x01,0xF8,0xF8,0xF8,0xFF,0x0E,0x0E,0x0E,0xFF +,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x15,0x91 +,0x00,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00 +,0x00,0x00,0xE2,0x83,0x00,0x00,0x00,0xFF,0x00,0xD8,0xD8,0xD8,0xFF,0xA0,0xFF +,0xFF,0xFF,0xFF,0x00,0x76,0x76,0x76,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x6D,0xAE,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00 +,0x00,0xE6,0x83,0x00,0x00,0x00,0xFF,0x00,0xD9,0xD9,0xD9,0xFF,0x94,0xFF,0xFF +,0xFF,0xFF,0x00,0xB1,0xB1,0xB1,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xC0,0xAE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x3A,0x3A,0x3A,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0xAF,0xAF +,0xAF,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xBB,0x92,0x00,0x00 +,0x00,0x00,0x92,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8D,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x82,0x82,0x82,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0xBF,0xBF +,0xBF,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB7,0xAE,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x83,0x00,0x00,0x00,0xFF,0x00,0x31,0x31 +,0x31,0xFF,0x95,0xFF,0xFF,0xFF,0xFF,0x01,0xF9,0xF9,0xF9,0xFF,0x10,0x10,0x10 +,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x1A +,0xAD,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x79,0x83,0x00,0x00,0x00,0xFF +,0x00,0x82,0x82,0x82,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0x58,0x58,0x58,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x64,0x92,0x00,0x00,0x00,0x00 +,0x92,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x83,0x00,0x00,0x00,0xFF +,0x00,0x2C,0x2C,0x2C,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x01,0xFA,0xFA,0xFA,0xFF +,0x0E,0x0E,0x0E,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF7,0x00 +,0x00,0x00,0x09,0xAD,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x89,0x89,0x89,0xFF,0x96,0xFF,0xFF,0xFF,0xFF,0x00,0x61 +,0x61,0x61,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x70,0xAD,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0x83,0x00,0x00,0x00,0xFF,0x00,0xC9 +,0xC9,0xC9,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x01,0xF5,0xF5,0xF5,0xFF,0x0B,0x0B +,0x0B,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFA,0x00,0x00,0x00 +,0x12,0x92,0x00,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0xDF,0x83,0x00,0x00,0x00,0xFF,0x00,0xD5,0xD5,0xD5,0xFF,0xA0,0xFF,0xFF,0xFF +,0xFF,0x00,0x52,0x52,0x52,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x4A,0xAC,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xEC +,0x82,0x00,0x00,0x00,0xFF,0x01,0x01,0x01,0x01,0xFF,0xE0,0xE0,0xE0,0xFF,0x96 +,0xFF,0xFF,0xFF,0xFF,0x00,0xB9,0xB9,0xB9,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xC7,0xAC,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0E,0x00 +,0x00,0x00,0xFA,0x82,0x00,0x00,0x00,0xFF,0x01,0x13,0x13,0x13,0xFF,0xFD,0xFD +,0xFD,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x00,0xAA,0xAA,0xAA,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xB6,0x93,0x00,0x00,0x00,0x00,0x93,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x8A,0x83,0x00,0x00,0x00,0xFF,0x00,0x7F,0x7F +,0x7F,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0x9C,0x9C,0x9C,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x93,0xAC,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x48,0x83,0x00,0x00,0x00,0xFF,0x00,0x39,0x39,0x39,0xFF,0x97,0xFF,0xFF +,0xFF,0xFF,0x01,0xFB,0xFB,0xFB,0xFF,0x15,0x15,0x15,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x20,0xAB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x50,0x83,0x00,0x00,0x00,0xFF,0x00,0x59,0x59,0x59,0xFF,0xA0,0xFF,0xFF,0xFF +,0xFF,0x00,0x53,0x53,0x53,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x5F,0x93,0x00,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x34,0x83,0x00,0x00,0x00,0xFF,0x00,0x29,0x29,0x29,0xFF,0xA0,0xFF,0xFF,0xFF +,0xFF,0x00,0xE5,0xE5,0xE5,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0xDD,0xAC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x91,0x91,0x91,0xFF,0x98,0xFF,0xFF,0xFF,0xFF,0x00,0x69,0x69,0x69 +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x77,0xAB,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x98,0x83,0x00,0x00,0x00,0xFF,0x00,0xA1,0xA1,0xA1 +,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x01,0xF3,0xF3,0xF3,0xFF,0x09,0x09,0x09,0xFF +,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x0F,0x93 +,0x00,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDD,0x83 +,0x00,0x00,0x00,0xFF,0x00,0xD3,0xD3,0xD3,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00 +,0x2F,0x2F,0x2F,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x26,0xAA +,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xF0,0x82,0x00 +,0x00,0x00,0xFF,0x01,0x02,0x02,0x02,0xFF,0xE6,0xE6,0xE6,0xFF,0x98,0xFF,0xFF +,0xFF,0xFF,0x00,0xC1,0xC1,0xC1,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xCF,0xAB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x82,0x00,0x00 +,0x00,0xFF,0x01,0x01,0x01,0x01,0xFF,0xE7,0xE7,0xE7,0xFF,0x9F,0xFF,0xFF,0xFF +,0xFF,0x00,0xA5,0xA5,0xA5,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0xB1,0x94,0x00,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x87,0x83,0x00,0x00,0x00,0xFF,0x00,0x7C,0x7C,0x7C,0xFF,0xA0,0xFF,0xFF,0xFF +,0xFF,0x00,0x78,0x78,0x78,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x70,0xAA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x41,0x41,0x41,0xFF,0x99,0xFF,0xFF,0xFF,0xFF,0x01,0xFD,0xFD,0xFD +,0xFF,0x1B,0x1B,0x1B,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x27 +,0xA9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x83,0x00,0x00,0x00,0xFF +,0x00,0x30,0x30,0x30,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0x4E,0x4E,0x4E,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x5A,0x94,0x00,0x00,0x00,0x00 +,0x94,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x83,0x00,0x00,0x00,0xFF +,0x00,0x26,0x26,0x26,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0xC2,0xC2,0xC2,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB9,0xAA,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0xA8,0x83,0x00,0x00,0x00,0xFF,0x00,0x98,0x98,0x98,0xFF +,0x9A,0xFF,0xFF,0xFF,0xFF,0x00,0x70,0x70,0x70,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x7E,0xA9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6F +,0x83,0x00,0x00,0x00,0xFF,0x00,0x78,0x78,0x78,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF +,0x01,0xF0,0xF0,0xF0,0xFF,0x06,0x06,0x06,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xF6,0x00,0x00,0x00,0x0C,0x94,0x00,0x00,0x00,0x00,0x95,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0x83,0x00,0x00,0x00,0xFF,0x00,0xD0 +,0xD0,0xD0,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x01,0xFB,0xFB,0xFB,0xFF,0x10,0x10 +,0x10,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF8,0x00,0x00,0x00 +,0x0A,0xA8,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0xF4 +,0x82,0x00,0x00,0x00,0xFF,0x01,0x04,0x04,0x04,0xFF,0xEC,0xEC,0xEC,0xFF,0x9A +,0xFF,0xFF,0xFF,0xFF,0x00,0xC8,0xC8,0xC8,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xD6,0xA9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB7,0x83 +,0x00,0x00,0x00,0xFF,0x00,0xBF,0xBF,0xBF,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x00 +,0xA0,0xA0,0xA0,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xAC,0x95 +,0x00,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x7A,0x7A,0x7A,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00 +,0x55,0x55,0x55,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x4C,0xA8 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x48,0x48,0x48,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x21,0x21,0x21,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x2E,0xA7,0x00,0x00,0x00,0x00,0x01 +,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0xF6,0x82,0x00,0x00,0x00,0xFF,0x01,0x0D +,0x0D,0x0D,0xFF,0xFA,0xFA,0xFA,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x00,0x49,0x49 +,0x49,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x55,0x95,0x00,0x00 +,0x00,0x00,0x95,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2E,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x24,0x24,0x24,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0x9E,0x9E +,0x9E,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x96,0xA8,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0xAF,0x83,0x00,0x00,0x00,0xFF,0x00,0xA0,0xA0 +,0xA0,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x78,0x78,0x78,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x86,0xA7,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x47,0x83,0x00,0x00,0x00,0xFF,0x00,0x4F,0x4F,0x4F,0xFF,0x9F,0xFF,0xFF +,0xFF,0xFF,0x01,0xED,0xED,0xED,0xFF,0x05,0x05,0x05,0xFF,0x82,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xF4,0x00,0x00,0x00,0x0A,0x95,0x00,0x00,0x00,0x00 +,0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD8,0x83,0x00,0x00,0x00,0xFF +,0x00,0xCD,0xCD,0xCD,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x01,0xE7,0xE7,0xE7,0xFF +,0x01,0x01,0x01,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xDF,0xA7 +,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0xF8,0x82,0x00 +,0x00,0x00,0xFF,0x01,0x07,0x07,0x07,0xFF,0xF0,0xF0,0xF0,0xFF,0x9C,0xFF,0xFF +,0xFF,0xFF,0x00,0xD0,0xD0,0xD0,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xDD,0xA7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8F,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x96,0x96,0x96,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x00,0x9B,0x9B +,0x9B,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA7,0x96,0x00,0x00 +,0x00,0x00,0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x77,0x77,0x77,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0x31,0x31 +,0x31,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x29,0xA6,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x5F,0x83,0x00,0x00,0x00,0xFF,0x00,0x50,0x50 +,0x50,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0x28,0x28,0x28,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x35,0xA6,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0xD6,0x83,0x00,0x00,0x00,0xFF,0x00,0xDE,0xDE,0xDE,0xFF,0x9F,0xFF,0xFF +,0xFF,0xFF,0x00,0x44,0x44,0x44,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x50,0x96,0x00,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x2B,0x83,0x00,0x00,0x00,0xFF,0x00,0x21,0x21,0x21,0xFF,0xA0,0xFF,0xFF +,0xFF,0xFF,0x00,0x7B,0x7B,0x7B,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x72,0xA6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB7,0x83,0x00,0x00 +,0x00,0xFF,0x00,0xA8,0xA8,0xA8,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0x80,0x80 +,0x80,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8D,0xA5,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x83,0x00,0x00,0x00,0xFF,0x00,0x26,0x26 +,0x26,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x01,0xE9,0xE9,0xE9,0xFF,0x03,0x03,0x03 +,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF1,0x00,0x00,0x00,0x07 +,0x96,0x00,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5 +,0x83,0x00,0x00,0x00,0xFF,0x00,0xCA,0xCA,0xCA,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF +,0x00,0xC4,0xC4,0xC4,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xBC +,0xA5,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xFB,0x82 +,0x00,0x00,0x00,0xFF,0x01,0x0B,0x0B,0x0B,0xFF,0xF5,0xF5,0xF5,0xFF,0x9E,0xFF +,0xFF,0xFF,0xFF,0x00,0xD8,0xD8,0xD8,0xFF,0x83,0x00,0x00,0x00,0xFF,0x01,0x00 +,0x00,0x00,0xE3,0x00,0x00,0x00,0x01,0xA4,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x66,0x83,0x00,0x00,0x00,0xFF,0x00,0x6D,0x6D,0x6D,0xFF,0x9F,0xFF,0xFF +,0xFF,0xFF,0x00,0x96,0x96,0x96,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xA2,0x97,0x00,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x7F,0x83,0x00,0x00,0x00,0xFF,0x00,0x74,0x74,0x74,0xFF,0x9F,0xFF,0xFF +,0xFF,0xFF,0x01,0xFC,0xFC,0xFC,0xFF,0x11,0x11,0x11,0xFF,0x82,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xF9,0x00,0x00,0x00,0x0C,0xA4,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x66,0x83,0x00,0x00,0x00,0xFF,0x00,0x58,0x58,0x58,0xFF +,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0x30,0x30,0x30,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x3D,0xA4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAE +,0x83,0x00,0x00,0x00,0xFF,0x00,0xB5,0xB5,0xB5,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF +,0x00,0x3F,0x3F,0x3F,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x4B +,0x97,0x00,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x29 +,0x83,0x00,0x00,0x00,0xFF,0x00,0x1F,0x1F,0x1F,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF +,0x00,0x57,0x57,0x57,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x4F +,0xA4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBE,0x83,0x00,0x00,0x00,0xFF +,0x00,0xAF,0xAF,0xAF,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0x87,0x87,0x87,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x94,0xA3,0x00,0x00,0x00,0x00 +,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xF1,0x82,0x00,0x00,0x00,0xFF,0x01 +,0x07,0x07,0x07,0xFF,0xF5,0xF5,0xF5,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x01,0xE5 +,0xE5,0xE5,0xFF,0x02,0x02,0x02,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00 +,0x00,0xEE,0x00,0x00,0x00,0x05,0x97,0x00,0x00,0x00,0x00,0x98,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0xD2,0x83,0x00,0x00,0x00,0xFF,0x00,0xC8,0xC8,0xC8 +,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x00,0xA1,0xA1,0xA1,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x98,0xA3,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00 +,0x19,0x00,0x00,0x00,0xFD,0x82,0x00,0x00,0x00,0xFF,0x01,0x0F,0x0F,0x0F,0xFF +,0xF8,0xF8,0xF8,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0xDF,0xDF,0xDF,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE9,0x00,0x00,0x00,0x03,0xA2,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3D,0x83,0x00,0x00,0x00,0xFF,0x00,0x44 +,0x44,0x44,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x00,0x91,0x91,0x91,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x9D,0x98,0x00,0x00,0x00,0x00,0x98,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x83,0x00,0x00,0x00,0xFF,0x00,0x71 +,0x71,0x71,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x01,0xE9,0xE9,0xE9,0xFF,0x01,0x01 +,0x01,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xE1,0xA3,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x83,0x00,0x00,0x00,0xFF,0x00,0x5F,0x5F +,0x5F,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x37,0x37,0x37,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x44,0xA2,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x85,0x83,0x00,0x00,0x00,0xFF,0x00,0x8C,0x8C,0x8C,0xFF,0x9F,0xFF,0xFF +,0xFF,0xFF,0x00,0x3A,0x3A,0x3A,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x46,0x98,0x00,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x26,0x83,0x00,0x00,0x00,0xFF,0x01,0x1D,0x1D,0x1D,0xFF,0xFE,0xFE,0xFE +,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x00,0x34,0x34,0x34,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x2B,0xA2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0xC6,0x83,0x00,0x00,0x00,0xFF,0x00,0xB7,0xB7,0xB7,0xFF,0xA2,0xFF,0xFF,0xFF +,0xFF,0x00,0x8F,0x8F,0x8F,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x9C,0xA2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCD,0x83,0x00,0x00,0x00 +,0xFF,0x00,0xD4,0xD4,0xD4,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x01,0xE1,0xE1,0xE1 +,0xFF,0x01,0x01,0x01,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEB +,0x00,0x00,0x00,0x04,0x98,0x00,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0xCF,0x83,0x00,0x00,0x00,0xFF,0x00,0xC5,0xC5,0xC5,0xFF,0x9F +,0xFF,0xFF,0xFF,0xFF,0x00,0x7E,0x7E,0x7E,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x74,0xA1,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1F,0x00 +,0x00,0x00,0xFE,0x82,0x00,0x00,0x00,0xFF,0x01,0x14,0x14,0x14,0xFF,0xFB,0xFB +,0xFB,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x01,0xE5,0xE5,0xE5,0xFF,0x02,0x02,0x02 +,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEE,0x00,0x00,0x00,0x05 +,0xA0,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0xFE,0x82 +,0x00,0x00,0x00,0xFF,0x00,0x1C,0x1C,0x1C,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x00 +,0x8C,0x8C,0x8C,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x98,0x99 +,0x00,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x79,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x6F,0x6F,0x6F,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x00 +,0xC7,0xC7,0xC7,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xBE,0xA1 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x75,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x67,0x67,0x67,0xFF,0xA4,0xFF,0xFF,0xFF,0xFF,0x00,0x3F,0x3F,0x3F,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x4B,0xA0,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x5C,0x83,0x00,0x00,0x00,0xFF,0x00,0x63,0x63,0x63,0xFF,0x9F +,0xFF,0xFF,0xFF,0xFF,0x00,0x35,0x35,0x35,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x41,0x99,0x00,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x23,0x83,0x00,0x00,0x00,0xFF,0x01,0x1A,0x1A,0x1A,0xFF,0xFE +,0xFE,0xFE,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x01,0xFD,0xFD,0xFD,0xFF,0x13,0x13 +,0x13,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFA,0x00,0x00,0x00 +,0x0D,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCD,0x83,0x00,0x00,0x00 +,0xFF,0x00,0xBF,0xBF,0xBF,0xFF,0xA4,0xFF,0xFF,0xFF,0xFF,0x00,0x97,0x97,0x97 +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA3,0xA0,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0xA4,0x83,0x00,0x00,0x00,0xFF,0x00,0xAB,0xAB,0xAB +,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0xDD,0xDD,0xDD,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xE7,0x00,0x00,0x00,0x02,0x99,0x00,0x00,0x00,0x00 +,0x9A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCD,0x83,0x00,0x00,0x00,0xFF +,0x00,0xC2,0xC2,0xC2,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x00,0x5A,0x5A,0x5A,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x51,0x9F,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x25,0x83,0x00,0x00,0x00,0xFF,0x01,0x19,0x19,0x19,0xFF +,0xFD,0xFD,0xFD,0xFF,0xA4,0xFF,0xFF,0xFF,0xFF,0x01,0xEA,0xEA,0xEA,0xFF,0x04 +,0x04,0x04,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF2,0x00,0x00 +,0x00,0x08,0x9E,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00 +,0xEA,0x82,0x00,0x00,0x00,0xFF,0x01,0x03,0x03,0x03,0xFF,0xEF,0xEF,0xEF,0xFF +,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0x87,0x87,0x87,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x93,0x9A,0x00,0x00,0x00,0x00,0x9A,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x76,0x83,0x00,0x00,0x00,0xFF,0x00,0x6C,0x6C,0x6C,0xFF +,0x9F,0xFF,0xFF,0xFF,0xFF,0x00,0xA4,0xA4,0xA4,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x9A,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7D +,0x83,0x00,0x00,0x00,0xFF,0x00,0x6F,0x6F,0x6F,0xFF,0xA6,0xFF,0xFF,0xFF,0xFF +,0x00,0x47,0x47,0x47,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x53 +,0x9E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x83,0x00,0x00,0x00,0xFF +,0x00,0x3A,0x3A,0x3A,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x00,0x30,0x30,0x30,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x3C,0x9A,0x00,0x00,0x00,0x00 +,0x9A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x83,0x00,0x00,0x00,0xFF +,0x01,0x18,0x18,0x18,0xFF,0xFD,0xFD,0xFD,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x01 +,0xEB,0xEB,0xEB,0xFF,0x02,0x02,0x02,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0xE3,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0x83,0x00 +,0x00,0x00,0xFF,0x00,0xC6,0xC6,0xC6,0xFF,0xA6,0xFF,0xFF,0xFF,0xFF,0x00,0x9E +,0x9E,0x9E,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xAA,0x9E,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x83,0x00,0x00,0x00,0xFF,0x00,0x82 +,0x82,0x82,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0xD9,0xD9,0xD9,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE4,0x00,0x00,0x00,0x01,0x9A,0x00,0x00 +,0x00,0x00,0x9B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCA,0x83,0x00,0x00 +,0x00,0xFF,0x00,0xBF,0xBF,0xBF,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x00,0x37,0x37 +,0x37,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x2D,0x9D,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x2C,0x83,0x00,0x00,0x00,0xFF,0x00,0x1F,0x1F +,0x1F,0xFF,0xA7,0xFF,0xFF,0xFF,0xFF,0x01,0xEF,0xEF,0xEF,0xFF,0x06,0x06,0x06 +,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF6,0x00,0x00,0x00,0x0C +,0x9D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0x83,0x00,0x00,0x00,0xFF +,0x00,0xCA,0xCA,0xCA,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0x82,0x82,0x82,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8E,0x9B,0x00,0x00,0x00,0x00 +,0x9B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x74,0x83,0x00,0x00,0x00,0xFF +,0x00,0x69,0x69,0x69,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x00,0x80,0x80,0x80,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x77,0x9D,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x84,0x83,0x00,0x00,0x00,0xFF,0x00,0x76,0x76,0x76,0xFF +,0xA8,0xFF,0xFF,0xFF,0xFF,0x00,0x4E,0x4E,0x4E,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x5A,0x9C,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0F +,0x00,0x00,0x00,0xFB,0x82,0x00,0x00,0x00,0xFF,0x01,0x14,0x14,0x14,0xFF,0xFD +,0xFD,0xFD,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0x2B,0x2B,0x2B,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x37,0x9B,0x00,0x00,0x00,0x00,0x9B,0x00 +,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0xFE,0x82,0x00,0x00 +,0x00,0xFF,0x01,0x16,0x16,0x16,0xFF,0xFC,0xFC,0xFC,0xFF,0x9E,0xFF,0xFF,0xFF +,0xFF,0x00,0xCA,0xCA,0xCA,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0xC0,0x9D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x83,0x00,0x00,0x00 +,0xFF,0x00,0xCE,0xCE,0xCE,0xFF,0xA8,0xFF,0xFF,0xFF,0xFF,0x00,0xA6,0xA6,0xA6 +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB2,0x9C,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x53,0x83,0x00,0x00,0x00,0xFF,0x00,0x59,0x59,0x59 +,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0xD4,0xD4,0xD4,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xDF,0x9C,0x00,0x00,0x00,0x00,0x9C,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0xC7,0x83,0x00,0x00,0x00,0xFF,0x00,0xBD,0xBD,0xBD +,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x01,0xFD,0xFD,0xFD,0xFF,0x15,0x15,0x15,0xFF +,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFB,0x00,0x00,0x00,0x0F,0x9B +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x26,0x26,0x26,0xFF,0xA9,0xFF,0xFF,0xFF,0xFF,0x01,0xF4,0xF4,0xF4,0xFF,0x0A +,0x0A,0x0A,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF9,0x00,0x00 +,0x00,0x10,0x9B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9B,0x83,0x00,0x00 +,0x00,0xFF,0x00,0xA1,0xA1,0xA1,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0x7D,0x7D +,0x7D,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x89,0x9C,0x00,0x00 +,0x00,0x00,0x9C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x66,0x66,0x66,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x00,0x5D,0x5D +,0x5D,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x53,0x9B,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x8C,0x83,0x00,0x00,0x00,0xFF,0x00,0x7E,0x7E +,0x7E,0xFF,0xAA,0xFF,0xFF,0xFF,0xFF,0x00,0x56,0x56,0x56,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x61,0x9B,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0xE2,0x82,0x00,0x00,0x00,0xFF,0x01,0x01,0x01,0x01,0xFF,0xE7,0xE7,0xE7 +,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0x26,0x26,0x26,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x32,0x9C,0x00,0x00,0x00,0x00,0x9C,0x00,0x00,0x00 +,0x00,0x01,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0xFE,0x82,0x00,0x00,0x00,0xFF +,0x01,0x14,0x14,0x14,0xFF,0xFB,0xFB,0xFB,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00 +,0xA6,0xA6,0xA6,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x9D,0x9A +,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xE2,0x83,0x00 +,0x00,0x00,0xFF,0x00,0xD6,0xD6,0xD6,0xFF,0xAA,0xFF,0xFF,0xFF,0xFF,0x00,0xAE +,0xAE,0xAE,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB9,0x9A,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2A,0x83,0x00,0x00,0x00,0xFF,0x00,0x30 +,0x30,0x30,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0xCF,0xCF,0xCF,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xDB,0x9D,0x00,0x00,0x00,0x00,0x9D,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC4,0x83,0x00,0x00,0x00,0xFF,0x00,0xBA +,0xBA,0xBA,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x01,0xED,0xED,0xED,0xFF,0x02,0x02 +,0x02,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xE5,0x9A,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x3B,0x83,0x00,0x00,0x00,0xFF,0x00,0x2E,0x2E +,0x2E,0xFF,0xAB,0xFF,0xFF,0xFF,0xFF,0x01,0xF7,0xF7,0xF7,0xFF,0x0E,0x0E,0x0E +,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFB,0x00,0x00,0x00,0x15 +,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x72,0x83,0x00,0x00,0x00,0xFF +,0x00,0x78,0x78,0x78,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0x78,0x78,0x78,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x84,0x9D,0x00,0x00,0x00,0x00 +,0x9D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x83,0x00,0x00,0x00,0xFF +,0x00,0x64,0x64,0x64,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x00,0x39,0x39,0x39,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x30,0x99,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x93,0x83,0x00,0x00,0x00,0xFF,0x00,0x86,0x86,0x86,0xFF +,0xAC,0xFF,0xFF,0xFF,0xFF,0x00,0x5E,0x5E,0x5E,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x69,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBA +,0x83,0x00,0x00,0x00,0xFF,0x00,0xBF,0xBF,0xBF,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF +,0x00,0x21,0x21,0x21,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x2D +,0x9D,0x00,0x00,0x00,0x00,0x9D,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1A +,0x00,0x00,0x00,0xFD,0x82,0x00,0x00,0x00,0xFF,0x01,0x12,0x12,0x12,0xFF,0xFB +,0xFB,0xFB,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0x83,0x83,0x83,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x79,0x98,0x00,0x00,0x00,0x00,0x01,0x00 +,0x00,0x00,0x03,0x00,0x00,0x00,0xE8,0x83,0x00,0x00,0x00,0xFF,0x00,0xDD,0xDD +,0xDD,0xFF,0xAC,0xFF,0xFF,0xFF,0xFF,0x00,0xB5,0xB5,0xB5,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xC0,0x98,0x00,0x00,0x00,0x00,0x01,0x00,0x00 +,0x00,0x0A,0x00,0x00,0x00,0xF8,0x82,0x00,0x00,0x00,0xFF,0x01,0x0D,0x0D,0x0D +,0xFF,0xFA,0xFA,0xFA,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0xCA,0xCA,0xCA,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xD6,0x9E,0x00,0x00,0x00,0x00 +,0x9E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0x83,0x00,0x00,0x00,0xFF +,0x00,0xB7,0xB7,0xB7,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0xCC,0xCC,0xCC,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xC3,0x98,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x43,0x83,0x00,0x00,0x00,0xFF,0x00,0x35,0x35,0x35,0xFF +,0xAD,0xFF,0xFF,0xFF,0xFF,0x01,0xFA,0xFA,0xFA,0xFF,0x12,0x12,0x12,0xFF,0x82 +,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x1A,0x97,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4A,0x83,0x00,0x00,0x00,0xFF,0x00,0x4F +,0x4F,0x4F,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0x73,0x73,0x73,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x7F,0x9E,0x00,0x00,0x00,0x00,0x9E,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6B,0x83,0x00,0x00,0x00,0xFF,0x00,0x61 +,0x61,0x61,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x01,0xFE,0xFE,0xFE,0xFF,0x17,0x17 +,0x17,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFC,0x00,0x00,0x00 +,0x10,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9B,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x8D,0x8D,0x8D,0xFF,0xAE,0xFF,0xFF,0xFF,0xFF,0x00,0x65,0x65,0x65 +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x70,0x97,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x91,0x83,0x00,0x00,0x00,0xFF,0x00,0x97,0x97,0x97 +,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x01,0xFE,0xFE,0xFE,0xFF,0x1D,0x1D,0x1D,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x29,0x9E,0x00,0x00,0x00,0x00 +,0x9E,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0xFD,0x82 +,0x00,0x00,0x00,0xFF,0x01,0x11,0x11,0x11,0xFF,0xFA,0xFA,0xFA,0xFF,0x9E,0xFF +,0xFF,0xFF,0xFF,0x00,0x5F,0x5F,0x5F,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x56,0x96,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00 +,0x00,0xED,0x82,0x00,0x00,0x00,0xFF,0x01,0x01,0x01,0x01,0xFF,0xE3,0xE3,0xE3 +,0xFF,0xAE,0xFF,0xFF,0xFF,0xFF,0x00,0xBD,0xBD,0xBD,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xC8,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0xD9,0x83,0x00,0x00,0x00,0xFF,0x00,0xDE,0xDE,0xDE,0xFF,0x9D,0xFF,0xFF,0xFF +,0xFF,0x00,0xC5,0xC5,0xC5,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0xD2,0x9F,0x00,0x00,0x00,0x00,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0xBF,0x83,0x00,0x00,0x00,0xFF,0x00,0xB5,0xB5,0xB5,0xFF,0x9E,0xFF,0xFF,0xFF +,0xFF,0x00,0xA9,0xA9,0xA9,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x9F,0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4A,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x3D,0x3D,0x3D,0xFF,0xAF,0xFF,0xFF,0xFF,0xFF,0x01,0xFD,0xFD,0xFD +,0xFF,0x18,0x18,0x18,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x20 +,0x95,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x83,0x00,0x00,0x00,0xFF +,0x00,0x26,0x26,0x26,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0x6E,0x6E,0x6E,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x7B,0x9F,0x00,0x00,0x00,0x00 +,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x83,0x00,0x00,0x00,0xFF +,0x00,0x5E,0x5E,0x5E,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x01,0xEE,0xEE,0xEE,0xFF +,0x03,0x03,0x03,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE7,0x00 +,0x00,0x00,0x01,0x95,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA2,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x95,0x95,0x95,0xFF,0xB0,0xFF,0xFF,0xFF,0xFF,0x00,0x6D +,0x6D,0x6D,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x77,0x95,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x69,0x83,0x00,0x00,0x00,0xFF,0x00,0x6E +,0x6E,0x6E,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x01,0xFD,0xFD,0xFD,0xFF,0x19,0x19 +,0x19,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x24,0x9F,0x00,0x00 +,0x00,0x00,0x9F,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x00,0x00 +,0xFC,0x82,0x00,0x00,0x00,0xFF,0x01,0x0F,0x0F,0x0F,0xFF,0xF9,0xF9,0xF9,0xFF +,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0x3C,0x3C,0x3C,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x32,0x94,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08 +,0x00,0x00,0x00,0xF2,0x82,0x00,0x00,0x00,0xFF,0x01,0x03,0x03,0x03,0xFF,0xE9 +,0xE9,0xE9,0xFF,0xB0,0xFF,0xFF,0xFF,0xFF,0x00,0xC5,0xC5,0xC5,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xCF,0x95,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0xB0,0x83,0x00,0x00,0x00,0xFF,0x00,0xB5,0xB5,0xB5,0xFF,0x9D,0xFF +,0xFF,0xFF,0xFF,0x00,0xC0,0xC0,0xC0,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0xCD,0xA0,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0xBC,0x83,0x00,0x00,0x00,0xFF,0x00,0xB2,0xB2,0xB2,0xFF,0x9E,0xFF +,0xFF,0xFF,0xFF,0x00,0x85,0x85,0x85,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x7C,0x94,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x52,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x45,0x45,0x45,0xFF,0xB1,0xFF,0xFF,0xFF,0xFF,0x01,0xFE +,0xFE,0xFE,0xFF,0x1E,0x1E,0x1E,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x27,0x93,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00 +,0xF3,0x82,0x00,0x00,0x00,0xFF,0x01,0x07,0x07,0x07,0xFF,0xF5,0xF5,0xF5,0xFF +,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0x69,0x69,0x69,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x76,0xA0,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x66,0x83,0x00,0x00,0x00,0xFF,0x00,0x5C,0x5C,0x5C,0xFF +,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0xCF,0xCF,0xCF,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xC5,0x94,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAA +,0x83,0x00,0x00,0x00,0xFF,0x00,0x9D,0x9D,0x9D,0xFF,0xB2,0xFF,0xFF,0xFF,0xFF +,0x00,0x75,0x75,0x75,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x7F +,0x93,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x83,0x00,0x00,0x00,0xFF +,0x00,0x45,0x45,0x45,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x01,0xFC,0xFC,0xFC,0xFF +,0x15,0x15,0x15,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x20,0xA0 +,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x14,0x00 +,0x00,0x00,0xFB,0x82,0x00,0x00,0x00,0xFF,0x01,0x0D,0x0D,0x0D,0xFF,0xF7,0xF7 +,0xF7,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0x19,0x19,0x19,0xFF,0x82,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x12,0x92,0x00,0x00,0x00 +,0x00,0x01,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0xF6,0x82,0x00,0x00,0x00,0xFF +,0x01,0x06,0x06,0x06,0xFF,0xEE,0xEE,0xEE,0xFF,0xB2,0xFF,0xFF,0xFF,0xFF,0x00 +,0xCC,0xCC,0xCC,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xD6,0x93 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x8C,0x8C,0x8C,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0xBB,0xBB,0xBB,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xC8,0xA1,0x00,0x00,0x00,0x00,0xA1 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB9,0x83,0x00,0x00,0x00,0xFF,0x00 +,0xAF,0xAF,0xAF,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0x62,0x62,0x62,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x58,0x92,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x59,0x83,0x00,0x00,0x00,0xFF,0x00,0x4C,0x4C,0x4C,0xFF,0xB4 +,0xFF,0xFF,0xFF,0xFF,0x00,0x25,0x25,0x25,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x2E,0x92,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x83 +,0x00,0x00,0x00,0xFF,0x00,0xD4,0xD4,0xD4,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x00 +,0x64,0x64,0x64,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x71,0xA1 +,0x00,0x00,0x00,0x00,0xA1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x59,0x59,0x59,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00 +,0xAB,0xAB,0xAB,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA2,0x92 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB1,0x83,0x00,0x00,0x00,0xFF,0x00 +,0xA4,0xA4,0xA4,0xFF,0xB4,0xFF,0xFF,0xFF,0xFF,0x00,0x7C,0x7C,0x7C,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x86,0x91,0x00,0x00,0x00,0x00,0x01 +,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0xFE,0x82,0x00,0x00,0x00,0xFF,0x00,0x1C +,0x1C,0x1C,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x01,0xFA,0xFA,0xFA,0xFF,0x12,0x12 +,0x12,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x1B,0xA1,0x00,0x00,0x00,0x00,0xA1,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00 +,0x12,0x00,0x00,0x00,0xFA,0x82,0x00,0x00,0x00,0xFF,0x01,0x0C,0x0C,0x0C,0xFF +,0xF6,0xF6,0xF6,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x01,0xF0,0xF0,0xF0,0xFF,0x04 +,0x04,0x04,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE9,0x00,0x00 +,0x00,0x01,0x90,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x10,0x00,0x00,0x00 +,0xF9,0x82,0x00,0x00,0x00,0xFF,0x01,0x09,0x09,0x09,0xFF,0xF3,0xF3,0xF3,0xFF +,0xB4,0xFF,0xFF,0xFF,0xFF,0x00,0xD4,0xD4,0xD4,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xDD,0x91,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5F +,0x83,0x00,0x00,0x00,0xFF,0x00,0x63,0x63,0x63,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF +,0x00,0xB6,0xB6,0xB6,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xC3 +,0xA2,0x00,0x00,0x00,0x00,0xA2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB6 +,0x83,0x00,0x00,0x00,0xFF,0x00,0xAC,0xAC,0xAC,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF +,0x00,0x3E,0x3E,0x3E,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x34 +,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x61,0x83,0x00,0x00,0x00,0xFF +,0x00,0x54,0x54,0x54,0xFF,0xB6,0xFF,0xFF,0xFF,0xFF,0x00,0x2C,0x2C,0x2C,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x36,0x90,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0xA7,0x83,0x00,0x00,0x00,0xFF,0x00,0xAB,0xAB,0xAB,0xFF +,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0x5F,0x5F,0x5F,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x6C,0xA2,0x00,0x00,0x00,0x00,0xA2,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x60,0x83,0x00,0x00,0x00,0xFF,0x00,0x56,0x56,0x56,0xFF +,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0x88,0x88,0x88,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x7E,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB9 +,0x83,0x00,0x00,0x00,0xFF,0x00,0xAC,0xAC,0xAC,0xFF,0xB6,0xFF,0xFF,0xFF,0xFF +,0x00,0x84,0x84,0x84,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8D +,0x8F,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0xEC,0x82 +,0x00,0x00,0x00,0xFF,0x01,0x03,0x03,0x03,0xFF,0xEF,0xEF,0xEF,0xFF,0x9C,0xFF +,0xFF,0xFF,0xFF,0x01,0xF8,0xF8,0xF8,0xFF,0x0F,0x0F,0x0F,0xFF,0x82,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x18,0xA2,0x00,0x00,0x00 +,0x00,0xA2,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0xF9 +,0x82,0x00,0x00,0x00,0xFF,0x01,0x0A,0x0A,0x0A,0xFF,0xF5,0xF5,0xF5,0xFF,0x9D +,0xFF,0xFF,0xFF,0xFF,0x00,0xD1,0xD1,0xD1,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xC7,0x8F,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x15,0x00 +,0x00,0x00,0xFB,0x82,0x00,0x00,0x00,0xFF,0x01,0x0D,0x0D,0x0D,0xFF,0xF7,0xF7 +,0xF7,0xFF,0xB6,0xFF,0xFF,0xFF,0xFF,0x00,0xDB,0xDB,0xDB,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xE3,0x00,0x00,0x00,0x01,0x8E,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x37,0x83,0x00,0x00,0x00,0xFF,0x00,0x3A,0x3A,0x3A +,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0xB1,0xB1,0xB1,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xBE,0xA3,0x00,0x00,0x00,0x00,0xA3,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0xB4,0x83,0x00,0x00,0x00,0xFF,0x00,0xAA,0xAA,0xAA +,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0x1B,0x1B,0x1B,0xFF,0x82,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x13,0x8E,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x69,0x83,0x00,0x00,0x00,0xFF,0x00,0x5C,0x5C,0x5C,0xFF +,0xB8,0xFF,0xFF,0xFF,0xFF,0x00,0x34,0x34,0x34,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x3D,0x8E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E +,0x83,0x00,0x00,0x00,0xFF,0x00,0x82,0x82,0x82,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF +,0x00,0x5A,0x5A,0x5A,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x67 +,0xA3,0x00,0x00,0x00,0x00,0xA3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5D +,0x83,0x00,0x00,0x00,0xFF,0x00,0x53,0x53,0x53,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF +,0x00,0x64,0x64,0x64,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x5A +,0x8E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x83,0x00,0x00,0x00,0xFF +,0x00,0xB4,0xB4,0xB4,0xFF,0xB8,0xFF,0xFF,0xFF,0xFF,0x00,0x8C,0x8C,0x8C,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x95,0x8E,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0xC6,0x83,0x00,0x00,0x00,0xFF,0x00,0xCA,0xCA,0xCA,0xFF +,0x9C,0xFF,0xFF,0xFF,0xFF,0x01,0xF6,0xF6,0xF6,0xFF,0x0C,0x0C,0x0C,0xFF,0x82 +,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFB,0x00,0x00,0x00,0x14,0xA3,0x00 +,0x00,0x00,0x00,0xA3,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0E,0x00,0x00 +,0x00,0xF8,0x82,0x00,0x00,0x00,0xFF,0x01,0x09,0x09,0x09,0xFF,0xF3,0xF3,0xF3 +,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0xAE,0xAE,0xAE,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xA4,0x8D,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00 +,0x1A,0x00,0x00,0x00,0xFD,0x82,0x00,0x00,0x00,0xFF,0x01,0x11,0x11,0x11,0xFF +,0xFA,0xFA,0xFA,0xFF,0xB8,0xFF,0xFF,0xFF,0xFF,0x01,0xE2,0xE2,0xE2,0xFF,0x01 +,0x01,0x01,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE9,0x00,0x00 +,0x00,0x03,0x8C,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x11,0x00,0x00,0x00 +,0xFC,0x82,0x00,0x00,0x00,0xFF,0x01,0x14,0x14,0x14,0xFF,0xFD,0xFD,0xFD,0xFF +,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0xAC,0xAC,0xAC,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB9,0xA4,0x00,0x00,0x00,0x00,0xA4,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0xB1,0x83,0x00,0x00,0x00,0xFF,0x00,0xA7,0xA7,0xA7,0xFF +,0x9D,0xFF,0xFF,0xFF,0xFF,0x01,0xF2,0xF2,0xF2,0xFF,0x05,0x05,0x05,0xFF,0x82 +,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEB,0x00,0x00,0x00,0x02,0x8C,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x83,0x00,0x00,0x00,0xFF,0x00,0x63 +,0x63,0x63,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0xE8,0xE8,0xE8,0xFF,0x9C,0xFF +,0xFF,0xFF,0xFF,0x00,0x3B,0x3B,0x3B,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x44,0x8C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x59,0x59,0x59,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0x55 +,0x55,0x55,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x62,0xA4,0x00 +,0x00,0x00,0x00,0xA4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x51,0x51,0x51,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0x41 +,0x41,0x41,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x37,0x8C,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC8,0x83,0x00,0x00,0x00,0xFF,0x00,0xBB +,0xBB,0xBB,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x01,0xF8,0xF8,0xF8,0xFF,0x58,0x58 +,0x58,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x93,0x93,0x93,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x9C,0x8C,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x9D,0x83,0x00,0x00,0x00,0xFF,0x00,0xA1,0xA1,0xA1,0xFF,0x9C,0xFF,0xFF +,0xFF,0xFF,0x01,0xF4,0xF4,0xF4,0xFF,0x09,0x09,0x09,0xFF,0x82,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xFA,0x00,0x00,0x00,0x11,0xA4,0x00,0x00,0x00,0x00 +,0xA4,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0xF7,0x82 +,0x00,0x00,0x00,0xFF,0x01,0x08,0x08,0x08,0xFF,0xF2,0xF2,0xF2,0xFF,0x9D,0xFF +,0xFF,0xFF,0xFF,0x00,0x8A,0x8A,0x8A,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x80,0x8B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x83,0x00 +,0x00,0x00,0xFF,0x01,0x16,0x16,0x16,0xFF,0xFC,0xFC,0xFC,0xFF,0x9B,0xFF,0xFF +,0xFF,0xFF,0x02,0xAF,0xAF,0xAF,0xFF,0x06,0x06,0x06,0xFF,0xF0,0xF0,0xF0,0xFF +,0x9B,0xFF,0xFF,0xFF,0xFF,0x01,0xE8,0xE8,0xE8,0xFF,0x03,0x03,0x03,0xFF,0x82 +,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEE,0x00,0x00,0x00,0x05,0x8B,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE5,0x82,0x00,0x00,0x00,0xFF,0x01,0x01 +,0x01,0x01,0xFF,0xE7,0xE7,0xE7,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0xA7,0xA7 +,0xA7,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB4,0xA5,0x00,0x00 +,0x00,0x00,0xA5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAE,0x83,0x00,0x00 +,0x00,0xFF,0x00,0xA4,0xA4,0xA4,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0xD4,0xD4 +,0xD4,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xCA,0x8B,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x83,0x00,0x00,0x00,0xFF,0x00,0x6B,0x6B +,0x6B,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x02,0x58,0x58,0x58,0xFF,0x00,0x00,0x00 +,0xFF,0xA4,0xA4,0xA4,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x43,0x43,0x43,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x4C,0x8A,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x2D,0x83,0x00,0x00,0x00,0xFF,0x00,0x30,0x30,0x30,0xFF +,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0x50,0x50,0x50,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x5D,0xA5,0x00,0x00,0x00,0x00,0xA5,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x58,0x83,0x00,0x00,0x00,0xFF,0x00,0x4E,0x4E,0x4E,0xFF +,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0x1E,0x1E,0x1E,0xFF,0x82,0x00,0x00,0x00,0xFF +,0x01,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x15,0x8A,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0xCF,0x83,0x00,0x00,0x00,0xFF,0x00,0xC3,0xC3,0xC3,0xFF,0x9B +,0xFF,0xFF,0xFF,0xFF,0x03,0xF5,0xF5,0xF5,0xFF,0x0B,0x0B,0x0B,0xFF,0x00,0x00 +,0x00,0xFF,0x51,0x51,0x51,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x9B,0x9B,0x9B +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA3,0x8A,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x75,0x83,0x00,0x00,0x00,0xFF,0x00,0x78,0x78,0x78 +,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x01,0xF1,0xF1,0xF1,0xFF,0x07,0x07,0x07,0xFF +,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x0E,0xA5 +,0x00,0x00,0x00,0x00,0xA5,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0B,0x00 +,0x00,0x00,0xF6,0x82,0x00,0x00,0x00,0xFF,0x01,0x07,0x07,0x07,0xFF,0xF0,0xF0 +,0xF0,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0x67,0x67,0x67,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x5D,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x27,0x83,0x00,0x00,0x00,0xFF,0x01,0x1C,0x1C,0x1C,0xFF,0xFE,0xFE,0xFE +,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x00,0xAA,0xAA,0xAA,0xFF,0x81,0x00,0x00,0x00 +,0xFF,0x01,0x09,0x09,0x09,0xFF,0xF4,0xF4,0xF4,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF +,0x01,0xED,0xED,0xED,0xFF,0x05,0x05,0x05,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xF2,0x00,0x00,0x00,0x08,0x89,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0xBD,0x83,0x00,0x00,0x00,0xFF,0x00,0xC0,0xC0,0xC0,0xFF,0x9C,0xFF +,0xFF,0xFF,0xFF,0x00,0xA2,0xA2,0xA2,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0xAF,0xA6,0x00,0x00,0x00,0x00,0xA6,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0xAB,0x83,0x00,0x00,0x00,0xFF,0x00,0xA1,0xA1,0xA1,0xFF,0x9D,0xFF +,0xFF,0xFF,0xFF,0x00,0xB0,0xB0,0xB0,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0xA6,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x73,0x73,0x73,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x53 +,0x53,0x53,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00,0xAB,0xAB,0xAB,0xFF,0x9C,0xFF +,0xFF,0xFF,0xFF,0x00,0x4B,0x4B,0x4B,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x53,0x88,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0B,0x00,0x00 +,0x00,0xF9,0x82,0x00,0x00,0x00,0xFF,0x01,0x0D,0x0D,0x0D,0xFF,0xFA,0xFA,0xFA +,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x4A,0x4A,0x4A,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x58,0xA6,0x00,0x00,0x00,0x00,0xA6,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x55,0x83,0x00,0x00,0x00,0xFF,0x00,0x4B,0x4B,0x4B +,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x01,0xF3,0xF3,0xF3,0xFF,0x06,0x06,0x06,0xFF +,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xED,0x00,0x00,0x00,0x02,0x88 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0x83,0x00,0x00,0x00,0xFF,0x00 +,0xCB,0xCB,0xCB,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x01,0xF3,0xF3,0xF3,0xFF,0x09 +,0x09,0x09,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00,0x58,0x58,0x58,0xFF,0x9C,0xFF +,0xFF,0xFF,0xFF,0x00,0xA3,0xA3,0xA3,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0xAB,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4C,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x4F,0x4F,0x4F,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x01,0xEE +,0xEE,0xEE,0xFF,0x05,0x05,0x05,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00 +,0x00,0xF5,0x00,0x00,0x00,0x0B,0xA6,0x00,0x00,0x00,0x00,0xA6,0x00,0x00,0x00 +,0x00,0x01,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0xF4,0x82,0x00,0x00,0x00,0xFF +,0x01,0x06,0x06,0x06,0xFF,0xEF,0xEF,0xEF,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x00 +,0x43,0x43,0x43,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x39,0x87 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x23,0x23,0x23,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0xA6,0xA6,0xA6,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x01,0x0C,0x0C,0x0C,0xFF,0xF7,0xF7,0xF7,0xFF,0x9B,0xFF +,0xFF,0xFF,0xFF,0x01,0xF2,0xF2,0xF2,0xFF,0x08,0x08,0x08,0xFF,0x82,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xF6,0x00,0x00,0x00,0x0C,0x87,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x94,0x83,0x00,0x00,0x00,0xFF,0x00,0x97,0x97,0x97 +,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x9C,0x9C,0x9C,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xAA,0xA7,0x00,0x00,0x00,0x00,0xA7,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0xA8,0x83,0x00,0x00,0x00,0xFF,0x00,0x9F,0x9F,0x9F +,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0x8D,0x8D,0x8D,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x83,0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x87,0x83,0x00,0x00,0x00,0xFF,0x00,0x7A,0x7A,0x7A,0xFF,0x9C,0xFF,0xFF,0xFF +,0xFF,0x00,0x50,0x50,0x50,0xFF,0x84,0x00,0x00,0x00,0xFF,0x00,0xB1,0xB1,0xB1 +,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x52,0x52,0x52,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x5A,0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0xDC,0x83,0x00,0x00,0x00,0xFF,0x00,0xDE,0xDE,0xDE,0xFF,0x9C,0xFF,0xFF,0xFF +,0xFF,0x00,0x45,0x45,0x45,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x53,0xA7,0x00,0x00,0x00,0x00,0xA7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x52,0x83,0x00,0x00,0x00,0xFF,0x00,0x48,0x48,0x48,0xFF,0x9D,0xFF,0xFF,0xFF +,0xFF,0x00,0xD6,0xD6,0xD6,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0xCC,0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x83,0x00,0x00,0x00 +,0xFF,0x00,0xD2,0xD2,0xD2,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x01,0xF2,0xF2,0xF2 +,0xFF,0x08,0x08,0x08,0xFF,0x84,0x00,0x00,0x00,0xFF,0x00,0x5D,0x5D,0x5D,0xFF +,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0xAA,0xAA,0xAA,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB2,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24 +,0x83,0x00,0x00,0x00,0xFF,0x00,0x26,0x26,0x26,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF +,0x01,0xEA,0xEA,0xEA,0xFF,0x04,0x04,0x04,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xF3,0x00,0x00,0x00,0x09,0xA7,0x00,0x00,0x00,0x00,0xA7,0x00 +,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0xF3,0x82,0x00,0x00 +,0x00,0xFF,0x01,0x05,0x05,0x05,0xFF,0xED,0xED,0xED,0xFF,0x9D,0xFF,0xFF,0xFF +,0xFF,0x00,0x20,0x20,0x20,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00 +,0xFE,0x00,0x00,0x00,0x17,0x85,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x36 +,0x83,0x00,0x00,0x00,0xFF,0x00,0x2A,0x2A,0x2A,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF +,0x00,0xA4,0xA4,0xA4,0xFF,0x85,0x00,0x00,0x00,0xFF,0x01,0x10,0x10,0x10,0xFF +,0xF9,0xF9,0xF9,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x01,0xF6,0xF6,0xF6,0xFF,0x0C +,0x0C,0x0C,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF9,0x00,0x00 +,0x00,0x10,0x85,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6B,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x6E,0x6E,0x6E,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x97,0x97 +,0x97,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA5,0xA8,0x00,0x00 +,0x00,0x00,0xA8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA6,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x9C,0x9C,0x9C,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0x69,0x69 +,0x69,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x5F,0x85,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x8E,0x83,0x00,0x00,0x00,0xFF,0x00,0x82,0x82 +,0x82,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x4D,0x4D,0x4D,0xFF,0x86,0x00,0x00 +,0x00,0xFF,0x00,0xB6,0xB6,0xB6,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x5A,0x5A +,0x5A,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x62,0x85,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x83,0x00,0x00,0x00,0xFF,0x00,0xB5,0xB5 +,0xB5,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x40,0x40,0x40,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x4E,0xA8,0x00,0x00,0x00,0x00,0xA8,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x4F,0x83,0x00,0x00,0x00,0xFF,0x00,0x46,0x46 +,0x46,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0xB3,0xB3,0xB3,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xA9,0x84,0x00,0x00,0x00,0x00,0x01,0x00,0x00 +,0x00,0x01,0x00,0x00,0x00,0xE4,0x83,0x00,0x00,0x00,0xFF,0x00,0xDA,0xDA,0xDA +,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x01,0xF0,0xF0,0xF0,0xFF,0x06,0x06,0x06,0xFF +,0x86,0x00,0x00,0x00,0xFF,0x00,0x62,0x62,0x62,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF +,0x00,0xB2,0xB2,0xB2,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB9 +,0x84,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0xF4,0x82 +,0x00,0x00,0x00,0xFF,0x01,0x07,0x07,0x07,0xFF,0xF5,0xF5,0xF5,0xFF,0x9B,0xFF +,0xFF,0xFF,0xFF,0x01,0xE7,0xE7,0xE7,0xFF,0x02,0x02,0x02,0xFF,0x82,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x07,0xA8,0x00,0x00,0x00 +,0x00,0xA8,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xF1 +,0x82,0x00,0x00,0x00,0xFF,0x01,0x04,0x04,0x04,0xFF,0xEB,0xEB,0xEB,0xFF,0x9C +,0xFF,0xFF,0xFF,0xFF,0x01,0xF5,0xF5,0xF5,0xFF,0x07,0x07,0x07,0xFF,0x82,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEE,0x00,0x00,0x00,0x03,0x83,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x83,0x00,0x00,0x00,0xFF,0x00,0x32,0x32 +,0x32,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0xA1,0xA1,0xA1,0xFF,0x87,0x00,0x00 +,0x00,0xFF,0x01,0x13,0x13,0x13,0xFF,0xFB,0xFB,0xFB,0xFF,0x9B,0xFF,0xFF,0xFF +,0xFF,0x01,0xF9,0xF9,0xF9,0xFF,0x10,0x10,0x10,0xFF,0x82,0x00,0x00,0x00,0xFF +,0x01,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x15,0x83,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x43,0x83,0x00,0x00,0x00,0xFF,0x00,0x45,0x45,0x45,0xFF,0x9C +,0xFF,0xFF,0xFF,0xFF,0x00,0x92,0x92,0x92,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xA0,0xA9,0x00,0x00,0x00,0x00,0xA9,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0xA3,0x83,0x00,0x00,0x00,0xFF,0x00,0x99,0x99,0x99,0xFF,0x9D +,0xFF,0xFF,0xFF,0xFF,0x00,0x46,0x46,0x46,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x3C,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x96,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x8A,0x8A,0x8A,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00 +,0x4B,0x4B,0x4B,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xF5,0x83 +,0x00,0x00,0x00,0xFF,0x00,0xBB,0xBB,0xBB,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00 +,0x62,0x62,0x62,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x69,0x83 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8A,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x8D,0x8D,0x8D,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x3B,0x3B,0x3B,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x49,0xA9,0x00,0x00,0x00,0x00,0xA9 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4C,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x43,0x43,0x43,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0x8F,0x8F,0x8F,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x85,0x82,0x00,0x00,0x00,0x00,0x01 +,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xEA,0x82,0x00,0x00,0x00,0xFF,0x01,0x01 +,0x01,0x01,0xFF,0xE0,0xE0,0xE0,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x01,0xEE,0xEE +,0xEE,0xFF,0x05,0x05,0x05,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00 +,0xF4,0x00,0x00,0x00,0x7B,0x83,0x00,0x00,0x00,0xFF,0x00,0x68,0x68,0x68,0xFF +,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0xBA,0xBA,0xBA,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xC1,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2 +,0x83,0x00,0x00,0x00,0xFF,0x00,0xD4,0xD4,0xD4,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF +,0x01,0xE3,0xE3,0xE3,0xFF,0x01,0x01,0x01,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xED,0x00,0x00,0x00,0x05,0xA9,0x00,0x00,0x00,0x00,0xA9,0x00 +,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0xF0,0x82,0x00,0x00 +,0x00,0xFF,0x01,0x03,0x03,0x03,0xFF,0xE9,0xE9,0xE9,0xFF,0x9C,0xFF,0xFF,0xFF +,0xFF,0x00,0xD9,0xD9,0xD9,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0xCF,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x45,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x39,0x39,0x39,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x9E,0x9E,0x9E +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xA9,0x00,0x00,0x00,0x1E +,0x83,0x00,0x00,0x00,0xFF,0x01,0x17,0x17,0x17,0xFF,0xFD,0xFD,0xFD,0xFF,0x9B +,0xFF,0xFF,0xFF,0xFF,0x01,0xFC,0xFC,0xFC,0xFF,0x15,0x15,0x15,0xFF,0x82,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x1B,0x81,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,0x83,0x00,0x00,0x00,0xFF,0x00,0x1C,0x1C +,0x1C,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x8D,0x8D,0x8D,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x9B,0xAA,0x00,0x00,0x00,0x00,0xAA,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x83,0x00,0x00,0x00,0xFF,0x00,0x96,0x96 +,0x96,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0x22,0x22,0x22,0xFF,0x82,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x19,0x81,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x9D,0x83,0x00,0x00,0x00,0xFF,0x00,0x91,0x91,0x91 +,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x48,0x48,0x48,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x02,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCA,0x83 +,0x00,0x00,0x00,0xFF,0x00,0xC0,0xC0,0xC0,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00 +,0x69,0x69,0x69,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x70,0x81 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x64,0x64,0x64,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x36,0x36,0x36,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x44,0xAA,0x00,0x00,0x00,0x00,0xAA +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4A,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x40,0x40,0x40,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0x6C,0x6C,0x6C,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x03,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x06,0x00,0x00,0x00,0xEF,0x82,0x00,0x00,0x00,0xFF,0x01,0x02,0x02,0x02 +,0xFF,0xE7,0xE7,0xE7,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x01,0xED,0xED,0xED,0xFF +,0x04,0x04,0x04,0xFF,0x82,0x00,0x00,0x00,0xFF,0x03,0x00,0x00,0x00,0xF3,0x00 +,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x6D,0x6D,0x6D,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0xC1,0xC1,0xC1 +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xC8,0x81,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0xAA,0x83,0x00,0x00,0x00,0xFF,0x00,0xAB,0xAB,0xAB +,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x00,0xDF,0xDF,0xDF,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xEA,0x00,0x00,0x00,0x03,0xAA,0x00,0x00,0x00,0x00 +,0xAA,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xEE,0x82 +,0x00,0x00,0x00,0xFF,0x01,0x02,0x02,0x02,0xFF,0xE7,0xE7,0xE7,0xFF,0x9C,0xFF +,0xFF,0xFF,0xFF,0x00,0xB5,0xB5,0xB5,0xFF,0x83,0x00,0x00,0x00,0xFF,0x02,0x00 +,0x00,0x00,0xAB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4D,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x41,0x41,0x41,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x9B,0x9B,0x9B +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA6,0x81,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x23,0x83,0x00,0x00,0x00,0xFF,0x01,0x1B,0x1B,0x1B +,0xFF,0xFE,0xFE,0xFE,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x01,0xFE,0xFE,0xFE,0xFF +,0x1B,0x1B,0x1B,0xFF,0x83,0x00,0x00,0x00,0xFF,0x02,0x00,0x00,0x00,0x21,0x00 +,0x00,0x00,0x03,0x00,0x00,0x00,0xEE,0x82,0x00,0x00,0x00,0xFF,0x01,0x03,0x03 +,0x03,0xFF,0xEF,0xEF,0xEF,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x00,0x88,0x88,0x88 +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x96,0xAB,0x00,0x00,0x00 +,0x00,0xAB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9D,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x94,0x94,0x94,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x01,0xF6,0xF6,0xF6 +,0xFF,0x08,0x08,0x08,0xFF,0x82,0x00,0x00,0x00,0xFF,0x02,0x00,0x00,0x00,0xF0 +,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xA5,0x83,0x00,0x00,0x00,0xFF,0x00,0x99 +,0x99,0x99,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x45,0x45,0x45,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x50,0x82,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0xCF,0x83,0x00,0x00,0x00,0xFF,0x00,0xC6,0xC6,0xC6,0xFF,0x9C,0xFF +,0xFF,0xFF,0xFF,0x00,0x71,0x71,0x71,0xFF,0x83,0x00,0x00,0x00,0xFF,0x01,0x00 +,0x00,0x00,0x78,0x00,0x00,0x00,0x39,0x83,0x00,0x00,0x00,0xFF,0x00,0x3B,0x3B +,0x3B,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x31,0x31,0x31,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x3F,0xAB,0x00,0x00,0x00,0x00,0xAB,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x83,0x00,0x00,0x00,0xFF,0x00,0x3D,0x3D +,0x3D,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0x48,0x48,0x48,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0xF3,0x82,0x00,0x00,0x00 +,0xFF,0x01,0x04,0x04,0x04,0xFF,0xEC,0xEC,0xEC,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF +,0x01,0xEB,0xEB,0xEB,0xFF,0x04,0x04,0x04,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xF1,0x00,0x00,0x00,0x07,0x82,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x7B,0x83,0x00,0x00,0x00,0xFF,0x00,0x72,0x72,0x72,0xFF,0x9C,0xFF +,0xFF,0xFF,0xFF,0x00,0xC9,0xC9,0xC9,0xFF,0x83,0x00,0x00,0x00,0xFF,0x01,0x00 +,0x00,0x00,0xCF,0x00,0x00,0x00,0x81,0x83,0x00,0x00,0x00,0xFF,0x00,0x82,0x82 +,0x82,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x00,0xDA,0xDA,0xDA,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xE6,0x00,0x00,0x00,0x02,0xAB,0x00,0x00,0x00 +,0x00,0xAB,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xEC +,0x82,0x00,0x00,0x00,0xFF,0x01,0x02,0x02,0x02,0xFF,0xE5,0xE5,0xE5,0xFF,0x9C +,0xFF,0xFF,0xFF,0xFF,0x00,0x92,0x92,0x92,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xD6,0x83,0x00,0x00,0x00,0xFF,0x00,0x49,0x49,0x49,0xFF,0x9C +,0xFF,0xFF,0xFF,0xFF,0x00,0x98,0x98,0x98,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xA3,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x1F,0x1F,0x1F,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x00 +,0x21,0x21,0x21,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xE3,0x83 +,0x00,0x00,0x00,0xFF,0x00,0xCA,0xCA,0xCA,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x00 +,0x83,0x83,0x83,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x91,0xAC +,0x00,0x00,0x00,0x00,0xAC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9A,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x91,0x91,0x91,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00 +,0xDC,0xDC,0xDC,0xFF,0x88,0x00,0x00,0x00,0xFF,0x00,0xA1,0xA1,0xA1,0xFF,0x9C +,0xFF,0xFF,0xFF,0xFF,0x00,0x42,0x42,0x42,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x4D,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD4,0x83 +,0x00,0x00,0x00,0xFF,0x00,0xCB,0xCB,0xCB,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00 +,0x79,0x79,0x79,0xFF,0x87,0x00,0x00,0x00,0xFF,0x01,0x14,0x14,0x14,0xFF,0xFD +,0xFD,0xFD,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x00,0x2C,0x2C,0x2C,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x3A,0xAC,0x00,0x00,0x00,0x00,0xAC,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x83,0x00,0x00,0x00,0xFF,0x00,0x3B +,0x3B,0x3B,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0x25,0x25,0x25,0xFF,0x86,0x00 +,0x00,0x00,0xFF,0x01,0x07,0x07,0x07,0xFF,0xF1,0xF1,0xF1,0xFF,0x9B,0xFF,0xFF +,0xFF,0xFF,0x01,0xE9,0xE9,0xE9,0xFF,0x03,0x03,0x03,0xFF,0x82,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x06,0x84,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x81,0x83,0x00,0x00,0x00,0xFF,0x00,0x77,0x77,0x77,0xFF +,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0xD1,0xD1,0xD1,0xFF,0x87,0x00,0x00,0x00,0xFF +,0x00,0x59,0x59,0x59,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x00,0xD5,0xD5,0xD5,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE2,0x00,0x00,0x00,0x01,0xAC +,0x00,0x00,0x00,0x00,0xAC,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00 +,0x00,0x00,0xEA,0x82,0x00,0x00,0x00,0xFF,0x01,0x01,0x01,0x01,0xFF,0xE3,0xE3 +,0xE3,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x6F,0x6F,0x6F,0xFF,0x86,0x00,0x00 +,0x00,0xFF,0x00,0x50,0x50,0x50,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x96,0x96 +,0x96,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA1,0x85,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x2D,0x83,0x00,0x00,0x00,0xFF,0x00,0x24,0x24 +,0x24,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0x28,0x28,0x28,0xFF,0x86,0x00,0x00 +,0x00,0xFF,0x00,0xA1,0xA1,0xA1,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x00,0x7E,0x7E +,0x7E,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8C,0xAD,0x00,0x00 +,0x00,0x00,0xAD,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x8E,0x8E,0x8E,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0xB8,0xB8 +,0xB8,0xFF,0x86,0x00,0x00,0x00,0xFF,0x00,0xA8,0xA8,0xA8,0xFF,0x9C,0xFF,0xFF +,0xFF,0xFF,0x00,0x3F,0x3F,0x3F,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x4A,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD9,0x83,0x00,0x00 +,0x00,0xFF,0x00,0xD0,0xD0,0xD0,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x80,0x80 +,0x80,0xFF,0x85,0x00,0x00,0x00,0xFF,0x01,0x01,0x01,0x01,0xFF,0xE8,0xE8,0xE8 +,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x00,0x27,0x27,0x27,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x35,0xAD,0x00,0x00,0x00,0x00,0xAD,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x41,0x83,0x00,0x00,0x00,0xFF,0x00,0x38,0x38,0x38 +,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x01,0xF7,0xF7,0xF7,0xFF,0x0A,0x0A,0x0A,0xFF +,0x84,0x00,0x00,0x00,0xFF,0x01,0x0B,0x0B,0x0B,0xFF,0xF5,0xF5,0xF5,0xFF,0x9B +,0xFF,0xFF,0xFF,0xFF,0x01,0xE7,0xE7,0xE7,0xFF,0x02,0x02,0x02,0xFF,0x82,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEE,0x00,0x00,0x00,0x05,0x86,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x86,0x83,0x00,0x00,0x00,0xFF,0x00,0x7C,0x7C +,0x7C,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0xD8,0xD8,0xD8,0xFF,0x85,0x00,0x00 +,0x00,0xFF,0x00,0x30,0x30,0x30,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x00,0xD0,0xD0 +,0xD0,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xDE,0xAE,0x00,0x00 +,0x00,0x00,0xAD,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00 +,0xE8,0x82,0x00,0x00,0x00,0xFF,0x01,0x01,0x01,0x01,0xFF,0xE1,0xE1,0xE1,0xFF +,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x4B,0x4B,0x4B,0xFF,0x84,0x00,0x00,0x00,0xFF +,0x00,0x58,0x58,0x58,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x93,0x93,0x93,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x9E,0x87,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x32,0x83,0x00,0x00,0x00,0xFF,0x00,0x29,0x29,0x29,0xFF +,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0x30,0x30,0x30,0xFF,0x84,0x00,0x00,0x00,0xFF +,0x00,0x78,0x78,0x78,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x00,0x79,0x79,0x79,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x87,0xAE,0x00,0x00,0x00,0x00 +,0xAE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x95,0x83,0x00,0x00,0x00,0xFF +,0x00,0x8B,0x8B,0x8B,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x95,0x95,0x95,0xFF +,0x84,0x00,0x00,0x00,0xFF,0x00,0xB0,0xB0,0xB0,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF +,0x00,0x3D,0x3D,0x3D,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x48 +,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDE,0x83,0x00,0x00,0x00,0xFF +,0x00,0xD5,0xD5,0xD5,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x88,0x88,0x88,0xFF +,0x84,0x00,0x00,0x00,0xFF,0x00,0xC0,0xC0,0xC0,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF +,0x00,0x23,0x23,0x23,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x30 +,0xAE,0x00,0x00,0x00,0x00,0xAE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F +,0x83,0x00,0x00,0x00,0xFF,0x00,0x35,0x35,0x35,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF +,0x00,0xDE,0xDE,0xDE,0xFF,0x83,0x00,0x00,0x00,0xFF,0x01,0x0F,0x0F,0x0F,0xFF +,0xF8,0xF8,0xF8,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x01,0xE5,0xE5,0xE5,0xFF,0x01 +,0x01,0x01,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xED,0x00,0x00 +,0x00,0x04,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8B,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x82,0x82,0x82,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0xDF,0xDF +,0xDF,0xFF,0x83,0x00,0x00,0x00,0xFF,0x01,0x0D,0x0D,0x0D,0xFF,0xFA,0xFA,0xFA +,0xFF,0x9A,0xFF,0xFF,0xFF,0xFF,0x00,0xCB,0xCB,0xCB,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xD9,0xAF,0x00,0x00,0x00,0x00,0xAE,0x00,0x00,0x00 +,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0xE6,0x83,0x00,0x00,0x00,0xFF +,0x00,0xDE,0xDE,0xDE,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x28,0x28,0x28,0xFF +,0x82,0x00,0x00,0x00,0xFF,0x00,0x60,0x60,0x60,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF +,0x00,0x90,0x90,0x90,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x9B +,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x83,0x00,0x00,0x00,0xFF +,0x00,0x2E,0x2E,0x2E,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x00,0x38,0x38,0x38,0xFF +,0x82,0x00,0x00,0x00,0xFF,0x00,0x4F,0x4F,0x4F,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF +,0x00,0x74,0x74,0x74,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x83 +,0xAF,0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x92 +,0x83,0x00,0x00,0x00,0xFF,0x00,0x89,0x89,0x89,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF +,0x00,0x71,0x71,0x71,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00,0xB8,0xB8,0xB8,0xFF +,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x3A,0x3A,0x3A,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x45,0x89,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01 +,0x00,0x00,0x00,0xE3,0x83,0x00,0x00,0x00,0xFF,0x00,0xDA,0xDA,0xDA,0xFF,0x9C +,0xFF,0xFF,0xFF,0xFF,0x00,0x8F,0x8F,0x8F,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00 +,0x98,0x98,0x98,0xFF,0x9A,0xFF,0xFF,0xFF,0xFF,0x01,0xFE,0xFE,0xFE,0xFF,0x1E +,0x1E,0x1E,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x2C,0xAF,0x00 +,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x32,0x32,0x32,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0xBB +,0xBB,0xBB,0xFF,0x81,0x00,0x00,0x00,0xFF,0x01,0x15,0x15,0x15,0xFF,0xFB,0xFB +,0xFB,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x01,0xE2,0xE2,0xE2,0xFF,0x01,0x01,0x01 +,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEB,0x00,0x00,0x00,0x04 +,0x8A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x83,0x00,0x00,0x00,0xFF +,0x00,0x87,0x87,0x87,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x01,0xE4,0xE4,0xE4,0xFF +,0x01,0x01,0x01,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0xE1,0xE1,0xE1,0xFF,0x9A +,0xFF,0xFF,0xFF,0xFF,0x00,0xC6,0xC6,0xC6,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xD5,0xB0,0x00,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x00,0x01 +,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xE4,0x83,0x00,0x00,0x00,0xFF,0x00,0xDC +,0xDC,0xDC,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x03,0xF9,0xF9,0xF9,0xFF,0x0B,0x0B +,0x0B,0xFF,0x00,0x00,0x00,0xFF,0x69,0x69,0x69,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF +,0x00,0x8D,0x8D,0x8D,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x99 +,0x8B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3D,0x83,0x00,0x00,0x00,0xFF +,0x00,0x33,0x33,0x33,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x02,0x3D,0x3D,0x3D,0xFF +,0x00,0x00,0x00,0xFF,0x29,0x29,0x29,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x00,0x6F +,0x6F,0x6F,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x7E,0xB0,0x00 +,0x00,0x00,0x00,0xB0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8F,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x86,0x86,0x86,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x02,0x4E +,0x4E,0x4E,0xFF,0x00,0x00,0x00,0xFF,0xC1,0xC1,0xC1,0xFF,0x9C,0xFF,0xFF,0xFF +,0xFF,0x00,0x37,0x37,0x37,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x42,0x8B,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0xE7 +,0x83,0x00,0x00,0x00,0xFF,0x00,0xDF,0xDF,0xDF,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF +,0x02,0x94,0x94,0x94,0xFF,0x00,0x00,0x00,0xFF,0x72,0x72,0x72,0xFF,0x9A,0xFF +,0xFF,0xFF,0xFF,0x01,0xFE,0xFE,0xFE,0xFF,0x1A,0x1A,0x1A,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x27,0xB0,0x00,0x00,0x00,0x00,0xB0,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x39,0x83,0x00,0x00,0x00,0xFF,0x00,0x30,0x30 +,0x30,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x02,0x98,0x98,0x98,0xFF,0x1B,0x1B,0x1B +,0xFF,0xFE,0xFE,0xFE,0xFF,0x9B,0xFF,0xFF,0xFF,0xFF,0x00,0xE0,0xE0,0xE0,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE9,0x00,0x00,0x00,0x03,0x8C +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x96,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x8C,0x8C,0x8C,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x02,0xE8,0xE8,0xE8,0xFF,0x03 +,0x03,0x03,0xFF,0xBB,0xBB,0xBB,0xFF,0x9A,0xFF,0xFF,0xFF,0xFF,0x00,0xC1,0xC1 +,0xC1,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xD0,0xB1,0x00,0x00 +,0x00,0x00,0xB0,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00 +,0xE1,0x83,0x00,0x00,0x00,0xFF,0x00,0xD9,0xD9,0xD9,0xFF,0x9B,0xFF,0xFF,0xFF +,0xFF,0x01,0xE1,0xE1,0xE1,0xFF,0x72,0x72,0x72,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF +,0x00,0x8B,0x8B,0x8B,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x96 +,0x8D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x83,0x00,0x00,0x00,0xFF +,0x00,0x39,0x39,0x39,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x01,0x4E,0x4E,0x4E,0xFF +,0xF8,0xF8,0xF8,0xFF,0x9A,0xFF,0xFF,0xFF,0xFF,0x00,0x6A,0x6A,0x6A,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x79,0xB1,0x00,0x00,0x00,0x00,0xB1 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8C,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x83,0x83,0x83,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0xE6,0xE6,0xE6,0xFF,0x9C +,0xFF,0xFF,0xFF,0xFF,0x00,0x34,0x34,0x34,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x40,0x8D,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00 +,0x00,0x00,0xEB,0x82,0x00,0x00,0x00,0xFF,0x01,0x01,0x01,0x01,0xFF,0xE4,0xE4 +,0xE4,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0xDD,0xDD,0xDD,0xFF,0x9A,0xFF,0xFF +,0xFF,0xFF,0x01,0xFC,0xFC,0xFC,0xFF,0x17,0x17,0x17,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x22,0xB1,0x00,0x00,0x00,0x00,0xB1,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x36,0x83,0x00,0x00,0x00,0xFF,0x00,0x2D,0x2D,0x2D +,0xFF,0xB9,0xFF,0xFF,0xFF,0xFF,0x00,0xDE,0xDE,0xDE,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xE7,0x00,0x00,0x00,0x02,0x8E,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x9B,0x83,0x00,0x00,0x00,0xFF,0x00,0x91,0x91,0x91,0xFF +,0xB8,0xFF,0xFF,0xFF,0xFF,0x00,0xBC,0xBC,0xBC,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xCB,0xB2,0x00,0x00,0x00,0x00,0xB2,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0xDF,0x83,0x00,0x00,0x00,0xFF,0x00,0xD7,0xD7,0xD7,0xFF +,0xB8,0xFF,0xFF,0xFF,0xFF,0x00,0x88,0x88,0x88,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x93,0x8F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47 +,0x83,0x00,0x00,0x00,0xFF,0x00,0x3E,0x3E,0x3E,0xFF,0xB8,0xFF,0xFF,0xFF,0xFF +,0x00,0x65,0x65,0x65,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x74 +,0xB2,0x00,0x00,0x00,0x00,0xB2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8A +,0x83,0x00,0x00,0x00,0xFF,0x00,0x80,0x80,0x80,0xFF,0xB8,0xFF,0xFF,0xFF,0xFF +,0x00,0x32,0x32,0x32,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x3D +,0x8F,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xEE,0x82 +,0x00,0x00,0x00,0xFF,0x01,0x02,0x02,0x02,0xFF,0xE8,0xE8,0xE8,0xFF,0xB6,0xFF +,0xFF,0xFF,0xFF,0x01,0xFB,0xFB,0xFB,0xFF,0x13,0x13,0x13,0xFF,0x82,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x1E,0xB2,0x00,0x00,0x00 +,0x00,0xB2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x2A,0x2A,0x2A,0xFF,0xB7,0xFF,0xFF,0xFF,0xFF,0x00,0xDB,0xDB,0xDB +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE5,0x00,0x00,0x00,0x01 +,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x83,0x00,0x00,0x00,0xFF +,0x00,0x97,0x97,0x97,0xFF,0xB6,0xFF,0xFF,0xFF,0xFF,0x00,0xB7,0xB7,0xB7,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xC6,0xB3,0x00,0x00,0x00,0x00 +,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDD,0x83,0x00,0x00,0x00,0xFF +,0x00,0xD4,0xD4,0xD4,0xFF,0xB6,0xFF,0xFF,0xFF,0xFF,0x00,0x85,0x85,0x85,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x91,0x91,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x4D,0x83,0x00,0x00,0x00,0xFF,0x00,0x43,0x43,0x43,0xFF +,0xB6,0xFF,0xFF,0xFF,0xFF,0x00,0x60,0x60,0x60,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x6F,0xB3,0x00,0x00,0x00,0x00,0xB3,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x87,0x83,0x00,0x00,0x00,0xFF,0x00,0x7E,0x7E,0x7E,0xFF +,0xB6,0xFF,0xFF,0xFF,0xFF,0x00,0x2F,0x2F,0x2F,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x3A,0x91,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07 +,0x00,0x00,0x00,0xF2,0x82,0x00,0x00,0x00,0xFF,0x01,0x03,0x03,0x03,0xFF,0xEC +,0xEC,0xEC,0xFF,0xB4,0xFF,0xFF,0xFF,0xFF,0x01,0xF9,0xF9,0xF9,0xFF,0x10,0x10 +,0x10,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFD,0x00,0x00,0x00 +,0x1A,0xB3,0x00,0x00,0x00,0x00,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x31,0x83,0x00,0x00,0x00,0xFF,0x00,0x27,0x27,0x27,0xFF,0xB5,0xFF,0xFF,0xFF +,0xFF,0x00,0xD8,0xD8,0xD8,0xFF,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00 +,0xE3,0x00,0x00,0x00,0x01,0x92,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA5 +,0x83,0x00,0x00,0x00,0xFF,0x00,0x9C,0x9C,0x9C,0xFF,0xB4,0xFF,0xFF,0xFF,0xFF +,0x00,0xB2,0xB2,0xB2,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xC1 +,0xB4,0x00,0x00,0x00,0x00,0xB4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA +,0x83,0x00,0x00,0x00,0xFF,0x00,0xD1,0xD1,0xD1,0xFF,0xB4,0xFF,0xFF,0xFF,0xFF +,0x00,0x82,0x82,0x82,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8E +,0x93,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x52,0x83,0x00,0x00,0x00,0xFF +,0x00,0x48,0x48,0x48,0xFF,0xB4,0xFF,0xFF,0xFF,0xFF,0x00,0x5B,0x5B,0x5B,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x6A,0xB4,0x00,0x00,0x00,0x00 +,0xB4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x83,0x00,0x00,0x00,0xFF +,0x00,0x7B,0x7B,0x7B,0xFF,0xB4,0xFF,0xFF,0xFF,0xFF,0x00,0x2C,0x2C,0x2C,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x38,0x93,0x00,0x00,0x00,0x00 +,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0xF4,0x82,0x00,0x00,0x00,0xFF,0x01 +,0x05,0x05,0x05,0xFF,0xEF,0xEF,0xEF,0xFF,0xB2,0xFF,0xFF,0xFF,0xFF,0x01,0xF7 +,0xF7,0xF7,0xFF,0x0D,0x0D,0x0D,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00 +,0x00,0xFC,0x00,0x00,0x00,0x16,0xB4,0x00,0x00,0x00,0x00,0xB4,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x2E,0x83,0x00,0x00,0x00,0xFF,0x00,0x25,0x25,0x25 +,0xFF,0xB3,0xFF,0xFF,0xFF,0xFF,0x00,0xD6,0xD6,0xD6,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xE1,0x00,0x00,0x00,0x01,0x94,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0xAB,0x83,0x00,0x00,0x00,0xFF,0x00,0xA1,0xA1,0xA1,0xFF +,0xB2,0xFF,0xFF,0xFF,0xFF,0x00,0xAD,0xAD,0xAD,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xBC,0xB5,0x00,0x00,0x00,0x00,0xB5,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0xD7,0x83,0x00,0x00,0x00,0xFF,0x00,0xCE,0xCE,0xCE,0xFF +,0xB2,0xFF,0xFF,0xFF,0xFF,0x00,0x7F,0x7F,0x7F,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x8B,0x95,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57 +,0x83,0x00,0x00,0x00,0xFF,0x00,0x4E,0x4E,0x4E,0xFF,0xB2,0xFF,0xFF,0xFF,0xFF +,0x00,0x56,0x56,0x56,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x65 +,0xB5,0x00,0x00,0x00,0x00,0xB5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81 +,0x83,0x00,0x00,0x00,0xFF,0x00,0x78,0x78,0x78,0xFF,0xB2,0xFF,0xFF,0xFF,0xFF +,0x00,0x29,0x29,0x29,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x35 +,0x95,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0xF7,0x82 +,0x00,0x00,0x00,0xFF,0x01,0x07,0x07,0x07,0xFF,0xF2,0xF2,0xF2,0xFF,0xB0,0xFF +,0xFF,0xFF,0xFF,0x01,0xF5,0xF5,0xF5,0xFF,0x0A,0x0A,0x0A,0xFF,0x82,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xFB,0x00,0x00,0x00,0x13,0xB5,0x00,0x00,0x00 +,0x00,0xB5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2B,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x22,0x22,0x22,0xFF,0xB1,0xFF,0xFF,0xFF,0xFF,0x00,0xD3,0xD3,0xD3 +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xDE,0x97,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0xB0,0x83,0x00,0x00,0x00,0xFF,0x00,0xA6,0xA6,0xA6 +,0xFF,0xB0,0xFF,0xFF,0xFF,0xFF,0x00,0xA8,0xA8,0xA8,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xB7,0xB6,0x00,0x00,0x00,0x00,0xB6,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0xD5,0x83,0x00,0x00,0x00,0xFF,0x00,0xCC,0xCC,0xCC +,0xFF,0xB0,0xFF,0xFF,0xFF,0xFF,0x00,0x7D,0x7D,0x7D,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x89,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x5C,0x83,0x00,0x00,0x00,0xFF,0x00,0x53,0x53,0x53,0xFF,0xB0,0xFF,0xFF,0xFF +,0xFF,0x00,0x51,0x51,0x51,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x60,0xB6,0x00,0x00,0x00,0x00,0xB6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x7E,0x83,0x00,0x00,0x00,0xFF,0x00,0x75,0x75,0x75,0xFF,0xB0,0xFF,0xFF,0xFF +,0xFF,0x00,0x27,0x27,0x27,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x33,0x97,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0xF9 +,0x82,0x00,0x00,0x00,0xFF,0x01,0x0A,0x0A,0x0A,0xFF,0xF5,0xF5,0xF5,0xFF,0xAE +,0xFF,0xFF,0xFF,0xFF,0x01,0xF2,0xF2,0xF2,0xFF,0x08,0x08,0x08,0xFF,0x82,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF9,0x00,0x00,0x00,0x10,0xB6,0x00,0x00 +,0x00,0x00,0xB6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x20,0x20,0x20,0xFF,0xAF,0xFF,0xFF,0xFF,0xFF,0x00,0xD0,0xD0 +,0xD0,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xDC,0x99,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0xB5,0x83,0x00,0x00,0x00,0xFF,0x00,0xAC,0xAC +,0xAC,0xFF,0xAE,0xFF,0xFF,0xFF,0xFF,0x00,0xA3,0xA3,0xA3,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xB2,0xB7,0x00,0x00,0x00,0x00,0xB7,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0x83,0x00,0x00,0x00,0xFF,0x00,0xC9,0xC9 +,0xC9,0xFF,0xAE,0xFF,0xFF,0xFF,0xFF,0x00,0x7A,0x7A,0x7A,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x86,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x61,0x83,0x00,0x00,0x00,0xFF,0x00,0x58,0x58,0x58,0xFF,0xAE,0xFF,0xFF +,0xFF,0xFF,0x00,0x4C,0x4C,0x4C,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x5B,0xB7,0x00,0x00,0x00,0x00,0xB7,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x7C,0x83,0x00,0x00,0x00,0xFF,0x00,0x73,0x73,0x73,0xFF,0xAE,0xFF,0xFF +,0xFF,0xFF,0x00,0x24,0x24,0x24,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x30,0x99,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x12,0x00,0x00,0x00 +,0xFB,0x82,0x00,0x00,0x00,0xFF,0x01,0x0D,0x0D,0x0D,0xFF,0xF7,0xF7,0xF7,0xFF +,0xAC,0xFF,0xFF,0xFF,0xFF,0x01,0xEF,0xEF,0xEF,0xFF,0x06,0x06,0x06,0xFF,0x82 +,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF7,0x00,0x00,0x00,0x0D,0xB7,0x00 +,0x00,0x00,0x00,0xB7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x26,0x83,0x00 +,0x00,0x00,0xFF,0x01,0x1E,0x1E,0x1E,0xFF,0xFE,0xFE,0xFE,0xFF,0xAC,0xFF,0xFF +,0xFF,0xFF,0x00,0xCD,0xCD,0xCD,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xD9,0x9B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBA,0x83,0x00,0x00 +,0x00,0xFF,0x00,0xB1,0xB1,0xB1,0xFF,0xAC,0xFF,0xFF,0xFF,0xFF,0x00,0x9E,0x9E +,0x9E,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xAD,0xB8,0x00,0x00 +,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0xC6,0xC6,0xC6,0xFF,0xAC,0xFF,0xFF,0xFF,0xFF,0x00,0x77,0x77 +,0x77,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x83,0x9B,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x67,0x83,0x00,0x00,0x00,0xFF,0x00,0x5D,0x5D +,0x5D,0xFF,0xAC,0xFF,0xFF,0xFF,0xFF,0x00,0x47,0x47,0x47,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x56,0xB8,0x00,0x00,0x00,0x00,0xB8,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x79,0x83,0x00,0x00,0x00,0xFF,0x00,0x70,0x70 +,0x70,0xFF,0xAC,0xFF,0xFF,0xFF,0xFF,0x00,0x21,0x21,0x21,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x2D,0x9B,0x00,0x00,0x00,0x00,0x01,0x00,0x00 +,0x00,0x16,0x00,0x00,0x00,0xFD,0x82,0x00,0x00,0x00,0xFF,0x01,0x10,0x10,0x10 +,0xFF,0xFA,0xFA,0xFA,0xFF,0xAA,0xFF,0xFF,0xFF,0xFF,0x01,0xEC,0xEC,0xEC,0xFF +,0x04,0x04,0x04,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF4,0x00 +,0x00,0x00,0x0A,0xB8,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x23,0x83,0x00,0x00,0x00,0xFF,0x01,0x1B,0x1B,0x1B,0xFF,0xFE,0xFE +,0xFE,0xFF,0xAA,0xFF,0xFF,0xFF,0xFF,0x00,0xCB,0xCB,0xCB,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xD7,0x9D,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0xC0,0x83,0x00,0x00,0x00,0xFF,0x00,0xB6,0xB6,0xB6,0xFF,0xAA,0xFF,0xFF +,0xFF,0xFF,0x00,0x99,0x99,0x99,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xA8,0xB9,0x00,0x00,0x00,0x00,0xB9,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0xCC,0x83,0x00,0x00,0x00,0xFF,0x00,0xC3,0xC3,0xC3,0xFF,0xAA,0xFF,0xFF +,0xFF,0xFF,0x00,0x74,0x74,0x74,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x81,0x9D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x62,0x62,0x62,0xFF,0xAA,0xFF,0xFF,0xFF,0xFF,0x00,0x42,0x42 +,0x42,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x51,0xB9,0x00,0x00 +,0x00,0x00,0xB9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x6D,0x6D,0x6D,0xFF,0xAA,0xFF,0xFF,0xFF,0xFF,0x00,0x1F,0x1F +,0x1F,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x2B,0x9D,0x00,0x00 +,0x00,0x00,0x01,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0xFE,0x82,0x00,0x00,0x00 +,0xFF,0x01,0x13,0x13,0x13,0xFF,0xFB,0xFB,0xFB,0xFF,0xA8,0xFF,0xFF,0xFF,0xFF +,0x01,0xE8,0xE8,0xE8,0xFF,0x03,0x03,0x03,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xF2,0x00,0x00,0x00,0x08,0xB9,0x00,0x00,0x00,0x00,0xB9,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x83,0x00,0x00,0x00,0xFF,0x01,0x19 +,0x19,0x19,0xFF,0xFD,0xFD,0xFD,0xFF,0xA8,0xFF,0xFF,0xFF,0xFF,0x00,0xC8,0xC8 +,0xC8,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xD4,0x9F,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0xC5,0x83,0x00,0x00,0x00,0xFF,0x00,0xBB,0xBB +,0xBB,0xFF,0xA8,0xFF,0xFF,0xFF,0xFF,0x00,0x94,0x94,0x94,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xA3,0xBA,0x00,0x00,0x00,0x00,0xBA,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0xCA,0x83,0x00,0x00,0x00,0xFF,0x00,0xC1,0xC1 +,0xC1,0xFF,0xA8,0xFF,0xFF,0xFF,0xFF,0x00,0x72,0x72,0x72,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x7E,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x71,0x83,0x00,0x00,0x00,0xFF,0x00,0x68,0x68,0x68,0xFF,0xA8,0xFF,0xFF +,0xFF,0xFF,0x00,0x3D,0x3D,0x3D,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x4C,0xBA,0x00,0x00,0x00,0x00,0xBA,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x73,0x83,0x00,0x00,0x00,0xFF,0x00,0x6A,0x6A,0x6A,0xFF,0xA7,0xFF,0xFF +,0xFF,0xFF,0x01,0xFE,0xFE,0xFE,0xFF,0x1D,0x1D,0x1D,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x28,0x9F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x1E,0x83,0x00,0x00,0x00,0xFF,0x01,0x17,0x17,0x17,0xFF,0xFD,0xFD,0xFD,0xFF +,0xA6,0xFF,0xFF,0xFF,0xFF,0x01,0xE4,0xE4,0xE4,0xFF,0x01,0x01,0x01,0xFF,0x82 +,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEF,0x00,0x00,0x00,0x06,0xBA,0x00 +,0x00,0x00,0x00,0xBA,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1E,0x00,0x00 +,0x00,0xFE,0x82,0x00,0x00,0x00,0xFF,0x01,0x17,0x17,0x17,0xFF,0xFD,0xFD,0xFD +,0xFF,0xA6,0xFF,0xFF,0xFF,0xFF,0x00,0xC5,0xC5,0xC5,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xD2,0xA1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0xCA,0x83,0x00,0x00,0x00,0xFF,0x00,0xC1,0xC1,0xC1,0xFF,0xA6,0xFF,0xFF,0xFF +,0xFF,0x00,0x8F,0x8F,0x8F,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x9E,0xBB,0x00,0x00,0x00,0x00,0xBB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0xC7,0x83,0x00,0x00,0x00,0xFF,0x00,0xBE,0xBE,0xBE,0xFF,0xA6,0xFF,0xFF,0xFF +,0xFF,0x00,0x6F,0x6F,0x6F,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x7B,0xA1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x6D,0x6D,0x6D,0xFF,0xA6,0xFF,0xFF,0xFF,0xFF,0x00,0x38,0x38,0x38 +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x47,0xBB,0x00,0x00,0x00 +,0x00,0xBB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x68,0x68,0x68,0xFF,0xA5,0xFF,0xFF,0xFF,0xFF,0x01,0xFE,0xFE,0xFE +,0xFF,0x1A,0x1A,0x1A,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x25 +,0xA1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x83,0x00,0x00,0x00,0xFF +,0x01,0x1B,0x1B,0x1B,0xFF,0xFE,0xFE,0xFE,0xFF,0xA4,0xFF,0xFF,0xFF,0xFF,0x01 +,0xE0,0xE0,0xE0,0xFF,0x01,0x01,0x01,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00 +,0x00,0x00,0xEC,0x00,0x00,0x00,0x04,0xBB,0x00,0x00,0x00,0x00,0xBB,0x00,0x00 +,0x00,0x00,0x01,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0xFE,0x82,0x00,0x00,0x00 +,0xFF,0x01,0x15,0x15,0x15,0xFF,0xFC,0xFC,0xFC,0xFF,0xA4,0xFF,0xFF,0xFF,0xFF +,0x00,0xC2,0xC2,0xC2,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xCF +,0xA3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCF,0x83,0x00,0x00,0x00,0xFF +,0x00,0xC6,0xC6,0xC6,0xFF,0xA4,0xFF,0xFF,0xFF,0xFF,0x00,0x8A,0x8A,0x8A,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x99,0xBC,0x00,0x00,0x00,0x00 +,0xBC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC4,0x83,0x00,0x00,0x00,0xFF +,0x00,0xBB,0xBB,0xBB,0xFF,0xA4,0xFF,0xFF,0xFF,0xFF,0x00,0x6C,0x6C,0x6C,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x79,0xA3,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x7C,0x83,0x00,0x00,0x00,0xFF,0x00,0x72,0x72,0x72,0xFF +,0xA4,0xFF,0xFF,0xFF,0xFF,0x00,0x33,0x33,0x33,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x42,0xBC,0x00,0x00,0x00,0x00,0xBC,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x6E,0x83,0x00,0x00,0x00,0xFF,0x00,0x65,0x65,0x65,0xFF +,0xA3,0xFF,0xFF,0xFF,0xFF,0x01,0xFD,0xFD,0xFD,0xFF,0x18,0x18,0x18,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x23,0xA3,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x28,0x83,0x00,0x00,0x00,0xFF,0x00,0x1F,0x1F,0x1F,0xFF,0xA3 +,0xFF,0xFF,0xFF,0xFF,0x00,0xDC,0xDC,0xDC,0xFF,0x83,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xE8,0x00,0x00,0x00,0x03,0xBC,0x00,0x00,0x00,0x00,0xBC,0x00 +,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0xFD,0x82,0x00,0x00 +,0x00,0xFF,0x01,0x13,0x13,0x13,0xFF,0xFB,0xFB,0xFB,0xFF,0xA2,0xFF,0xFF,0xFF +,0xFF,0x00,0xBF,0xBF,0xBF,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0xCC,0xA5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD4,0x83,0x00,0x00,0x00 +,0xFF,0x00,0xCB,0xCB,0xCB,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x85,0x85,0x85 +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x94,0xBD,0x00,0x00,0x00 +,0x00,0xBD,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0x83,0x00,0x00,0x00 +,0xFF,0x00,0xB9,0xB9,0xB9,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x69,0x69,0x69 +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x76,0xA5,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x81,0x83,0x00,0x00,0x00,0xFF,0x00,0x77,0x77,0x77 +,0xFF,0xA2,0xFF,0xFF,0xFF,0xFF,0x00,0x2E,0x2E,0x2E,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x3D,0xBD,0x00,0x00,0x00,0x00,0xBD,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x6B,0x83,0x00,0x00,0x00,0xFF,0x00,0x62,0x62,0x62 +,0xFF,0xA1,0xFF,0xFF,0xFF,0xFF,0x01,0xFC,0xFC,0xFC,0xFF,0x16,0x16,0x16,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x21,0xA5,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x2D,0x83,0x00,0x00,0x00,0xFF,0x00,0x24,0x24,0x24,0xFF +,0xA1,0xFF,0xFF,0xFF,0xFF,0x00,0xD7,0xD7,0xD7,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x01,0x00,0x00,0x00,0xE4,0x00,0x00,0x00,0x01,0xBD,0x00,0x00,0x00,0x00,0xBD +,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0xFD,0x82,0x00 +,0x00,0x00,0xFF,0x01,0x11,0x11,0x11,0xFF,0xFA,0xFA,0xFA,0xFF,0xA0,0xFF,0xFF +,0xFF,0xFF,0x00,0xBD,0xBD,0xBD,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xCA,0xA7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0x83,0x00,0x00 +,0x00,0xFF,0x00,0xD0,0xD0,0xD0,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0x80,0x80 +,0x80,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8F,0xBE,0x00,0x00 +,0x00,0x00,0xBE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBE,0x83,0x00,0x00 +,0x00,0xFF,0x00,0xB6,0xB6,0xB6,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0x66,0x66 +,0x66,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x74,0xA7,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x86,0x83,0x00,0x00,0x00,0xFF,0x00,0x7D,0x7D +,0x7D,0xFF,0xA0,0xFF,0xFF,0xFF,0xFF,0x00,0x29,0x29,0x29,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x38,0xBE,0x00,0x00,0x00,0x00,0xBE,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x83,0x00,0x00,0x00,0xFF,0x00,0x60,0x60 +,0x60,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x01,0xFB,0xFB,0xFB,0xFF,0x14,0x14,0x14 +,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x1E +,0xA7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x83,0x00,0x00,0x00,0xFF +,0x00,0x29,0x29,0x29,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x00,0xD2,0xD2,0xD2,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x01,0xBE +,0x00,0x00,0x00,0x00,0xBE,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x15,0x00 +,0x00,0x00,0xFC,0x82,0x00,0x00,0x00,0xFF,0x01,0x10,0x10,0x10,0xFF,0xF9,0xF9 +,0xF9,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0xBA,0xBA,0xBA,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xC7,0xA9,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0xDE,0x83,0x00,0x00,0x00,0xFF,0x00,0xD6,0xD6,0xD6,0xFF,0x9E,0xFF,0xFF +,0xFF,0xFF,0x00,0x7B,0x7B,0x7B,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x8A,0xBF,0x00,0x00,0x00,0x00,0xBF,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0xBC,0x83,0x00,0x00,0x00,0xFF,0x00,0xB3,0xB3,0xB3,0xFF,0x9E,0xFF,0xFF +,0xFF,0xFF,0x00,0x64,0x64,0x64,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x71,0xA9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8B,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x82,0x82,0x82,0xFF,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0x24,0x24 +,0x24,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x33,0xBF,0x00,0x00 +,0x00,0x00,0xBF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x65,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x5D,0x5D,0x5D,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF,0x01,0xFB,0xFB +,0xFB,0xFF,0x12,0x12,0x12,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00 +,0xFE,0x00,0x00,0x00,0x1C,0xA9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38 +,0x83,0x00,0x00,0x00,0xFF,0x00,0x2E,0x2E,0x2E,0xFF,0x9D,0xFF,0xFF,0xFF,0xFF +,0x00,0xCD,0xCD,0xCD,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xDC +,0xC0,0x00,0x00,0x00,0x00,0xBF,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x13 +,0x00,0x00,0x00,0xFB,0x82,0x00,0x00,0x00,0xFF,0x01,0x0E,0x0E,0x0E,0xFF,0xF8 +,0xF8,0xF8,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0xB7,0xB7,0xB7,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xC4,0xAA,0x00,0x00,0x00,0x00,0x01,0x00 +,0x00,0x00,0x01,0x00,0x00,0x00,0xE3,0x83,0x00,0x00,0x00,0xFF,0x00,0xDB,0xDB +,0xDB,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x76,0x76,0x76,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x86,0xC0,0x00,0x00,0x00,0x00,0xC0,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0xB9,0x83,0x00,0x00,0x00,0xFF,0x00,0xB0,0xB0 +,0xB0,0xFF,0x9C,0xFF,0xFF,0xFF,0xFF,0x00,0x61,0x61,0x61,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x6E,0xAB,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x91,0x83,0x00,0x00,0x00,0xFF,0x00,0x87,0x87,0x87,0xFF,0x9C,0xFF,0xFF +,0xFF,0xFF,0x00,0x20,0x20,0x20,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x2F,0xC0,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x62,0x83,0x00,0x00,0x00,0xFF,0x00,0x5A,0x5A,0x5A,0xFF,0x9B,0xFF,0xFF +,0xFF,0xFF,0x01,0xFA,0xFA,0xFA,0xFF,0x11,0x11,0x11,0xFF,0x82,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x1A,0xAB,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x3D,0x83,0x00,0x00,0x00,0xFF,0x00,0x34,0x34,0x34,0xFF +,0x9B,0xFF,0xFF,0xFF,0xFF,0x00,0xC8,0xC8,0xC8,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xD7,0xC1,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00 +,0x01,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xFA,0x82,0x00,0x00,0x00,0xFF,0x01 +,0x0D,0x0D,0x0D,0xFF,0xF7,0xF7,0xF7,0xFF,0x9A,0xFF,0xFF,0xFF,0xFF,0x00,0xB4 +,0xB4,0xB4,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xC2,0xAC,0x00 +,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0xE7,0x83,0x00,0x00 +,0x00,0xFF,0x00,0xDF,0xDF,0xDF,0xFF,0x9A,0xFF,0xFF,0xFF,0xFF,0x00,0x71,0x71 +,0x71,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x81,0xC1,0x00,0x00 +,0x00,0x00,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB6,0x83,0x00,0x00 +,0x00,0xFF,0x00,0xAE,0xAE,0xAE,0xFF,0x9A,0xFF,0xFF,0xFF,0xFF,0x00,0x5E,0x5E +,0x5E,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x6C,0xAD,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x96,0x83,0x00,0x00,0x00,0xFF,0x00,0x8C,0x8C +,0x8C,0xFF,0x99,0xFF,0xFF,0xFF,0xFF,0x01,0xFE,0xFE,0xFE,0xFF,0x1C,0x1C,0x1C +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x2A,0xC1,0x00,0x00,0x00 +,0x00,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x57,0x57,0x57,0xFF,0x99,0xFF,0xFF,0xFF,0xFF,0x01,0xF8,0xF8,0xF8 +,0xFF,0x0F,0x0F,0x0F,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFD +,0x00,0x00,0x00,0x18,0xAD,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x39,0x39,0x39,0xFF,0x99,0xFF,0xFF,0xFF,0xFF,0x00 +,0xC3,0xC3,0xC3,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xD3,0xC2 +,0x00,0x00,0x00,0x00,0xC1,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x10,0x00 +,0x00,0x00,0xF9,0x82,0x00,0x00,0x00,0xFF,0x01,0x0B,0x0B,0x0B,0xFF,0xF5,0xF5 +,0xF5,0xFF,0x98,0xFF,0xFF,0xFF,0xFF,0x00,0xB2,0xB2,0xB2,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xBF,0xAE,0x00,0x00,0x00,0x00,0x01,0x00,0x00 +,0x00,0x03,0x00,0x00,0x00,0xEB,0x82,0x00,0x00,0x00,0xFF,0x01,0x01,0x01,0x01 +,0xFF,0xE4,0xE4,0xE4,0xFF,0x98,0xFF,0xFF,0xFF,0xFF,0x00,0x6C,0x6C,0x6C,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x7C,0xC2,0x00,0x00,0x00,0x00 +,0xC2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB3,0x83,0x00,0x00,0x00,0xFF +,0x00,0xAB,0xAB,0xAB,0xFF,0x98,0xFF,0xFF,0xFF,0xFF,0x00,0x5B,0x5B,0x5B,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x69,0xAF,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x9B,0x83,0x00,0x00,0x00,0xFF,0x00,0x92,0x92,0x92,0xFF +,0x97,0xFF,0xFF,0xFF,0xFF,0x01,0xFD,0xFD,0xFD,0xFF,0x18,0x18,0x18,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x25,0xC2,0x00,0x00,0x00,0x00,0xC2 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5D,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x55,0x55,0x55,0xFF,0x97,0xFF,0xFF,0xFF,0xFF,0x01,0xF7,0xF7,0xF7,0xFF,0x0D +,0x0D,0x0D,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFC,0x00,0x00 +,0x00,0x16,0xAF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x3E,0x3E,0x3E,0xFF,0x97,0xFF,0xFF,0xFF,0xFF,0x00,0xBE,0xBE +,0xBE,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xCE,0xC3,0x00,0x00 +,0x00,0x00,0xC2,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0E,0x00,0x00,0x00 +,0xF8,0x82,0x00,0x00,0x00,0xFF,0x01,0x0A,0x0A,0x0A,0xFF,0xF4,0xF4,0xF4,0xFF +,0x96,0xFF,0xFF,0xFF,0xFF,0x00,0xAF,0xAF,0xAF,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xBC,0xB0,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05 +,0x00,0x00,0x00,0xEE,0x82,0x00,0x00,0x00,0xFF,0x01,0x02,0x02,0x02,0xFF,0xE8 +,0xE8,0xE8,0xFF,0x96,0xFF,0xFF,0xFF,0xFF,0x00,0x67,0x67,0x67,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x77,0xC3,0x00,0x00,0x00,0x00,0xC3,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB0,0x83,0x00,0x00,0x00,0xFF,0x00,0xA8 +,0xA8,0xA8,0xFF,0x96,0xFF,0xFF,0xFF,0xFF,0x00,0x59,0x59,0x59,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x66,0xB1,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0xA0,0x83,0x00,0x00,0x00,0xFF,0x00,0x97,0x97,0x97,0xFF,0x95,0xFF +,0xFF,0xFF,0xFF,0x01,0xFB,0xFB,0xFB,0xFF,0x14,0x14,0x14,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x20,0xC3,0x00,0x00,0x00,0x00,0xC3,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x5A,0x83,0x00,0x00,0x00,0xFF,0x00,0x52,0x52 +,0x52,0xFF,0x95,0xFF,0xFF,0xFF,0xFF,0x01,0xF6,0xF6,0xF6,0xFF,0x0C,0x0C,0x0C +,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFB,0x00,0x00,0x00,0x14 +,0xB1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4D,0x83,0x00,0x00,0x00,0xFF +,0x00,0x43,0x43,0x43,0xFF,0x95,0xFF,0xFF,0xFF,0xFF,0x00,0xB9,0xB9,0xB9,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xC9,0xC4,0x00,0x00,0x00,0x00 +,0xC3,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0xF7,0x82 +,0x00,0x00,0x00,0xFF,0x01,0x08,0x08,0x08,0xFF,0xF3,0xF3,0xF3,0xFF,0x94,0xFF +,0xFF,0xFF,0xFF,0x00,0xAC,0xAC,0xAC,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0xBA,0xB2,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00 +,0x00,0xF2,0x82,0x00,0x00,0x00,0xFF,0x01,0x04,0x04,0x04,0xFF,0xEC,0xEC,0xEC +,0xFF,0x94,0xFF,0xFF,0xFF,0xFF,0x00,0x62,0x62,0x62,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x72,0xC4,0x00,0x00,0x00,0x00,0xC4,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0xAE,0x83,0x00,0x00,0x00,0xFF,0x00,0xA5,0xA5,0xA5 +,0xFF,0x94,0xFF,0xFF,0xFF,0xFF,0x00,0x56,0x56,0x56,0xFF,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x64,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0xA6,0x83,0x00,0x00,0x00,0xFF,0x00,0x9C,0x9C,0x9C,0xFF,0x93,0xFF,0xFF,0xFF +,0xFF,0x01,0xFA,0xFA,0xFA,0xFF,0x11,0x11,0x11,0xFF,0x82,0x00,0x00,0x00,0xFF +,0x01,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x1C,0xC4,0x00,0x00,0x00,0x00,0xC4 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x4F,0x4F,0x4F,0xFF,0x93,0xFF,0xFF,0xFF,0xFF,0x01,0xF5,0xF5,0xF5,0xFF,0x0A +,0x0A,0x0A,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFB,0x00,0x00 +,0x00,0x12,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x52,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x49,0x49,0x49,0xFF,0x93,0xFF,0xFF,0xFF,0xFF,0x00,0xB4,0xB4 +,0xB4,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xC4,0xC5,0x00,0x00 +,0x00,0x00,0xC4,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0B,0x00,0x00,0x00 +,0xF5,0x82,0x00,0x00,0x00,0xFF,0x01,0x07,0x07,0x07,0xFF,0xF1,0xF1,0xF1,0xFF +,0x92,0xFF,0xFF,0xFF,0xFF,0x00,0xA9,0xA9,0xA9,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB7,0xB4,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09 +,0x00,0x00,0x00,0xF4,0x82,0x00,0x00,0x00,0xFF,0x01,0x05,0x05,0x05,0xFF,0xEF +,0xEF,0xEF,0xFF,0x92,0xFF,0xFF,0xFF,0xFF,0x00,0x5D,0x5D,0x5D,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x6D,0xC5,0x00,0x00,0x00,0x00,0xC5,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAB,0x83,0x00,0x00,0x00,0xFF,0x00,0xA3 +,0xA3,0xA3,0xFF,0x92,0xFF,0xFF,0xFF,0xFF,0x00,0x53,0x53,0x53,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x61,0xB5,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0xAB,0x83,0x00,0x00,0x00,0xFF,0x00,0xA1,0xA1,0xA1,0xFF,0x91,0xFF +,0xFF,0xFF,0xFF,0x01,0xF8,0xF8,0xF8,0xFF,0x0E,0x0E,0x0E,0xFF,0x82,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x18,0xC5,0x00,0x00,0x00 +,0x00,0xC5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x4C,0x4C,0x4C,0xFF,0x91,0xFF,0xFF,0xFF,0xFF,0x01,0xF3,0xF3,0xF3 +,0xFF,0x09,0x09,0x09,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFA +,0x00,0x00,0x00,0x11,0xB5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x4E,0x4E,0x4E,0xFF,0x91,0xFF,0xFF,0xFF,0xFF,0x00 +,0xAF,0xAF,0xAF,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xBF,0xC6 +,0x00,0x00,0x00,0x00,0xC5,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0A,0x00 +,0x00,0x00,0xF4,0x82,0x00,0x00,0x00,0xFF,0x01,0x06,0x06,0x06,0xFF,0xEF,0xEF +,0xEF,0xFF,0x90,0xFF,0xFF,0xFF,0xFF,0x00,0xA6,0xA6,0xA6,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xB5,0xB6,0x00,0x00,0x00,0x00,0x01,0x00,0x00 +,0x00,0x0C,0x00,0x00,0x00,0xF7,0x82,0x00,0x00,0x00,0xFF,0x01,0x07,0x07,0x07 +,0xFF,0xF2,0xF2,0xF2,0xFF,0x90,0xFF,0xFF,0xFF,0xFF,0x00,0x58,0x58,0x58,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x68,0xC6,0x00,0x00,0x00,0x00 +,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA8,0x83,0x00,0x00,0x00,0xFF +,0x00,0xA0,0xA0,0xA0,0xFF,0x90,0xFF,0xFF,0xFF,0xFF,0x00,0x50,0x50,0x50,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x5E,0xB7,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0xB0,0x83,0x00,0x00,0x00,0xFF,0x00,0xA7,0xA7,0xA7,0xFF +,0x8F,0xFF,0xFF,0xFF,0xFF,0x01,0xF5,0xF5,0xF5,0xFF,0x0B,0x0B,0x0B,0xFF,0x82 +,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x15,0xC6,0x00 +,0x00,0x00,0x00,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x52,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x4A,0x4A,0x4A,0xFF,0x8F,0xFF,0xFF,0xFF,0xFF,0x01,0xF2 +,0xF2,0xF2,0xFF,0x08,0x08,0x08,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00 +,0x00,0xF9,0x00,0x00,0x00,0x0F,0xB7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x5C,0x83,0x00,0x00,0x00,0xFF,0x00,0x53,0x53,0x53,0xFF,0x8F,0xFF,0xFF,0xFF +,0xFF,0x00,0xAA,0xAA,0xAA,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0xBA,0xC7,0x00,0x00,0x00,0x00,0xC6,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00 +,0x08,0x00,0x00,0x00,0xF3,0x82,0x00,0x00,0x00,0xFF,0x01,0x05,0x05,0x05,0xFF +,0xEE,0xEE,0xEE,0xFF,0x8E,0xFF,0xFF,0xFF,0xFF,0x00,0xA4,0xA4,0xA4,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB2,0xB8,0x00,0x00,0x00,0x00,0x01 +,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0xF9,0x82,0x00,0x00,0x00,0xFF,0x01,0x0A +,0x0A,0x0A,0xFF,0xF5,0xF5,0xF5,0xFF,0x8E,0xFF,0xFF,0xFF,0xFF,0x00,0x53,0x53 +,0x53,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x63,0xC7,0x00,0x00 +,0x00,0x00,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA5,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x9D,0x9D,0x9D,0xFF,0x8E,0xFF,0xFF,0xFF,0xFF,0x00,0x4D,0x4D +,0x4D,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x5C,0xB9,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0xB5,0x83,0x00,0x00,0x00,0xFF,0x00,0xAC,0xAC +,0xAC,0xFF,0x8D,0xFF,0xFF,0xFF,0xFF,0x01,0xF3,0xF3,0xF3,0xFF,0x09,0x09,0x09 +,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFA,0x00,0x00,0x00,0x12 +,0xC7,0x00,0x00,0x00,0x00,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4F +,0x83,0x00,0x00,0x00,0xFF,0x00,0x47,0x47,0x47,0xFF,0x8D,0xFF,0xFF,0xFF,0xFF +,0x01,0xF0,0xF0,0xF0,0xFF,0x07,0x07,0x07,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xF7,0x00,0x00,0x00,0x0D,0xB9,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x62,0x83,0x00,0x00,0x00,0xFF,0x00,0x58,0x58,0x58,0xFF,0x8D,0xFF +,0xFF,0xFF,0xFF,0x00,0xA5,0xA5,0xA5,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0xB5,0xC8,0x00,0x00,0x00,0x00,0xC7,0x00,0x00,0x00,0x00,0x01,0x00 +,0x00,0x00,0x07,0x00,0x00,0x00,0xF1,0x82,0x00,0x00,0x00,0xFF,0x01,0x04,0x04 +,0x04,0xFF,0xEC,0xEC,0xEC,0xFF,0x8C,0xFF,0xFF,0xFF,0xFF,0x00,0xA1,0xA1,0xA1 +,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xAF,0xBA,0x00,0x00,0x00 +,0x00,0x01,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xFB,0x82,0x00,0x00,0x00,0xFF +,0x01,0x0D,0x0D,0x0D,0xFF,0xF7,0xF7,0xF7,0xFF,0x8C,0xFF,0xFF,0xFF,0xFF,0x00 +,0x4E,0x4E,0x4E,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x5E,0xC8 +,0x00,0x00,0x00,0x00,0xC8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA2,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x9A,0x9A,0x9A,0xFF,0x8C,0xFF,0xFF,0xFF,0xFF,0x00 +,0x4B,0x4B,0x4B,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x59,0xBB +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBA,0x83,0x00,0x00,0x00,0xFF,0x00 +,0xB1,0xB1,0xB1,0xFF,0x8B,0xFF,0xFF,0xFF,0xFF,0x01,0xF0,0xF0,0xF0,0xFF,0x07 +,0x07,0x07,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF8,0x00,0x00 +,0x00,0x0E,0xC8,0x00,0x00,0x00,0x00,0xC8,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x4C,0x83,0x00,0x00,0x00,0xFF,0x00,0x44,0x44,0x44,0xFF,0x8B,0xFF,0xFF +,0xFF,0xFF,0x01,0xEE,0xEE,0xEE,0xFF,0x05,0x05,0x05,0xFF,0x82,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xF6,0x00,0x00,0x00,0x0C,0xBB,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x67,0x83,0x00,0x00,0x00,0xFF,0x00,0x5D,0x5D,0x5D,0xFF +,0x8B,0xFF,0xFF,0xFF,0xFF,0x00,0xA0,0xA0,0xA0,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB0,0xC9,0x00,0x00,0x00,0x00,0xC8,0x00,0x00,0x00,0x00 +,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0xEF,0x82,0x00,0x00,0x00,0xFF,0x01 +,0x03,0x03,0x03,0xFF,0xEA,0xEA,0xEA,0xFF,0x8A,0xFF,0xFF,0xFF,0xFF,0x00,0x9E +,0x9E,0x9E,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xAD,0xBC,0x00 +,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0xFD,0x82,0x00,0x00 +,0x00,0xFF,0x01,0x10,0x10,0x10,0xFF,0xFA,0xFA,0xFA,0xFF,0x8A,0xFF,0xFF,0xFF +,0xFF,0x00,0x49,0x49,0x49,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x59,0xC9,0x00,0x00,0x00,0x00,0xC9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0xA0,0x83,0x00,0x00,0x00,0xFF,0x00,0x98,0x98,0x98,0xFF,0x8A,0xFF,0xFF,0xFF +,0xFF,0x00,0x48,0x48,0x48,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x56,0xBD,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x83,0x00,0x00,0x00 +,0xFF,0x00,0xB6,0xB6,0xB6,0xFF,0x89,0xFF,0xFF,0xFF,0xFF,0x01,0xED,0xED,0xED +,0xFF,0x05,0x05,0x05,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF6 +,0x00,0x00,0x00,0x0C,0xC9,0x00,0x00,0x00,0x00,0xC9,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x49,0x83,0x00,0x00,0x00,0xFF,0x00,0x41,0x41,0x41,0xFF,0x89 +,0xFF,0xFF,0xFF,0xFF,0x01,0xED,0xED,0xED,0xFF,0x04,0x04,0x04,0xFF,0x82,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF5,0x00,0x00,0x00,0x0B,0xBD,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x83,0x00,0x00,0x00,0xFF,0x00,0x63,0x63 +,0x63,0xFF,0x89,0xFF,0xFF,0xFF,0xFF,0x00,0x9B,0x9B,0x9B,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xAB,0xCA,0x00,0x00,0x00,0x00,0xC9,0x00,0x00 +,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xEE,0x82,0x00,0x00,0x00 +,0xFF,0x01,0x02,0x02,0x02,0xFF,0xE8,0xE8,0xE8,0xFF,0x88,0xFF,0xFF,0xFF,0xFF +,0x00,0x9B,0x9B,0x9B,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xAA +,0xBE,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0xFE,0x82 +,0x00,0x00,0x00,0xFF,0x01,0x13,0x13,0x13,0xFF,0xFB,0xFB,0xFB,0xFF,0x88,0xFF +,0xFF,0xFF,0xFF,0x00,0x44,0x44,0x44,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x54,0xCA,0x00,0x00,0x00,0x00,0xCA,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x9D,0x83,0x00,0x00,0x00,0xFF,0x00,0x95,0x95,0x95,0xFF,0x88,0xFF +,0xFF,0xFF,0xFF,0x00,0x45,0x45,0x45,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x54,0xBF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC5,0x83,0x00 +,0x00,0x00,0xFF,0x00,0xBC,0xBC,0xBC,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0x01,0xE9 +,0xE9,0xE9,0xFF,0x03,0x03,0x03,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00 +,0x00,0xF3,0x00,0x00,0x00,0x09,0xCA,0x00,0x00,0x00,0x00,0xCA,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x47,0x83,0x00,0x00,0x00,0xFF,0x00,0x3F,0x3F,0x3F +,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0x01,0xEB,0xEB,0xEB,0xFF,0x04,0x04,0x04,0xFF +,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF4,0x00,0x00,0x00,0x09,0xBF +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x68,0x68,0x68,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0x00,0x96,0x96,0x96,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA6,0xCB,0x00,0x00,0x00,0x00,0xCA +,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xEC,0x82,0x00 +,0x00,0x00,0xFF,0x01,0x02,0x02,0x02,0xFF,0xE6,0xE6,0xE6,0xFF,0x86,0xFF,0xFF +,0xFF,0xFF,0x00,0x99,0x99,0x99,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xA7,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x83,0x00,0x00 +,0x00,0xFF,0x01,0x17,0x17,0x17,0xFF,0xFD,0xFD,0xFD,0xFF,0x86,0xFF,0xFF,0xFF +,0xFF,0x00,0x3F,0x3F,0x3F,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x4F,0xCB,0x00,0x00,0x00,0x00,0xCB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x9A,0x83,0x00,0x00,0x00,0xFF,0x00,0x92,0x92,0x92,0xFF,0x86,0xFF,0xFF,0xFF +,0xFF,0x00,0x42,0x42,0x42,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x51,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCA,0x83,0x00,0x00,0x00 +,0xFF,0x00,0xC1,0xC1,0xC1,0xFF,0x85,0xFF,0xFF,0xFF,0xFF,0x01,0xE6,0xE6,0xE6 +,0xFF,0x02,0x02,0x02,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF1 +,0x00,0x00,0x00,0x07,0xCB,0x00,0x00,0x00,0x00,0xCB,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x44,0x83,0x00,0x00,0x00,0xFF,0x00,0x3C,0x3C,0x3C,0xFF,0x85 +,0xFF,0xFF,0xFF,0xFF,0x01,0xE9,0xE9,0xE9,0xFF,0x03,0x03,0x03,0xFF,0x82,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF2,0x00,0x00,0x00,0x08,0xC1,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x83,0x00,0x00,0x00,0xFF,0x00,0x6D,0x6D +,0x6D,0xFF,0x85,0xFF,0xFF,0xFF,0xFF,0x00,0x91,0x91,0x91,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xA1,0xCC,0x00,0x00,0x00,0x00,0xCB,0x00,0x00 +,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xEA,0x82,0x00,0x00,0x00 +,0xFF,0x01,0x01,0x01,0x01,0xFF,0xE4,0xE4,0xE4,0xFF,0x84,0xFF,0xFF,0xFF,0xFF +,0x00,0x96,0x96,0x96,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA5 +,0xC2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x83,0x00,0x00,0x00,0xFF +,0x01,0x1B,0x1B,0x1B,0xFF,0xFE,0xFE,0xFE,0xFF,0x84,0xFF,0xFF,0xFF,0xFF,0x00 +,0x3A,0x3A,0x3A,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x4A,0xCC +,0x00,0x00,0x00,0x00,0xCC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x8F,0x8F,0x8F,0xFF,0x84,0xFF,0xFF,0xFF,0xFF,0x00 +,0x3F,0x3F,0x3F,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x4E,0xC3 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCF,0x83,0x00,0x00,0x00,0xFF,0x00 +,0xC6,0xC6,0xC6,0xFF,0x83,0xFF,0xFF,0xFF,0xFF,0x01,0xE2,0xE2,0xE2,0xFF,0x01 +,0x01,0x01,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEE,0x00,0x00 +,0x00,0x05,0xCC,0x00,0x00,0x00,0x00,0xCC,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x41,0x83,0x00,0x00,0x00,0xFF,0x00,0x39,0x39,0x39,0xFF,0x83,0xFF,0xFF +,0xFF,0xFF,0x01,0xE7,0xE7,0xE7,0xFF,0x02,0x02,0x02,0xFF,0x82,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xF1,0x00,0x00,0x00,0x07,0xC3,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x7C,0x83,0x00,0x00,0x00,0xFF,0x00,0x72,0x72,0x72,0xFF +,0x83,0xFF,0xFF,0xFF,0xFF,0x00,0x8C,0x8C,0x8C,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x9C,0xCD,0x00,0x00,0x00,0x00,0xCC,0x00,0x00,0x00,0x00 +,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0xE8,0x82,0x00,0x00,0x00,0xFF,0x01 +,0x01,0x01,0x01,0xFF,0xE2,0xE2,0xE2,0xFF,0x82,0xFF,0xFF,0xFF,0xFF,0x00,0x93 +,0x93,0x93,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA2,0xC4,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x83,0x00,0x00,0x00,0xFF,0x00,0x1F +,0x1F,0x1F,0xFF,0x83,0xFF,0xFF,0xFF,0xFF,0x00,0x35,0x35,0x35,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x45,0xCD,0x00,0x00,0x00,0x00,0xCD,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x94,0x83,0x00,0x00,0x00,0xFF,0x00,0x8D +,0x8D,0x8D,0xFF,0x82,0xFF,0xFF,0xFF,0xFF,0x00,0x3D,0x3D,0x3D,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x4C,0xC5,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0xD5,0x83,0x00,0x00,0x00,0xFF,0x00,0xCB,0xCB,0xCB,0xFF,0x81,0xFF +,0xFF,0xFF,0xFF,0x00,0xDD,0xDD,0xDD,0xFF,0x83,0x00,0x00,0x00,0xFF,0x01,0x00 +,0x00,0x00,0xEA,0x00,0x00,0x00,0x03,0xCD,0x00,0x00,0x00,0x00,0xCD,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x83,0x00,0x00,0x00,0xFF,0x00,0x36,0x36 +,0x36,0xFF,0x81,0xFF,0xFF,0xFF,0xFF,0x01,0xE5,0xE5,0xE5,0xFF,0x01,0x01,0x01 +,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEF,0x00,0x00,0x00,0x06 +,0xC5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0x83,0x00,0x00,0x00,0xFF +,0x00,0x78,0x78,0x78,0xFF,0x81,0xFF,0xFF,0xFF,0xFF,0x00,0x87,0x87,0x87,0xFF +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x97,0xCE,0x00,0x00,0x00,0x00 +,0xCD,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0xE6,0x83 +,0x00,0x00,0x00,0xFF,0x02,0xDF,0xDF,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF,0x90,0x90 +,0x90,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x9F,0xC6,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x2D,0x83,0x00,0x00,0x00,0xFF,0x00,0x24,0x24 +,0x24,0xFF,0x81,0xFF,0xFF,0xFF,0xFF,0x00,0x30,0x30,0x30,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x40,0xCE,0x00,0x00,0x00,0x00,0xCE,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x92,0x83,0x00,0x00,0x00,0xFF,0x02,0x8A,0x8A +,0x8A,0xFF,0xFF,0xFF,0xFF,0xFF,0x3A,0x3A,0x3A,0xFF,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x49,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA +,0x83,0x00,0x00,0x00,0xFF,0x01,0xD0,0xD0,0xD0,0xFF,0xD9,0xD9,0xD9,0xFF,0x83 +,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE7,0x00,0x00,0x00,0x02,0xCE,0x00 +,0x00,0x00,0x00,0xCE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3B,0x83,0x00 +,0x00,0x00,0xFF,0x02,0x34,0x34,0x34,0xFF,0xE2,0xE2,0xE2,0xFF,0x01,0x01,0x01 +,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xED,0x00,0x00,0x00,0x05 +,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x86,0x83,0x00,0x00,0x00,0xFF +,0x01,0x7D,0x7D,0x7D,0xFF,0x82,0x82,0x82,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x92,0xCF,0x00,0x00,0x00,0x00,0xCE,0x00,0x00,0x00,0x00,0x01 +,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xE3,0x83,0x00,0x00,0x00,0xFF,0x00,0x6B +,0x6B,0x6B,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x9D,0xC8,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x83,0x00,0x00,0x00,0xFF,0x01,0x29 +,0x29,0x29,0xFF,0x2B,0x2B,0x2B,0xFF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x3B,0xCF,0x00,0x00,0x00,0x00,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x8F,0x83,0x00,0x00,0x00,0xFF,0x00,0x01,0x01,0x01,0xFF,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x46,0xC9,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0xDF,0x87,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE3,0x00,0x00,0x00 +,0x01,0xCF,0x00,0x00,0x00,0x00,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x39,0x87,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEC,0x00,0x00,0x00,0x04 +,0xC9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8C,0x87,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x8D,0xD0,0x00,0x00,0x00,0x00,0xCF,0x00,0x00,0x00,0x00 +,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xE1,0x86,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x9A,0xCA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x87 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x37,0xD0,0x00,0x00,0x00,0x00,0xD0 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8C,0x86,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x44,0xCA,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00 +,0x00,0x00,0xE3,0x85,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xDF,0xD1,0x00 +,0x00,0x00,0x00,0xD0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x85,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEA,0x00,0x00,0x00,0x03,0xCB,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x91,0x85,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x89,0xD1,0x00,0x00,0x00,0x00,0xD1,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0xDF,0x84,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x97,0xCC,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x3D,0x85,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x32,0xD1,0x00,0x00,0x00,0x00,0xD1,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x89,0x84,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x41,0xCC,0x00,0x00 +,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0xE7,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xDA,0xD2,0x00,0x00,0x00,0x00,0xD1,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x33,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00 +,0xE8,0x00,0x00,0x00,0x02,0xCD,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x96 +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x84,0xD2,0x00,0x00,0x00,0x00 +,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x82,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x95,0xCE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42 +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x2D,0xD2,0x00,0x00,0x00,0x00 +,0xD2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x86,0x82,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x3F,0xCE,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03 +,0x00,0x00,0x00,0xEB,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xD5,0xD3 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x54,0x52,0x55,0x45,0x56,0x49,0x53,0x49,0x4F,0x4E,0x2D,0x58,0x46 +,0x49,0x4C,0x45,0x2E,0x00}; +/* end binary data. size = 27965 bytes */ + + +/* begin binary data: */ +const int project_bytes = 39085; +const unsigned char project_data[] = /* 39085 */ +{0x00,0x00,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB9,0x01,0xB9 +,0x01,0x20,0x08,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0xB2,0xFF +,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00,0x2C,0x00,0x00,0x00,0x90,0x00,0x00,0x00 +,0xD0,0x00,0x02,0x02,0xE9,0x00,0x00,0x00,0xFD,0x95,0x00,0x00,0x00,0xFF,0x05 +,0x00,0x01,0x01,0xF7,0x00,0x01,0x01,0xDB,0x00,0x00,0x00,0xBE,0x00,0x00,0x00 +,0xA3,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x17,0xFF,0xFF,0xFF,0xFF,0x00,0xE4 +,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0xB0,0xFF,0xFF,0xFF,0x00,0x06 +,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0xA3,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0xFF,0x02,0x15,0x19,0xFE,0x03,0x2C,0x35,0xFF,0x05,0x3A,0x46,0xFF,0x95,0x05 +,0x3B,0x47,0xFF,0x02,0x04,0x37,0x41,0xFF,0x03,0x23,0x2A,0xFF,0x01,0x0D,0x0F +,0xFD,0x81,0x00,0x00,0x00,0xFF,0x03,0x00,0x01,0x01,0xFB,0x00,0x00,0x00,0xAA +,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0x00,0xE1,0xFF +,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0xB0,0xFF,0xFF,0xFF,0x00,0x03,0x00 +,0x00,0x00,0x65,0x00,0x00,0x00,0xFF,0x04,0x35,0x3F,0xFF,0x0C,0x93,0xAF,0xFF +,0x9B,0x0F,0xBF,0xE4,0xFF,0x06,0x0F,0xB9,0xDD,0xFF,0x0A,0x82,0x9B,0xFF,0x04 +,0x35,0x3F,0xFF,0x00,0x01,0x01,0xFF,0x00,0x00,0x00,0xFF,0x00,0x01,0x01,0xCE +,0x00,0x00,0x00,0x2F,0xFF,0xFF,0xFF,0xFF,0x00,0xE0,0xFF,0xFF,0xFF,0x00,0xFF +,0xFF,0xFF,0xFF,0x00,0xB0,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x72,0x00 +,0x00,0x00,0xFF,0x0B,0x8A,0xA5,0xFF,0x9F,0x0F,0xBF,0xE4,0xFF,0x05,0x0D,0xA8 +,0xC8,0xFF,0x07,0x56,0x67,0xFF,0x00,0x02,0x03,0xFE,0x00,0x01,0x01,0xFB,0x00 +,0x00,0x00,0x80,0x00,0x00,0x00,0x05,0xFF,0xFF,0xFF,0xFF,0x00,0xDE,0xFF,0xFF +,0xFF,0x00,0x82,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x33,0x00,0x00,0x00 +,0x92,0x00,0x00,0x00,0xC7,0x90,0x00,0x00,0x00,0xC8,0x00,0x00,0x00,0x00,0x30 +,0xFF,0xFF,0xFF,0xFF,0x00,0x98,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x35 +,0x00,0x00,0x00,0xFF,0x07,0x5D,0x6F,0xFF,0xA1,0x0F,0xBF,0xE4,0xFF,0x04,0x0C +,0x9A,0xB7,0xFF,0x03,0x23,0x29,0xFE,0x00,0x00,0x00,0xFF,0x00,0x01,0x01,0xD2 +,0x00,0x00,0x00,0x28,0xFF,0xFF,0xFF,0xFF,0x00,0xDD,0xFF,0xFF,0xFF,0x00,0x81 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x7C,0x81,0x00,0x00,0x00,0xFF,0x00 +,0x01,0x10,0x13,0xFD,0x8D,0x02,0x16,0x1A,0xFD,0x00,0x01,0x09,0x0B,0xFE,0x81 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x01,0x01,0x64,0xFF,0xFF,0xFF,0xFF,0x00,0x98 +,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x04,0x00,0x01,0x01,0xF2,0x02,0x1F +,0x26,0xFE,0x0F,0xBE,0xE3,0xFF,0xA1,0x0F,0xBF,0xE4,0xFF,0x04,0x0F,0xBB,0xE0 +,0xFF,0x08,0x61,0x73,0xFF,0x00,0x03,0x03,0xFE,0x00,0x01,0x01,0xED,0x00,0x00 +,0x00,0x35,0xFF,0xFF,0xFF,0xFF,0x00,0xDC,0xFF,0xFF,0xFF,0x00,0x04,0xFF,0xFF +,0xFF,0x00,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0xFF,0x03,0x24,0x2B,0xFE,0x0C +,0x97,0xB4,0xFF,0x8D,0x0F,0xBF,0xE4,0xFF,0x03,0x0E,0xB8,0xDC,0xFF,0x01,0x0F +,0x12,0xFD,0x00,0x01,0x01,0xF5,0x00,0x00,0x00,0x45,0xFF,0xFF,0xFF,0xFF,0x00 +,0x9A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x8B,0x00,0x00,0x00,0xFF,0x0B +,0x86,0xA0,0xFF,0xA3,0x0F,0xBF,0xE4,0xFF,0x03,0x0B,0x89,0xA4,0xFF,0x00,0x06 +,0x08,0xFD,0x00,0x01,0x01,0xF4,0x00,0x00,0x00,0x42,0xFF,0xFF,0xFF,0xFF,0x00 +,0xDB,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x4B,0x00,0x00,0x00,0xFD,0x02 +,0x1E,0x24,0xFE,0x0E,0xB2,0xD4,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xAC +,0xCD,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x98,0xFF,0xFF,0xFF,0xFF,0x00 +,0x9B,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x1A,0x00,0x01,0x01,0xFA,0x03 +,0x2C,0x34,0xFF,0xA4,0x0F,0xBF,0xE4,0xFF,0x03,0x0C,0x93,0xAF,0xFF,0x01,0x0A +,0x0C,0xFD,0x00,0x01,0x01,0xF9,0x00,0x00,0x00,0x50,0xFF,0xFF,0xFF,0xFF,0x00 +,0xDA,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xAC,0x00,0x01,0x01,0xFF,0x0D +,0xA5,0xC5,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA9,0xCA,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x8D,0xFF,0xFF,0xFF,0xFF,0x00,0x9C,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x9C,0x00,0x00,0x00,0xFF,0x0C,0x93,0xAF,0xFF,0xA4 +,0x0F,0xBF,0xE4,0xFF,0x03,0x0C,0x9B,0xB9,0xFF,0x01,0x0F,0x12,0xFD,0x00,0x01 +,0x01,0xF9,0x00,0x00,0x00,0x2F,0xFF,0xFF,0xFF,0xFF,0x00,0xD9,0xFF,0xFF,0xFF +,0x00,0x01,0x00,0x00,0x00,0xD7,0x02,0x1A,0x1F,0xFE,0x90,0x0F,0xBF,0xE4,0xFF +,0x02,0x0E,0xAF,0xD1,0xFF,0x00,0x01,0x01,0xFF,0x00,0x00,0x00,0xAE,0xFF,0xFF +,0xFF,0xFF,0x00,0x9C,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x27,0x00,0x00 +,0x00,0xFD,0x04,0x39,0x44,0xFF,0xA5,0x0F,0xBF,0xE4,0xFF,0x03,0x0C,0x98,0xB6 +,0xFF,0x00,0x03,0x04,0xFE,0x00,0x01,0x01,0xD7,0x00,0x00,0x00,0x0A,0xFF,0xFF +,0xFF,0xFF,0x00,0xD8,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x01,0x01,0xED,0x03,0x21 +,0x28,0xFE,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x04,0x31,0x3B,0xFF,0x00,0x01,0x01 +,0xFB,0x00,0x00,0x00,0x16,0xFF,0xFF,0xFF,0xFF,0x00,0x9C,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0xAD,0x00,0x01,0x01,0xFF,0x0C,0x9E,0xBD,0xFF,0xA5,0x0F +,0xBF,0xE4,0xFF,0x02,0x08,0x68,0x7C,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x9A,0xFF,0xFF,0xFF,0xFF,0x00,0xD8,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x99,0x00,0x00,0x00,0xFF,0x0C,0x9D,0xBC,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02 +,0x0A,0x7C,0x94,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x74,0xFF,0xFF,0xFF +,0xFF,0x00,0x9C,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x36,0x00,0x00,0x00 +,0xFF,0x05,0x46,0x53,0xFF,0xA5,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBE,0xE3,0xFF +,0x04,0x35,0x3F,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x53,0xFF,0xFF,0xFF +,0xFF,0x00,0xD7,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x39,0x00,0x00,0x00 +,0xFF,0x07,0x55,0x66,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0F,0xBA,0xDE,0xFF +,0x01,0x0C,0x0F,0xFE,0x00,0x01,0x01,0xD8,0xFF,0xFF,0xFF,0xFF,0x00,0x9D,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xBF,0x00,0x02,0x03,0xFE,0x0D,0xA8,0xC8 +,0xFF,0xA5,0x0F,0xBF,0xE4,0xFF,0x03,0x0E,0xAE,0xCF,0xFF,0x01,0x0F,0x12,0xFD +,0x00,0x01,0x01,0xE9,0x00,0x00,0x00,0x08,0xFF,0xFF,0xFF,0xFF,0x00,0xD6,0xFF +,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0xFF,0x00,0x00,0x01,0x01,0xD9,0x01,0x0F,0x12 +,0xFD,0x0F,0xBC,0xE0,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x06,0x52,0x62,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x3B,0xFF,0xFF,0xFF,0xFF,0x00,0x9C,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0xFF,0x06,0x52,0x61 +,0xFF,0xA6,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x6E,0x83,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x69,0xFF,0xFF,0xFF,0xFF,0x00,0xD6,0xFF,0xFF,0xFF,0x00,0x03 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xFF,0x0A,0x85,0x9E +,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x9D,0xBC,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x9E,0xFF,0xFF,0xFF,0xFF,0x00,0x9D,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x01,0x01,0xD0,0x01,0x07,0x08,0xFE,0x0E,0xB0,0xD2,0xFF,0xA5,0x0F,0xBF +,0xE4,0xFF,0x03,0x0E,0xB8,0xDC,0xFF,0x01,0x0E,0x11,0xFD,0x00,0x01,0x01,0xDE +,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0x00,0xD5,0xFF,0xFF,0xFF,0x00,0x03 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x1B,0x00,0x00,0x00,0xFD,0x05,0x3D,0x48 +,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x28,0x30,0xFF,0x00,0x01,0x01,0xF5 +,0x00,0x00,0x00,0x0D,0xFF,0xFF,0xFF,0xFF,0x00,0x9C,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0xFF,0x07,0x5E,0x71,0xFF,0x81,0x0F,0xBF +,0xE4,0xFF,0x08,0x0E,0xB4,0xD7,0xFF,0x0B,0x91,0xAD,0xFF,0x0B,0x88,0xA2,0xFF +,0x0B,0x88,0xA3,0xFF,0x0B,0x91,0xAD,0xFF,0x0C,0x9A,0xB8,0xFF,0x0D,0xA3,0xC3 +,0xFF,0x0E,0xAC,0xCE,0xFF,0x0E,0xB6,0xD9,0xFF,0x9B,0x0F,0xBF,0xE4,0xFF,0x02 +,0x08,0x62,0x75,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x59,0xFF,0xFF,0xFF +,0xFF,0x00,0xD5,0xFF,0xFF,0xFF,0x00,0x81,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0xB8,0x00,0x03,0x04,0xFE,0x0E,0xB0,0xD2,0xFF,0x90,0x0F,0xBF,0xE4,0xFF +,0x02,0x09,0x73,0x8A,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x66,0xFF,0xFF +,0xFF,0xFF,0x00,0x9C,0xFF,0xFF,0xFF,0x00,0x05,0x00,0x00,0x00,0x03,0x00,0x01 +,0x01,0xDF,0x01,0x0D,0x0F,0xFE,0x0C,0x9E,0xBD,0xFF,0x06,0x4A,0x59,0xFF,0x01 +,0x07,0x09,0xFE,0x87,0x00,0x00,0x00,0xFF,0x08,0x00,0x02,0x02,0xFF,0x01,0x0D +,0x0F,0xFD,0x02,0x1A,0x1E,0xFE,0x03,0x26,0x2E,0xFF,0x04,0x32,0x3C,0xFF,0x05 +,0x3F,0x4B,0xFF,0x06,0x4B,0x59,0xFF,0x08,0x69,0x7D,0xFF,0x0E,0xB6,0xD9,0xFF +,0x92,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB2,0xD5,0xFF,0x01,0x08,0x0A,0xFE,0x00 +,0x01,0x01,0xD1,0xFF,0xFF,0xFF,0xFF,0x00,0xD5,0xFF,0xFF,0xFF,0x00,0x81,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0xFF,0x08,0x6C,0x81 +,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB5,0xD8,0xFF,0x01,0x07,0x09,0xFE +,0x00,0x00,0x00,0xC9,0xFF,0xFF,0xFF,0xFF,0x00,0x9D,0xFF,0xFF,0xFF,0x00,0x11 +,0x00,0x00,0x00,0x6A,0x00,0x00,0x00,0xFF,0x00,0x01,0x02,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x01,0xC5,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x60,0x00,0x00 +,0x00,0x5E,0x00,0x00,0x00,0x6A,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x82,0x00 +,0x00,0x00,0x8F,0x00,0x00,0x00,0x9D,0x00,0x00,0x00,0xAE,0x00,0x00,0x00,0xC0 +,0x00,0x00,0x00,0xD2,0x00,0x01,0x01,0xE4,0x00,0x01,0x01,0xF6,0x82,0x00,0x00 +,0x00,0xFF,0x02,0x01,0x0F,0x11,0xFD,0x08,0x6A,0x7F,0xFF,0x0F,0xB9,0xDD,0xFF +,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x56,0x67,0xFF,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x45,0xFF,0xFF,0xFF,0xFF,0x00,0xD4,0xFF,0xFF,0xFF,0x00,0x81,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x08,0x00,0x01,0x01,0xF0,0x03,0x23,0x2A +,0xFE,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x06,0x49,0x58,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x2D,0xFF,0xFF,0xFF,0xFF,0x00,0x9C,0xFF,0xFF,0xFF,0x00,0x03 +,0x00,0x00,0x00,0x09,0x00,0x01,0x02,0xEB,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x75,0x8D,0xFF,0xFF,0xFF,0x00,0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x19 +,0x00,0x00,0x00,0x6D,0x00,0x01,0x01,0xE8,0x00,0x00,0x00,0xFF,0x02,0x1F,0x25 +,0xFE,0x0F,0xBC,0xE0,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA6,0xC6,0xFF +,0x00,0x01,0x01,0xFF,0x00,0x00,0x00,0xA9,0xFF,0xFF,0xFF,0xFF,0x00,0xD4,0xFF +,0xFF,0xFF,0x00,0x82,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x97,0x00,0x00 +,0x00,0xFF,0x0C,0x9B,0xB9,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x94,0xB1 +,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x90,0xFF,0xFF,0xFF,0xFF,0x00,0x9D +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x79,0x00,0x04,0x04,0xDA,0x00,0x00 +,0x00,0x3D,0x90,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x09,0x00,0x00,0x00 +,0x99,0x00,0x00,0x00,0xFF,0x09,0x75,0x8B,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02 +,0x04,0x33,0x3D,0xFF,0x00,0x01,0x01,0xFA,0x00,0x00,0x00,0x13,0xFF,0xFF,0xFF +,0xFF,0x00,0xD3,0xFF,0xFF,0xFF,0x00,0x82,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0x36,0x00,0x00,0x00,0xFF,0x07,0x53,0x63,0xFF,0x91,0x0F,0xBF,0xE4,0xFF +,0x02,0x02,0x1F,0x25,0xFE,0x00,0x01,0x02,0xEE,0x00,0x00,0x00,0x07,0xFF,0xFF +,0xFF,0xFF,0x00,0xB1,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x0E,0x00,0x01 +,0x02,0xEE,0x02,0x16,0x1B,0xFE,0x0F,0xBB,0xDF,0xFF,0x90,0x0F,0xBF,0xE4,0xFF +,0x02,0x0A,0x7D,0x95,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x70,0xFF,0xFF +,0xFF,0xFF,0x00,0xD3,0xFF,0xFF,0xFF,0x00,0x83,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x01,0x01,0xD7,0x01,0x0E,0x11,0xFD,0x0F,0xBB,0xE0,0xFF,0x90,0x0F,0xBF,0xE4 +,0xFF,0x02,0x08,0x6A,0x7E,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x57,0xFF +,0xFF,0xFF,0xFF,0x00,0xB2,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x75,0x00 +,0x00,0x00,0xFF,0x09,0x70,0x85,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0F,0xBA +,0xDE,0xFF,0x01,0x0D,0x10,0xFD,0x00,0x01,0x01,0xD5,0xFF,0xFF,0xFF,0xFF,0x00 +,0xD3,0xFF,0xFF,0xFF,0x00,0x83,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x76 +,0x00,0x00,0x00,0xFF,0x0A,0x82,0x9C,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0E +,0xB0,0xD2,0xFF,0x00,0x04,0x05,0xFE,0x00,0x00,0x00,0xBB,0xFF,0xFF,0xFF,0xFF +,0x00,0xB2,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x09,0x00,0x01,0x02,0xEC +,0x02,0x19,0x1E,0xFE,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x53,0x63,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x38,0xFF,0xFF,0xFF,0xFF,0x00,0xD2,0xFF,0xFF +,0xFF,0x00,0x83,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x19,0x00,0x00,0x00 +,0xFD,0x05,0x3A,0x46,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x40,0x4C,0xFF +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x20,0xBA,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x14,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x50,0x92,0x00,0x00,0x00 +,0x60,0x00,0x00,0x00,0x00,0x1A,0xB2,0xFF,0xFF,0xFF,0x00,0x07,0x00,0x00,0x00 +,0x0D,0x00,0x00,0x00,0x2C,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x2A,0x00,0x00 +,0x00,0x22,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x08,0xA5 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0xFF,0x0C,0x97 +,0xB4,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x9E,0xBD,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x9C,0x9D,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x09 +,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x5F,0x97,0x00,0x00 +,0x00,0x60,0x02,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x11 +,0xA6,0xFF,0xFF,0xFF,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x38,0x00 +,0x00,0x00,0x55,0x00,0x00,0x00,0x5A,0x00,0x00,0x00,0x5C,0x00,0x00,0x00,0x5E +,0x00,0x00,0x00,0x5F,0x98,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x00,0x53,0x00 +,0x00,0x00,0x16,0x8D,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x0B,0x00,0x00 +,0x00,0x5B,0x00,0x00,0x00,0xAA,0x9D,0x00,0x00,0x00,0xB8,0x03,0x00,0x00,0x00 +,0xB7,0x00,0x00,0x00,0x9C,0x00,0x00,0x00,0x6E,0x00,0x00,0x00,0x33,0x99,0xFF +,0xFF,0xFF,0x00,0x84,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xB5,0x00,0x02 +,0x03,0xFE,0x0E,0xAF,0xD0,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x8B,0xA5 +,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x9B,0x93,0x00,0x00,0x00,0x48,0x07 +,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x38,0x00,0x00,0x00 +,0x31,0x00,0x00,0x00,0x2A,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1A,0x00,0x00 +,0x00,0x03,0x9C,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00 +,0xAE,0x95,0x00,0x00,0x00,0xFF,0x00,0x00,0x02,0x03,0x63,0xAB,0xFF,0xFF,0xFF +,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x3A,0x00,0x00,0x00,0x73,0x00 +,0x00,0x00,0x92,0x00,0x00,0x00,0xB1,0x00,0x00,0x00,0xCF,0x00,0x01,0x01,0xEF +,0x87,0x00,0x00,0x00,0xFF,0x06,0x00,0x00,0x00,0xFE,0x00,0x01,0x01,0xF2,0x00 +,0x00,0x00,0xC6,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x35 +,0x00,0x00,0x00,0x08,0x9E,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x3A,0x00 +,0x00,0x00,0xFF,0x07,0x54,0x64,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x29 +,0x31,0xFF,0x00,0x01,0x01,0xF4,0x00,0x00,0x00,0x0C,0x96,0xFF,0xFF,0xFF,0x00 +,0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x5E,0x00,0x00,0x00,0x85,0x00,0x00 +,0x00,0xA6,0x00,0x00,0x00,0xC6,0x00,0x01,0x01,0xE8,0x00,0x00,0x00,0xFE,0x9D +,0x00,0x00,0x00,0xFF,0x03,0x00,0x01,0x01,0xEC,0x00,0x00,0x00,0xBA,0x00,0x00 +,0x00,0x4E,0x00,0x00,0x00,0x01,0x9E,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00 +,0x11,0x00,0x00,0x00,0x5D,0x00,0x00,0x00,0xAD,0x00,0x01,0x01,0xF0,0xA0,0x00 +,0x00,0x00,0xFF,0x03,0x00,0x00,0x00,0xFE,0x00,0x00,0x01,0xD3,0x00,0x00,0x00 +,0x85,0x00,0x00,0x00,0x0C,0x89,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x23 +,0x00,0x01,0x02,0xDD,0x00,0x00,0x00,0xFF,0x00,0x01,0x01,0xFF,0x9D,0x01,0x0A +,0x0C,0xFD,0x00,0x01,0x09,0x0A,0xFD,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x01 +,0x01,0xDC,0x00,0x00,0x00,0x53,0x97,0xFF,0xFF,0xFF,0x00,0x84,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0xFF,0x08,0x6A,0x7E,0xFF,0x90 +,0x0F,0xBF,0xE4,0xFF,0x01,0x0F,0xBE,0xE2,0xFF,0x02,0x16,0x1B,0xFE,0x9B,0x00 +,0x00,0x00,0xFF,0x04,0x00,0x01,0x01,0xF9,0x00,0x01,0x01,0xD1,0x00,0x00,0x00 +,0xA5,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x13,0x98,0xFF,0xFF,0xFF,0x00,0x04 +,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0xFF,0x04,0x34,0x3F,0xFF,0x08,0x64,0x77 +,0xFF,0x0A,0x7B,0x93,0xFF,0x8E,0x0A,0x83,0x9C,0xFF,0x04,0x09,0x70,0x86,0xFF +,0x00,0x02,0x03,0xFF,0x00,0x01,0x01,0xF8,0x00,0x00,0x00,0x97,0x00,0x00,0x00 +,0x29,0xA8,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x5A +,0x00,0x00,0x00,0xA5,0x00,0x01,0x02,0xEE,0x82,0x00,0x00,0x00,0xFF,0x0D,0x00 +,0x04,0x05,0xFE,0x02,0x18,0x1D,0xFE,0x04,0x2F,0x38,0xFF,0x05,0x46,0x53,0xFF +,0x07,0x5B,0x6D,0xFF,0x08,0x62,0x75,0xFF,0x07,0x5C,0x6E,0xFF,0x07,0x57,0x68 +,0xFF,0x06,0x51,0x61,0xFF,0x06,0x4B,0x59,0xFF,0x05,0x45,0x52,0xFF,0x05,0x40 +,0x4C,0xFF,0x04,0x2F,0x38,0xFF,0x01,0x0B,0x0D,0xFD,0x82,0x00,0x00,0x00,0xFF +,0x04,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xD4,0x00,0x00,0x00,0xA4,0x00,0x00 +,0x00,0x66,0x00,0x00,0x00,0x11,0x9A,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00 +,0x01,0x00,0x01,0x01,0xE2,0x01,0x13,0x16,0xFE,0x0F,0xBE,0xE2,0xFF,0x90,0x0F +,0xBF,0xE4,0xFF,0x02,0x09,0x74,0x8B,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x63,0x93,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0x67 +,0x00,0x00,0x00,0xBC,0x00,0x00,0x00,0xFD,0x81,0x00,0x00,0x00,0xFF,0x06,0x00 +,0x01,0x01,0xFF,0x01,0x12,0x16,0xFD,0x03,0x2C,0x35,0xFF,0x05,0x45,0x52,0xFF +,0x07,0x5D,0x6F,0xFF,0x09,0x76,0x8C,0xFF,0x0B,0x88,0xA3,0xFF,0x97,0x0B,0x89 +,0xA4,0xFF,0x07,0x0A,0x80,0x99,0xFF,0x08,0x65,0x79,0xFF,0x06,0x49,0x58,0xFF +,0x04,0x2D,0x36,0xFF,0x00,0x06,0x07,0xFE,0x00,0x00,0x00,0xFF,0x00,0x01,0x01 +,0xD9,0x00,0x00,0x00,0x5F,0x9B,0xFF,0xFF,0xFF,0x00,0x08,0x00,0x00,0x00,0x55 +,0x00,0x00,0x00,0xBC,0x00,0x00,0x01,0xFC,0x00,0x00,0x00,0xFF,0x00,0x02,0x02 +,0xFE,0x03,0x2C,0x35,0xFF,0x06,0x4C,0x5B,0xFF,0x08,0x68,0x7C,0xFF,0x0A,0x80 +,0x99,0xFF,0x9C,0x0A,0x83,0x9C,0xFF,0x05,0x09,0x76,0x8D,0xFF,0x05,0x44,0x51 +,0xFF,0x01,0x10,0x13,0xFE,0x00,0x00,0x00,0xFF,0x00,0x01,0x01,0xDF,0x00,0x00 +,0x00,0x41,0x87,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00,0x10,0x00,0x01,0x02 +,0xE6,0x00,0x01,0x01,0xFF,0x08,0x64,0x77,0xFF,0x0E,0xAF,0xD0,0xFF,0x9E,0x0F +,0xBF,0xE4,0xFF,0x05,0x0E,0xB0,0xD2,0xFF,0x0B,0x8F,0xAB,0xFF,0x07,0x54,0x64 +,0xFF,0x01,0x0C,0x0E,0xFE,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x94,0x96,0xFF +,0xFF,0xFF,0x00,0x84,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x07,0x00,0x01 +,0x01,0xEE,0x03,0x21,0x28,0xFE,0x91,0x0F,0xBF,0xE4,0xFF,0x00,0x0B,0x92,0xAE +,0xFF,0x94,0x09,0x77,0x8E,0xFF,0x0D,0x09,0x76,0x8D,0xFF,0x09,0x70,0x86,0xFF +,0x08,0x6A,0x7E,0xFF,0x08,0x63,0x76,0xFF,0x07,0x5D,0x6F,0xFF,0x07,0x56,0x67 +,0xFF,0x06,0x4F,0x5F,0xFF,0x05,0x3A,0x46,0xFF,0x02,0x1B,0x20,0xFE,0x00,0x02 +,0x02,0xFE,0x00,0x00,0x00,0xFF,0x00,0x01,0x01,0xFB,0x00,0x00,0x00,0xB4,0x00 +,0x00,0x00,0x3C,0x95,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x36,0x00,0x00 +,0x00,0xFF,0x05,0x3B,0x47,0xFF,0x0F,0xBE,0xE2,0xFF,0x90,0x0F,0xBF,0xE4,0xFF +,0x02,0x06,0x4B,0x59,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x5B,0xA8,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0xC4,0x00,0x00,0x00 +,0xFD,0x81,0x00,0x00,0x00,0xFF,0x04,0x03,0x25,0x2C,0xFF,0x07,0x5F,0x72,0xFF +,0x0C,0x93,0xAF,0xFF,0x0E,0xAC,0xCE,0xFF,0x0F,0xBE,0xE3,0xFF,0x8C,0x0F,0xBF +,0xE4,0xFF,0x04,0x0D,0xA7,0xC7,0xFF,0x0A,0x83,0x9C,0xFF,0x07,0x5F,0x72,0xFF +,0x05,0x3B,0x47,0xFF,0x02,0x16,0x1B,0xFE,0x81,0x00,0x00,0x00,0xFF,0x03,0x00 +,0x01,0x01,0xFA,0x00,0x00,0x00,0xAD,0x00,0x00,0x00,0x4F,0x00,0x00,0x00,0x05 +,0x98,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0xFF,0x0B +,0x90,0xAC,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB5,0xD8,0xFF,0x01,0x07 +,0x09,0xFE,0x00,0x00,0x01,0xC7,0x92,0xFF,0xFF,0xFF,0x00,0x07,0x00,0x00,0x00 +,0x3B,0x00,0x01,0x01,0xDB,0x00,0x00,0x00,0xFF,0x00,0x05,0x06,0xFE,0x05,0x3B +,0x47,0xFF,0x0A,0x7B,0x93,0xFF,0x0D,0xA3,0xC2,0xFF,0x0F,0xBA,0xDE,0xFF,0xA1 +,0x0F,0xBF,0xE4,0xFF,0x05,0x0E,0xAF,0xD0,0xFF,0x07,0x5B,0x6D,0xFF,0x01,0x0A +,0x0C,0xFE,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xA3,0x00,0x00,0x00,0x0A,0x97 +,0xFF,0xFF,0xFF,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0xB8,0x00,0x00 +,0x00,0xFF,0x00,0x05,0x06,0xFE,0x05,0x3A,0x46,0xFF,0x09,0x76,0x8D,0xFF,0x0E +,0xB0,0xD2,0xFF,0xA2,0x0F,0xBF,0xE4,0xFF,0x04,0x0F,0xBE,0xE2,0xFF,0x08,0x69 +,0x7D,0xFF,0x00,0x06,0x07,0xFE,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x72,0x86 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x9B,0x00,0x00,0x00,0xFF,0x09,0x71 +,0x87,0xFF,0xA3,0x0F,0xBF,0xE4,0xFF,0x03,0x0D,0xAA,0xCB,0xFF,0x03,0x29,0x31 +,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x59,0x95,0xFF,0xFF,0xFF,0x00,0x85 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0xFF,0x0C,0x9A +,0xB7,0xFF,0xAF,0x0F,0xBF,0xE4,0xFF,0x06,0x0E,0xB8,0xDB,0xFF,0x0A,0x7F,0x97 +,0xFF,0x05,0x3A,0x46,0xFF,0x00,0x03,0x04,0xFE,0x00,0x00,0x00,0xFE,0x00,0x00 +,0x00,0x9F,0x00,0x00,0x00,0x15,0x93,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x7C,0x00,0x00,0x00,0xFF,0x0B,0x8F,0xAB,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x01 +,0x02,0x1B,0x20,0xFE,0x00,0x01,0x01,0xE0,0xA7,0xFF,0xFF,0xFF,0x00,0x06,0x00 +,0x00,0x00,0x38,0x00,0x00,0x00,0xC4,0x00,0x00,0x00,0xFF,0x00,0x05,0x06,0xFE +,0x04,0x38,0x43,0xFF,0x09,0x72,0x88,0xFF,0x0D,0xAB,0xCC,0xFF,0x96,0x0F,0xBF +,0xE4,0xFF,0x07,0x0E,0xB1,0xD3,0xFF,0x09,0x73,0x8A,0xFF,0x04,0x2E,0x37,0xFF +,0x00,0x01,0x01,0xFF,0x00,0x00,0x00,0xFF,0x00,0x01,0x01,0xEC,0x00,0x00,0x00 +,0x93,0x00,0x00,0x00,0x35,0x96,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x30 +,0x00,0x00,0x00,0xFF,0x06,0x4C,0x5A,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x06 +,0x49,0x58,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x2B,0x90,0xFF,0xFF,0xFF +,0x00,0x04,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0xFD,0x00,0x06,0x07,0xFE,0x08 +,0x67,0x7A,0xFF,0x0E,0xB5,0xD8,0xFF,0xA7,0x0F,0xBF,0xE4,0xFF,0x04,0x0E,0xB4 +,0xD7,0xFF,0x05,0x3E,0x4A,0xFF,0x00,0x00,0x00,0xFF,0x00,0x01,0x01,0xD1,0x00 +,0x00,0x00,0x10,0x95,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00,0x5C,0x00,0x01 +,0x01,0xF7,0x00,0x01,0x01,0xFF,0x06,0x47,0x55,0xFF,0x0E,0xAF,0xD1,0xFF,0xA7 +,0x0F,0xBF,0xE4,0xFF,0x03,0x0D,0xA3,0xC3,0xFF,0x02,0x1E,0x24,0xFE,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x70,0x84,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x1E,0x00,0x00,0x00,0xFE,0x04,0x33,0x3D,0xFF,0xA5,0x0F,0xBF,0xE4,0xFF,0x03 +,0x0E,0xAF,0xD1,0xFF,0x01,0x0F,0x11,0xFD,0x00,0x01,0x01,0xED,0x00,0x00,0x00 +,0x13,0x94,0xFF,0xFF,0xFF,0x00,0x85,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x34,0x00,0x00,0x00,0xFF,0x06,0x51,0x61,0xFF,0xB2,0x0F,0xBF,0xE4,0xFF,0x04 +,0x0D,0xA2,0xC1,0xFF,0x04,0x32,0x3C,0xFF,0x00,0x00,0x00,0xFF,0x00,0x01,0x02 +,0xEF,0x00,0x00,0x00,0x4C,0x92,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x84 +,0x00,0x00,0x00,0xFF,0x0D,0xA5,0xC5,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x01,0x02 +,0x13,0x17,0xFE,0x00,0x00,0x00,0xCA,0xA5,0xFF,0xFF,0xFF,0x00,0x05,0x00,0x00 +,0x00,0x24,0x00,0x00,0x00,0xAB,0x00,0x00,0x00,0xFF,0x00,0x02,0x03,0xFE,0x06 +,0x4F,0x5E,0xFF,0x0E,0xAE,0xCF,0xFF,0x9C,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA9 +,0xC9,0xFF,0x08,0x65,0x79,0xFF,0x02,0x20,0x26,0xFE,0x81,0x00,0x00,0x00,0xFF +,0x02,0x00,0x01,0x01,0xD8,0x00,0x00,0x00,0x5D,0x00,0x00,0x00,0x01,0x94,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x01,0xD5,0x01,0x0C,0x0E,0xFD,0x0F,0xBB,0xDF +,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x93,0xAF,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x86,0x8F,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x5C,0x00 +,0x00,0x00,0xFF,0x03,0x2A,0x32,0xFF,0x0D,0xA3,0xC2,0xFF,0xAB,0x0F,0xBF,0xE4 +,0xFF,0x03,0x08,0x60,0x72,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xB5,0x00 +,0x00,0x00,0x01,0x93,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x4F,0x00,0x01 +,0x01,0xFC,0x02,0x15,0x19,0xFE,0x0B,0x92,0xAE,0xFF,0xAA,0x0F,0xBF,0xE4,0xFF +,0x03,0x0E,0xAF,0xD0,0xFF,0x02,0x1D,0x22,0xFE,0x00,0x01,0x01,0xF8,0x00,0x00 +,0x00,0x1B,0x83,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x42,0x00,0x00,0x00 +,0xFF,0x08,0x6A,0x7E,0xFF,0xA6,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x75,0x8B,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x6F,0x94,0xFF,0xFF,0xFF,0x00,0x86,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x01,0x01,0xD5,0x01,0x0D,0x10,0xFD,0x0F,0xBB,0xDF +,0xFF,0xB3,0x0F,0xBF,0xE4,0xFF,0x03,0x0A,0x7D,0x95,0xFF,0x01,0x0F,0x11,0xFD +,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x79,0x91,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x7B,0x00,0x00,0x00,0xFF,0x0B,0x8B,0xA6,0xFF,0x91,0x0F,0xBF,0xE4 +,0xFF,0x01,0x03,0x26,0x2E,0xFF,0x00,0x01,0x01,0xE2,0xA4,0xFF,0xFF,0xFF,0x00 +,0x04,0x00,0x00,0x00,0x2F,0x00,0x01,0x01,0xF0,0x00,0x00,0x00,0xFF,0x05,0x3C +,0x48,0xFF,0x0D,0xA2,0xC1,0xFF,0xA1,0x0F,0xBF,0xE4,0xFF,0x05,0x0C,0x9B,0xB9 +,0xFF,0x07,0x57,0x68,0xFF,0x01,0x0E,0x11,0xFD,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x01,0xC7,0x00,0x00,0x00,0x35,0x93,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x7B,0x00,0x00,0x00,0xFF,0x0A,0x84,0x9D,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02 +,0x0F,0xBE,0xE3,0xFF,0x02,0x15,0x19,0xFE,0x00,0x01,0x01,0xDD,0x8E,0xFF,0xFF +,0xFF,0x00,0x03,0x00,0x00,0x00,0x15,0x00,0x01,0x02,0xEE,0x01,0x0F,0x12,0xFD +,0x0E,0xB1,0xD3,0xFF,0xAD,0x0F,0xBF,0xE4,0xFF,0x02,0x06,0x47,0x55,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x81,0x92,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00 +,0x00,0x39,0x00,0x01,0x01,0xF8,0x01,0x0F,0x11,0xFD,0x0D,0xA2,0xC1,0xFF,0xAC +,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x89,0xA4,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x96,0x83,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x62,0x00,0x00,0x00 +,0xFF,0x0A,0x7F,0x98,0xFF,0xA6,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB6,0xD9,0xFF +,0x01,0x07,0x08,0xFE,0x00,0x00,0x00,0xCB,0x94,0xFF,0xFF,0xFF,0x00,0x86,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0xFF,0x0A,0x81,0x9A +,0xFF,0xB4,0x0F,0xBF,0xE4,0xFF,0x04,0x0D,0xA9,0xC9,0xFF,0x03,0x23,0x29,0xFE +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xA7,0x00,0x00,0x00,0x07,0x8F,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x2B,0x00,0x00,0x00,0xFF,0x06,0x48,0x56,0xFF +,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x3F,0x4B,0xFF,0x00,0x01,0x01,0xFC,0x00 +,0x00,0x00,0x12,0xA2,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x24,0x00,0x01 +,0x02,0xEA,0x00,0x04,0x04,0xFE,0x0B,0x87,0xA1,0xFF,0xA5,0x0F,0xBF,0xE4,0xFF +,0x05,0x0E,0xB4,0xD7,0xFF,0x07,0x54,0x64,0xFF,0x00,0x02,0x03,0xFE,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x9E,0x00,0x00,0x00,0x17,0x91,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0xFF,0x05,0x40,0x4C,0xFF,0x91,0x0F +,0xBF,0xE4,0xFF,0x02,0x07,0x55,0x66,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x33,0x8D,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xFF +,0x0A,0x7E,0x96,0xFF,0xAE,0x0F,0xBF,0xE4,0xFF,0x03,0x0E,0xB8,0xDC,0xFF,0x03 +,0x24,0x2B,0xFE,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x2D,0x90,0xFF,0xFF,0xFF +,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x01,0x01,0xCC,0x00,0x04,0x05,0xFE,0x0C +,0x99,0xB6,0xFF,0xAE,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x2A,0x32,0xFF,0x00,0x01 +,0x01,0xFA,0x00,0x00,0x00,0x11,0x82,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x4C,0x00,0x00,0x00,0xFF,0x08,0x66,0x7A,0xFF,0xA7,0x0F,0xBF,0xE4,0xFF,0x02 +,0x05,0x43,0x50,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x27,0x93,0xFF,0xFF +,0xFF,0x00,0x86,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x17,0x00,0x01,0x01 +,0xFC,0x04,0x38,0x43,0xFF,0xB5,0x0F,0xBF,0xE4,0xFF,0x04,0x0E,0xB7,0xDA,0xFF +,0x05,0x3D,0x49,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xAB,0x00,0x00,0x00 +,0x02,0x8F,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x01,0x01,0xD1,0x01,0x0A,0x0C,0xFE +,0x0F,0xB9,0xDD,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x7E,0x96,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x67,0xA1,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00 +,0x00,0x1B,0x00,0x01,0x02,0xE1,0x00,0x02,0x02,0xFE,0x0A,0x81,0x9A,0xFF,0xA8 +,0x0F,0xBF,0xE4,0xFF,0x05,0x0D,0xA0,0xBE,0xFF,0x04,0x32,0x3C,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x01,0x01,0xF2,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x05,0x90 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xC5,0x00,0x06,0x07,0xFE,0x0E,0xB5 +,0xD8,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x97,0xB4,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x8A,0x8C,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x09 +,0x00,0x01,0x01,0xF6,0x03,0x2C,0x35,0xFF,0xB0,0x0F,0xBF,0xE4,0xFF,0x02,0x0B +,0x91,0xAD,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x8C,0x90,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0xFF,0x07,0x53,0x63,0xFF,0xAF +,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x74,0x8B,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x64,0x82,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x01,0x01 +,0xEF,0x03,0x24,0x2B,0xFE,0xA7,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x88,0xA3,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x83,0x93,0xFF,0xFF,0xFF,0x00,0x87,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xB3,0x00,0x02,0x02,0xFE,0x0E,0xAD,0xCF +,0xFF,0xB5,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBE,0xE2,0xFF,0x05,0x40,0x4D,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x90,0x8F,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x75,0x00,0x00,0x00,0xFF,0x0A,0x80,0x99,0xFF,0x90,0x0F,0xBF,0xE4 +,0xFF,0x02,0x0E,0xB8,0xDC,0xFF,0x01,0x08,0x0A,0xFE,0x00,0x00,0x00,0xC2,0xA1 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xBB,0x00,0x00,0x00,0xFF,0x09,0x74 +,0x8B,0xFF,0xAB,0x0F,0xBF,0xE4,0xFF,0x04,0x0A,0x81,0x9A,0xFF,0x02,0x16,0x1B +,0xFE,0x00,0x00,0x00,0xFF,0x00,0x01,0x01,0xDA,0x00,0x00,0x00,0x3D,0x8F,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x6A,0x00,0x00,0x00,0xFF,0x09,0x78,0x8F +,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x01,0x02,0x17,0x1C,0xFE,0x00,0x01,0x01,0xE1 +,0x8C,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0xFF,0x09 +,0x6D,0x82,0xFF,0xB0,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBE,0xE3,0xFF,0x02,0x17 +,0x1C,0xFE,0x00,0x01,0x01,0xE9,0x00,0x00,0x00,0x03,0x8F,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x01,0x01,0xD8,0x01,0x09,0x0B,0xFE,0x0E,0xAF,0xD1,0xFF,0xAF,0x0F +,0xBF,0xE4,0xFF,0x02,0x0E,0xB2,0xD5,0xFF,0x00,0x04,0x04,0xFE,0x00,0x00,0x00 +,0xBD,0x83,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x9B,0x00,0x00,0x00,0xFF +,0x0D,0xA1,0xC0,0xFF,0xA6,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBD,0xE1,0xFF,0x01 +,0x10,0x13,0xFD,0x00,0x01,0x01,0xDF,0x00,0x00,0x00,0x01,0x92,0xFF,0xFF,0xFF +,0x00,0x87,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0xFF +,0x08,0x67,0x7B,0xFF,0xB6,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBA,0xDE,0xFF,0x04 +,0x30,0x39,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x73,0x8E,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0xFE,0x05,0x3D,0x48,0xFF,0x91 +,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x46,0x53,0xFF,0x00,0x00,0x00,0xFE,0x00,0x00 +,0x00,0x1E,0x9F,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x17,0x00,0x00,0x00 +,0xFD,0x05,0x3A,0x46,0xFF,0xAD,0x0F,0xBF,0xE4,0xFF,0x04,0x0E,0xB8,0xDC,0xFF +,0x07,0x5F,0x72,0xFF,0x00,0x05,0x06,0xFE,0x00,0x01,0x01,0xF9,0x00,0x00,0x00 +,0x51,0x8E,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x14,0x00,0x00,0x01,0xFC +,0x04,0x34,0x3E,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x58,0x6A,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x37,0x8B,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0xA0,0x00,0x00,0x00,0xFF,0x0D,0xA9,0xCA,0xFF,0xB1,0x0F,0xBF,0xE4,0xFF +,0x02,0x07,0x5E,0x70,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x48,0x8E,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0xFF,0x06,0x4E,0x5D +,0xFF,0xB1,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x3A,0x45,0xFF,0x00,0x00,0x00,0xFD +,0x00,0x00,0x00,0x18,0x82,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x43,0x00 +,0x00,0x00,0xFF,0x07,0x5F,0x72,0xFF,0xA7,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x53 +,0x63,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x3B,0x92,0xFF,0xFF,0xFF,0x00 +,0x87,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x06,0x00,0x01,0x01,0xED,0x02 +,0x1F,0x25,0xFE,0xB7,0x0F,0xBF,0xE4,0xFF,0x03,0x0E,0xB4,0xD7,0xFF,0x03,0x21 +,0x27,0xFE,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x58,0x8E,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0xC0,0x00,0x05,0x05,0xFE,0x0E,0xB3,0xD6,0xFF,0x90,0x0F +,0xBF,0xE4,0xFF,0x02,0x0B,0x8A,0xA5,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x77,0x9F,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0xFF +,0x0A,0x7C,0x94,0xFF,0xAF,0x0F,0xBF,0xE4,0xFF,0x03,0x0C,0x9D,0xBB,0xFF,0x01 +,0x11,0x14,0xFD,0x00,0x00,0x01,0xFD,0x00,0x00,0x00,0x63,0x8E,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0xB5,0x00,0x02,0x02,0xFE,0x0E,0xAD,0xCF,0xFF,0x90 +,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x9A,0xB7,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x8E,0x8B,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x01,0x02,0xE9,0x03,0x25,0x2C +,0xFF,0xB2,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA4,0xC4,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0xA6,0x8E,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x6D,0x00 +,0x00,0x00,0xFF,0x0A,0x85,0x9F,0xFF,0xB1,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x7C +,0x94,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x6E,0x82,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x03,0x00,0x01,0x01,0xE9,0x02,0x1D,0x22,0xFE,0xA7,0x0F +,0xBF,0xE4,0xFF,0x02,0x0C,0x99,0xB6,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x97,0x92,0xFF,0xFF,0xFF,0x00,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x92,0x00,0x00,0x00,0xFF,0x0C,0x97,0xB5,0xFF,0xB7,0x0F,0xBF,0xE4,0xFF,0x03 +,0x0D,0xAB,0xCC,0xFF,0x02,0x15,0x19,0xFD,0x00,0x01,0x01,0xFA,0x00,0x00,0x00 +,0x40,0x8D,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0xFF +,0x09,0x75,0x8B,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0F,0xBD,0xE1,0xFF,0x01 +,0x10,0x13,0xFD,0x00,0x01,0x01,0xD3,0x9F,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0xBE,0x00,0x05,0x06,0xFE,0x0E,0xB5,0xD8,0xFF,0xB0,0x0F,0xBF,0xE4,0xFF +,0x03,0x0D,0xA6,0xC6,0xFF,0x02,0x18,0x1D,0xFD,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x77,0x8D,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x5A,0x00,0x00,0x00 +,0xFF,0x08,0x6C,0x81,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x02,0x1A,0x1F,0xFE +,0x00,0x01,0x02,0xE5,0x00,0x00,0x00,0x01,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x08,0x00,0x00,0x00,0xFF,0x05,0x46,0x53,0xFF,0xB3,0x0F,0xBF,0xE4 +,0xFF,0x02,0x03,0x2B,0x34,0xFF,0x00,0x01,0x01,0xF7,0x00,0x00,0x00,0x0E,0x8D +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xAB,0x00,0x02,0x02,0xFE,0x0E,0xB7 +,0xDA,0xFF,0xB1,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB7,0xDA,0xFF,0x01,0x07,0x09 +,0xFE,0x00,0x00,0x00,0xC6,0x83,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x92 +,0x00,0x00,0x00,0xFF,0x0C,0x9A,0xB8,0xFF,0xA7,0x0F,0xBF,0xE4,0xFF,0x02,0x02 +,0x1E,0x24,0xFE,0x00,0x01,0x01,0xEE,0x00,0x00,0x00,0x06,0x91,0xFF,0xFF,0xFF +,0x00,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xFF +,0x06,0x4F,0x5E,0xFF,0xB8,0x0F,0xBF,0xE4,0xFF,0x03,0x0D,0xA0,0xBF,0xFF,0x01 +,0x0B,0x0E,0xFD,0x00,0x01,0x01,0xF2,0x00,0x00,0x00,0x2D,0x8C,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x11,0x00,0x01,0x01,0xFA,0x04,0x31,0x3A,0xFF,0x91 +,0x0F,0xBF,0xE4,0xFF,0x02,0x06,0x52,0x62,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x2D,0x9D,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x16,0x00,0x00,0x00 +,0xFD,0x05,0x3C,0x48,0xFF,0x96,0x0F,0xBF,0xE4,0xFF,0x07,0x0E,0xB7,0xDA,0xFF +,0x0B,0x8D,0xA8,0xFF,0x0A,0x84,0x9D,0xFF,0x0A,0x7E,0x96,0xFF,0x09,0x78,0x8F +,0xFF,0x09,0x76,0x8C,0xFF,0x0C,0x95,0xB2,0xFF,0x0E,0xB8,0xDC,0xFF,0x93,0x0F +,0xBF,0xE4,0xFF,0x04,0x0E,0xAD,0xCF,0xFF,0x03,0x22,0x28,0xFE,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x8C,0x00,0x00,0x00,0x01,0x8B,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x0B,0x00,0x01,0x01,0xF5,0x03,0x28,0x30,0xFF,0x91,0x0F,0xBF +,0xE4,0xFF,0x02,0x07,0x5C,0x6E,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x3C +,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0xFF,0x07 +,0x5C,0x6E,0xFF,0xB3,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x72,0x88,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x63,0x8D,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00 +,0xBD,0x01,0x0C,0x0F,0xFD,0xB3,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x43,0x50,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x20,0x82,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x39,0x00,0x00,0x00,0xFF,0x07,0x58,0x6A,0xFF,0xA7,0x0F,0xBF,0xE4 +,0xFF,0x02,0x08,0x64,0x77,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x50,0x91 +,0xFF,0xFF,0xFF,0x00,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x01,0xD2,0x01 +,0x0C,0x0E,0xFD,0x0F,0xBA,0xDE,0xFF,0xB8,0x0F,0xBF,0xE4,0xFF,0x03,0x0B,0x92 +,0xAE,0xFF,0x00,0x05,0x06,0xFE,0x00,0x01,0x01,0xDA,0x00,0x00,0x00,0x08,0x8C +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xB1,0x00,0x01,0x01,0xFF,0x0D,0xAB +,0xCC,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x97,0xB4,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x88,0x9D,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x4C +,0x00,0x00,0x00,0xFF,0x09,0x70,0x86,0xFF,0x93,0x0F,0xBF,0xE4,0xFF,0x03,0x0D +,0xA9,0xC9,0xFF,0x09,0x6E,0x83,0xFF,0x04,0x35,0x3F,0xFF,0x00,0x04,0x05,0xFE +,0x85,0x00,0x00,0x00,0xFF,0x03,0x00,0x02,0x02,0xFE,0x03,0x21,0x28,0xFE,0x06 +,0x49,0x57,0xFF,0x0C,0x94,0xB0,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x03,0x0E,0xB3 +,0xD6,0xFF,0x03,0x2C,0x34,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x7C,0x8C +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xA4,0x00,0x00,0x00,0xFF,0x0D,0xA3 +,0xC3,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x9D,0xBB,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x92,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x44 +,0x00,0x00,0x00,0xFF,0x09,0x73,0x8A,0xFF,0xB3,0x0F,0xBF,0xE4,0xFF,0x02,0x0E +,0xB2,0xD5,0xFF,0x00,0x05,0x05,0xFE,0x00,0x00,0x00,0xC1,0x8D,0xFF,0xFF,0xFF +,0x00,0x01,0x00,0x00,0x00,0xCB,0x02,0x16,0x1B,0xFE,0xB3,0x0F,0xBF,0xE4,0xFF +,0x02,0x0A,0x85,0x9F,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x77,0x82,0xFF +,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x01,0x01,0xE1,0x02,0x16,0x1A +,0xFE,0x0F,0xBE,0xE3,0xFF,0xA6,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA8,0xC8,0xFF +,0x00,0x01,0x01,0xFF,0x00,0x00,0x00,0xAC,0x91,0xFF,0xFF,0xFF,0x00,0x89,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0xFF,0x0A,0x7F,0x97 +,0xFF,0xB9,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x6D,0x82,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x8B,0x8C,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x56,0x00 +,0x00,0x00,0xFF,0x08,0x69,0x7D,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x02,0x1A +,0x1F,0xFE,0x00,0x01,0x02,0xE3,0x00,0x00,0x00,0x01,0x9C,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x5D,0x00,0x00,0x00,0xFF,0x0A,0x82,0x9B,0xFF,0x92,0x0F +,0xBF,0xE4,0xFF,0x11,0x09,0x6F,0x84,0xFF,0x00,0x05,0x06,0xFE,0x00,0x00,0x00 +,0xFF,0x00,0x01,0x01,0xF9,0x00,0x00,0x00,0xB7,0x00,0x00,0x00,0x70,0x00,0x00 +,0x00,0x5A,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x4E,0x00,0x00,0x00,0x4D,0x00 +,0x00,0x00,0x77,0x00,0x00,0x00,0xA9,0x00,0x01,0x01,0xDC,0x00,0x00,0x00,0xFE +,0x00,0x00,0x00,0xFF,0x04,0x2D,0x35,0xFF,0x0B,0x86,0xA0,0xFF,0x0F,0xBE,0xE3 +,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x03,0x0E,0xB7,0xDA,0xFF,0x02,0x1E,0x24,0xFE +,0x00,0x00,0x01,0xFD,0x00,0x00,0x00,0x3B,0x8B,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x4A,0x00,0x00,0x00,0xFF,0x08,0x60,0x72,0xFF,0x91,0x0F,0xBF,0xE4 +,0xFF,0x02,0x02,0x1D,0x23,0xFE,0x00,0x01,0x02,0xE9,0x00,0x00,0x00,0x02,0x88 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0xFF,0x0B,0x89 +,0xA4,0xFF,0xB4,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x3F,0x4B,0xFF,0x00,0x00,0x00 +,0xFE,0x00,0x00,0x00,0x20,0x8C,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0xD9 +,0x03,0x21,0x27,0xFF,0xB3,0x0F,0xBF,0xE4,0xFF,0x02,0x0F,0xBB,0xDF,0xFF,0x01 +,0x0C,0x0E,0xFE,0x00,0x01,0x01,0xD1,0x83,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0x89,0x00,0x00,0x00,0xFF,0x0C,0x94,0xB0,0xFF,0x95,0x0F,0xBF,0xE4,0xFF +,0x01,0x0F,0xBE,0xE2,0xFF,0x0C,0x9D,0xBC,0xFF,0x8B,0x0C,0x9B,0xB9,0xFF,0x00 +,0x0D,0xA5,0xC5,0xFF,0x82,0x0F,0xBF,0xE4,0xFF,0x02,0x04,0x2F,0x38,0xFF,0x00 +,0x01,0x01,0xF9,0x00,0x00,0x00,0x10,0x90,0xFF,0xFF,0xFF,0x00,0x89,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x16,0x00,0x01,0x01,0xFB,0x04,0x36,0x40,0xFF +,0xB9,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBE,0xE2,0xFF,0x04,0x2D,0x35,0xFF,0x00 +,0x01,0x01,0xFD,0x00,0x00,0x00,0x37,0x8B,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0x09,0x00,0x01,0x01,0xF3,0x03,0x25,0x2C,0xFF,0x91,0x0F,0xBF,0xE4,0xFF +,0x02,0x07,0x5E,0x71,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x3E,0x9C,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x6E,0x00,0x00,0x00,0xFF,0x0B,0x8F,0xAB +,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x05,0x0E,0xB1,0xD3,0xFF,0x05,0x3A,0x46,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x01,0x01,0xDB,0x00,0x00,0x00,0x52,0x00,0x00,0x00 +,0x0B,0x88,0xFF,0xFF,0xFF,0x00,0x05,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x9A +,0x00,0x01,0x01,0xF9,0x00,0x00,0x00,0xFF,0x04,0x31,0x3B,0xFF,0x0E,0xB7,0xDA +,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x03,0x0C,0x9D,0xBC,0xFF,0x00,0x06,0x07,0xFE +,0x00,0x01,0x01,0xE3,0x00,0x00,0x00,0x11,0x8A,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x04,0x00,0x01,0x01,0xEB,0x02,0x1C,0x21,0xFE,0x91,0x0F,0xBF,0xE4 +,0xFF,0x02,0x07,0x5F,0x72,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x40,0x88 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0xFF,0x0B,0x8D +,0xA8,0xFF,0xB4,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x85,0x9F,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x7D,0x8C,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x01,0x01,0xE8 +,0x03,0x2A,0x32,0xFF,0x9A,0x0F,0xBF,0xE4,0xFF,0x09,0x0E,0xB2,0xD4,0xFF,0x0C +,0x99,0xB6,0xFF,0x0C,0x93,0xAF,0xFF,0x0C,0x99,0xB6,0xFF,0x0D,0xA0,0xBE,0xFF +,0x0D,0xA6,0xC6,0xFF,0x0E,0xAC,0xCE,0xFF,0x0E,0xB3,0xD6,0xFF,0x0F,0xB9,0xDD +,0xFF,0x0F,0xBE,0xE3,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x06,0x4B,0x59,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x29,0x82,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x30,0x00,0x00,0x00,0xFF,0x06,0x51,0x61,0xFF,0x93,0x0F,0xBF,0xE4 +,0xFF,0x02,0x0F,0xBB,0xE0,0xFF,0x08,0x6C,0x81,0xFF,0x02,0x19,0x1E,0xFE,0x8D +,0x00,0x00,0x00,0xFF,0x05,0x04,0x2E,0x37,0xFF,0x0A,0x81,0x9A,0xFF,0x0F,0xBE +,0xE2,0xFF,0x09,0x74,0x8B,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x64,0x90 +,0xFF,0xFF,0xFF,0x00,0x8A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xB0,0x00 +,0x02,0x02,0xFE,0x0D,0xAC,0xCD,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x00,0x09,0x72 +,0x88,0xFF,0x8E,0x06,0x4D,0x5C,0xFF,0x03,0x07,0x5B,0x6C,0xFF,0x09,0x78,0x8F +,0xFF,0x0C,0x94,0xB1,0xFF,0x0E,0xB1,0xD3,0xFF,0x94,0x0F,0xBF,0xE4,0xFF,0x03 +,0x0D,0xA3,0xC2,0xFF,0x00,0x05,0x06,0xFE,0x00,0x01,0x01,0xD7,0x00,0x00,0x00 +,0x07,0x8B,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xA1,0x00,0x00,0x00,0xFF +,0x0D,0xA1,0xC0,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA3,0xC2,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x98,0x9C,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0x7F,0x00,0x00,0x00,0xFF,0x0C,0x9D,0xBC,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF +,0x04,0x0F,0xBA,0xDE,0xFF,0x02,0x19,0x1E,0xFE,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x9E,0x00,0x00,0x00,0x0B,0x8C,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00 +,0x1A,0x00,0x00,0x00,0x9D,0x00,0x00,0x00,0xFF,0x03,0x2B,0x34,0xFF,0x0E,0xB4 +,0xD7,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x73,0x89,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0xAF,0x8B,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x94 +,0x00,0x00,0x00,0xFF,0x0C,0x98,0xB6,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0D +,0xA0,0xBF,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x97,0x88,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x5F,0x00,0x00,0x00,0xFF,0x0B,0x89,0xA4,0xFF,0xB4 +,0x0F,0xBF,0xE4,0xFF,0x02,0x0F,0xBC,0xE0,0xFF,0x01,0x0F,0x12,0xFE,0x00,0x01 +,0x01,0xDB,0x8C,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x01,0x01,0xF6,0x04,0x34,0x3E +,0xFF,0x96,0x0F,0xBF,0xE4,0xFF,0x03,0x0D,0xA9,0xC9,0xFF,0x06,0x4A,0x59,0xFF +,0x03,0x24,0x2B,0xFF,0x01,0x09,0x0B,0xFE,0x89,0x00,0x00,0x00,0xFF,0x0B,0x00 +,0x05,0x06,0xFE,0x01,0x0B,0x0D,0xFE,0x01,0x11,0x14,0xFE,0x02,0x17,0x1C,0xFE +,0x02,0x1E,0x24,0xFF,0x03,0x24,0x2B,0xFF,0x03,0x2B,0x33,0xFF,0x04,0x37,0x42 +,0xFF,0x07,0x56,0x67,0xFF,0x09,0x76,0x8D,0xFF,0x0C,0x96,0xB3,0xFF,0x0E,0xB5 +,0xD8,0xFF,0x83,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x8E,0xA9,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x81,0x83,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x01,0x01,0xD9 +,0x01,0x10,0x13,0xFE,0x0F,0xBD,0xE1,0xFF,0x92,0x0F,0xBF,0xE4,0xFF,0x03,0x09 +,0x77,0x8E,0xFF,0x00,0x00,0x00,0xFF,0x00,0x01,0x01,0xEF,0x00,0x00,0x00,0x93 +,0x8B,0x00,0x00,0x00,0x80,0x06,0x00,0x00,0x00,0xA1,0x00,0x01,0x01,0xF9,0x00 +,0x00,0x00,0xFF,0x04,0x2D,0x36,0xFF,0x0C,0x9A,0xB8,0xFF,0x00,0x05,0x06,0xFE +,0x00,0x00,0x00,0xC0,0x90,0xFF,0xFF,0xFF,0x00,0x8A,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0xFF,0x08,0x66,0x7A,0xFF,0x90,0x0F,0xBF +,0xE4,0xFF,0x00,0x09,0x70,0x85,0xFF,0x92,0x00,0x00,0x00,0xFF,0x01,0x03,0x26 +,0x2D,0xFE,0x0B,0x8B,0xA5,0xFF,0x93,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x68,0x7C +,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x86,0x8B,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0xFF,0x07,0x5D,0x6F,0xFF,0x91,0x0F,0xBF +,0xE4,0xFF,0x02,0x03,0x27,0x2E,0xFF,0x00,0x01,0x02,0xEF,0x00,0x00,0x00,0x06 +,0x9B,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0xFF,0x0D +,0xAC,0xCD,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x6B,0x80,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x79,0x90,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00 +,0x85,0x00,0x00,0x00,0xFF,0x03,0x26,0x2D,0xFE,0x0E,0xB5,0xD8,0xFF,0x8F,0x0F +,0xBF,0xE4,0xFF,0x02,0x05,0x40,0x4D,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x6B,0x8A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0xFF +,0x07,0x54,0x64,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x21,0x27,0xFE,0x00 +,0x01,0x02,0xEC,0x00,0x00,0x00,0x03,0x87,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0x5A,0x00,0x00,0x00,0xFF,0x0A,0x85,0x9F,0xFF,0x95,0x0F,0xBF,0xE4,0xFF +,0x04,0x0E,0xB7,0xDA,0xFF,0x0D,0xA6,0xC6,0xFF,0x0C,0x94,0xB1,0xFF,0x0A,0x83 +,0x9C,0xFF,0x09,0x78,0x8F,0xFF,0x8C,0x09,0x77,0x8E,0xFF,0x07,0x0A,0x79,0x91 +,0xFF,0x0A,0x7E,0x96,0xFF,0x0A,0x82,0x9C,0xFF,0x0B,0x87,0xA1,0xFF,0x0B,0x8B +,0xA6,0xFF,0x0B,0x8F,0xAB,0xFF,0x0C,0x94,0xB0,0xFF,0x0D,0xA8,0xC8,0xFF,0x85 +,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x53,0x63,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x39,0x8A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00 +,0xFF,0x05,0x3D,0x49,0xFF,0x95,0x0F,0xBF,0xE4,0xFF,0x16,0x09,0x70,0x85,0xFF +,0x00,0x05,0x06,0xFE,0x00,0x00,0x00,0xFF,0x00,0x01,0x01,0xDF,0x00,0x00,0x00 +,0xBD,0x00,0x00,0x00,0x9E,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x72,0x00,0x00 +,0x00,0x7A,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x8F,0x00 +,0x00,0x00,0x98,0x00,0x00,0x00,0xA1,0x00,0x00,0x00,0xAA,0x00,0x00,0x00,0xB3 +,0x00,0x00,0x00,0xBC,0x00,0x00,0x00,0xC5,0x00,0x00,0x00,0xCE,0x00,0x00,0x00 +,0xD7,0x00,0x01,0x01,0xE0,0x00,0x01,0x01,0xEA,0x00,0x01,0x01,0xF9,0x83,0x00 +,0x00,0x00,0xFF,0x06,0x02,0x15,0x19,0xFE,0x04,0x36,0x40,0xFF,0x08,0x67,0x7B +,0xFF,0x0E,0xB7,0xDA,0xFF,0x0F,0xBE,0xE2,0xFF,0x01,0x12,0x15,0xFE,0x00,0x01 +,0x01,0xDA,0x83,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x7F,0x00,0x00,0x00 +,0xFF,0x0B,0x8C,0xA7,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBE,0xE3,0xFF +,0x02,0x1F,0x25,0xFE,0x00,0x01,0x01,0xF2,0x00,0x00,0x00,0x10,0x8D,0xFF,0xFF +,0xFF,0x00,0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x8D,0x00,0x00,0x00,0xFE +,0x01,0x09,0x0A,0xFE,0x01,0x10,0x13,0xFF,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x1E,0x8F,0xFF,0xFF,0xFF,0x00,0x8A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x05,0x00,0x01,0x01,0xEB,0x02,0x1D,0x23,0xFE,0x90,0x0F,0xBF,0xE4,0xFF,0x02 +,0x0E,0xAF,0xD1,0xFF,0x00,0x03,0x03,0xFE,0x00,0x00,0x00,0xC6,0x8C,0x00,0x00 +,0x00,0x18,0x07,0x00,0x00,0x00,0x2E,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x7B +,0x00,0x00,0x00,0xA7,0x00,0x01,0x01,0xF9,0x00,0x00,0x00,0xFF,0x04,0x38,0x43 +,0xFF,0x0E,0xB5,0xD8,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBD,0xE1,0xFF +,0x03,0x28,0x30,0xFE,0x00,0x00,0x01,0xFD,0x00,0x00,0x00,0x34,0x8A,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x01,0x01,0xE9,0x02,0x1A,0x1F,0xFE +,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x6B,0x80,0xFF,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x4E,0x9B,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xA1,0x00,0x00 +,0x00,0xFF,0x0F,0xBA,0xDE,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x03,0x0E,0xB5,0xD8 +,0xFF,0x01,0x0F,0x11,0xFD,0x00,0x01,0x02,0xE4,0x00,0x00,0x00,0x07,0x91,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0xFF,0x07,0x54,0x64 +,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x03,0x0E,0xB5,0xD7,0xFF,0x02,0x18,0x1D,0xFD +,0x00,0x01,0x01,0xF9,0x00,0x00,0x00,0x2E,0x8A,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x01,0x01,0xDF,0x01,0x12,0x15,0xFE,0x0F,0xBE,0xE2,0xFF,0x90,0x0F,0xBF,0xE4 +,0xFF,0x02,0x08,0x62,0x75,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x44,0x87 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0xFF,0x0A,0x82 +,0x9B,0xFF,0x92,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x99,0xB6,0xFF,0x06,0x4F,0x5E +,0xFF,0x01,0x0E,0x11,0xFE,0x99,0x00,0x00,0x00,0xFF,0x03,0x01,0x0D,0x10,0xFE +,0x04,0x35,0x3F,0xFF,0x09,0x73,0x8A,0xFF,0x0E,0xB5,0xD7,0xFF,0x81,0x0F,0xBF +,0xE4,0xFF,0x02,0x0C,0x9A,0xB7,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x97 +,0x8B,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x01,0x01,0xF7,0x04,0x34,0x3E,0xFF,0x94 +,0x0F,0xBF,0xE4,0xFF,0x03,0x0B,0x88,0xA2,0xFF,0x00,0x01,0x01,0xFF,0x00,0x01 +,0x01,0xDE,0x00,0x00,0x00,0x46,0x92,0xFF,0xFF,0xFF,0x00,0x0C,0x00,0x00,0x00 +,0x02,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x4C,0x00,0x00,0x00,0x75,0x00,0x00 +,0x00,0x9F,0x00,0x00,0x00,0xC9,0x00,0x01,0x01,0xF3,0x00,0x00,0x00,0xFF,0x01 +,0x0F,0x11,0xFD,0x08,0x67,0x7B,0xFF,0x06,0x4C,0x5A,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x32,0x82,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x27,0x00 +,0x00,0x00,0xFF,0x06,0x4A,0x59,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x0F,0xBB +,0xDF,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xAA,0x90,0xFF,0xFF,0xFF,0x00 +,0x01,0x00,0x00,0x00,0x44,0x00,0x01,0x02,0xEA,0x81,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x78,0x8F,0xFF,0xFF,0xFF,0x00,0x8B,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x8F,0x00,0x00,0x00,0xFF,0x0C,0x95,0xB2,0xFF,0x90,0x0F,0xBF +,0xE4,0xFF,0x02,0x04,0x36,0x40,0xFF,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x18 +,0x8F,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0xA1,0x00 +,0x00,0x00,0xFF,0x03,0x22,0x28,0xFE,0x0D,0xAB,0xCC,0xFF,0x91,0x0F,0xBF,0xE4 +,0xFF,0x03,0x0D,0xA0,0xBE,0xFF,0x00,0x04,0x05,0xFE,0x00,0x01,0x01,0xD4,0x00 +,0x00,0x00,0x06,0x8A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x91,0x00,0x00 +,0x00,0xFF,0x0C,0x95,0xB2,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xAD,0xCF +,0xFF,0x00,0x02,0x02,0xFE,0x00,0x00,0x00,0xA9,0x9B,0xFF,0xFF,0xFF,0x00,0x01 +,0x00,0x00,0x00,0xAC,0x00,0x03,0x03,0xFE,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x08 +,0x61,0x74,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x64,0x92,0xFF,0xFF,0xFF +,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xC2,0x00,0x02,0x02,0xFE,0x0C +,0x9A,0xB7,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x97,0xB5,0xFF,0x00,0x02 +,0x03,0xFE,0x00,0x00,0x00,0xC0,0x8A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x84,0x00,0x00,0x00,0xFF,0x0B,0x8C,0xA7,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02 +,0x0D,0xA3,0xC3,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x9B,0x87,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x4F,0x00,0x00,0x00,0xFF,0x0A,0x7A,0x92,0xFF +,0x91,0x0F,0xBF,0xE4,0xFF,0x07,0x0A,0x7D,0x95,0xFF,0x00,0x02,0x03,0xFE,0x00 +,0x00,0x00,0xFF,0x00,0x01,0x01,0xD0,0x00,0x00,0x00,0xA1,0x00,0x00,0x00,0x89 +,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x5A,0x8D,0x00,0x00,0x00,0x48,0x11,0x00 +,0x00,0x00,0x4A,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x5C +,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x70,0x00,0x00,0x00 +,0x98,0x00,0x00,0x00,0xCC,0x00,0x01,0x01,0xFA,0x00,0x00,0x00,0xFF,0x01,0x07 +,0x08,0xFE,0x06,0x49,0x57,0xFF,0x0E,0xAD,0xCF,0xFF,0x0F,0xBF,0xE4,0xFF,0x02 +,0x20,0x26,0xFE,0x00,0x01,0x01,0xEF,0x00,0x00,0x00,0x07,0x8A,0xFF,0xFF,0xFF +,0x00,0x01,0x00,0x00,0x00,0xD5,0x02,0x1A,0x1F,0xFE,0x93,0x0F,0xBF,0xE4,0xFF +,0x03,0x0E,0xB6,0xD9,0xFF,0x01,0x0B,0x0D,0xFD,0x00,0x01,0x01,0xF0,0x00,0x00 +,0x00,0x24,0x99,0xFF,0xFF,0xFF,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00 +,0x6A,0x00,0x01,0x01,0xE6,0x00,0x00,0x00,0xFF,0x00,0x02,0x02,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x8B,0x83,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x01,0x01 +,0xCF,0x01,0x0B,0x0D,0xFE,0x0F,0xBB,0xDF,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02 +,0x0F,0xBC,0xE0,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xA8,0x91,0xFF,0xFF +,0xFF,0x00,0x03,0x00,0x00,0x00,0x21,0x00,0x01,0x02,0xDD,0x00,0x00,0x00,0xFF +,0x00,0x00,0x01,0xD5,0x8F,0xFF,0xFF,0xFF,0x00,0x8B,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x2F,0x00,0x00,0x00,0xFF,0x06,0x4D,0x5C,0xFF,0x90,0x0F,0xBF +,0xE4,0xFF,0x02,0x0A,0x79,0x91,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x6F +,0x91,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xFE,0x02 +,0x15,0x19,0xFE,0x0E,0xAC,0xCE,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x63 +,0x76,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x7E,0x8A,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0xFF,0x06,0x52,0x61,0xFF,0x91,0x0F +,0xBF,0xE4,0xFF,0x02,0x04,0x34,0x3E,0xFF,0x00,0x01,0x01,0xF7,0x00,0x00,0x00 +,0x0D,0x9A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0xFF +,0x0E,0xB3,0xD6,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x3A,0x45,0xFF,0x00 +,0x00,0x00,0xFD,0x00,0x00,0x00,0x04,0x93,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00 +,0x00,0x29,0x00,0x01,0x01,0xFA,0x03,0x26,0x2D,0xFE,0x0F,0xBD,0xE1,0xFF,0x8F +,0x0F,0xBF,0xE4,0xFF,0x02,0x06,0x4F,0x5F,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x4F,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x29,0x00,0x00,0x00 +,0xFF,0x06,0x48,0x56,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x24,0x2C,0xFF +,0x00,0x01,0x02,0xEF,0x00,0x00,0x00,0x05,0x86,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x30,0x00,0x00,0x00,0xFF,0x07,0x5F,0x72,0xFF,0x90,0x0F,0xBF,0xE4 +,0xFF,0x03,0x0D,0xA3,0xC3,0xFF,0x00,0x02,0x02,0xFE,0x00,0x01,0x02,0xE5,0x00 +,0x00,0x00,0x34,0x9B,0xFF,0xFF,0xFF,0x00,0x08,0x00,0x00,0x00,0x0F,0x00,0x00 +,0x00,0x66,0x00,0x00,0x00,0xC6,0x00,0x00,0x00,0xFF,0x01,0x0B,0x0D,0xFD,0x09 +,0x73,0x8A,0xFF,0x08,0x66,0x7A,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x53 +,0x8A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xB4,0x00,0x03,0x04,0xFE,0x0F +,0xBD,0xE1,0xFF,0x92,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x76,0x8D,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x6B,0x9C,0xFF,0xFF,0xFF,0x00,0x05,0x00,0x00,0x00 +,0x08,0x00,0x00,0x00,0x71,0x00,0x01,0x01,0xF1,0x00,0x00,0x00,0xFF,0x00,0x01 +,0x01,0xE3,0x00,0x00,0x00,0x01,0x82,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x76,0x00,0x00,0x00,0xFF,0x0A,0x85,0x9F,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02 +,0x0F,0xBE,0xE3,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xA8,0x92,0xFF,0xFF +,0xFF,0x00,0x03,0x00,0x00,0x00,0x21,0x00,0x01,0x01,0xF5,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x31,0x8E,0xFF,0xFF,0xFF,0x00,0x8C,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x01,0x01,0xD0,0x01,0x0A,0x0C,0xFD,0x0F,0xB9,0xDD,0xFF,0x8F,0x0F,0xBF +,0xE4,0xFF,0x02,0x0E,0xB5,0xD8,0xFF,0x00,0x06,0x07,0xFE,0x00,0x00,0x00,0xC9 +,0x92,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0xFF,0x03 +,0x2B,0x34,0xFF,0x0F,0xBB,0xDF,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBC +,0xE0,0xFF,0x02,0x1F,0x25,0xFE,0x00,0x01,0x02,0xF5,0x00,0x00,0x00,0x16,0x8A +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x01,0x01,0xDD,0x01,0x10,0x13,0xFE,0x0F,0xBD +,0xE1,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x78,0x8F,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x5F,0x9A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x81 +,0x00,0x00,0x00,0xFF,0x0D,0xA2,0xC1,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x01,0x04 +,0x35,0x3F,0xFF,0x00,0x01,0x01,0xF7,0x95,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0x84,0x00,0x00,0x00,0xFF,0x08,0x6C,0x81,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF +,0x03,0x0E,0xAF,0xD1,0xFF,0x01,0x09,0x0B,0xFD,0x00,0x01,0x01,0xDA,0x00,0x00 +,0x00,0x04,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xCE,0x01,0x09,0x0B +,0xFE,0x0F,0xB9,0xDD,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x65,0x79,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x49,0x86,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x0A,0x00,0x00,0x00,0xFE,0x05,0x41,0x4E,0xFF,0x90,0x0F,0xBF,0xE4 +,0xFF,0x02,0x09,0x70,0x85,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x4D,0x9F +,0xFF,0xFF,0xFF,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x01,0x02,0xE3,0x00,0x00 +,0x00,0xFF,0x02,0x1C,0x21,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xB1,0x8A +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0xFF,0x0D,0xA8 +,0xC8,0xFF,0x92,0x0F,0xBF,0xE4,0xFF,0x02,0x04,0x2F,0x38,0xFF,0x00,0x01,0x01 +,0xF8,0x00,0x00,0x00,0x10,0x9E,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x4B +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x3C,0x82,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0xFE,0x05,0x43,0x50,0xFF +,0x91,0x0F,0xBF,0xE4,0xFF,0x01,0x01,0x0C,0x0E,0xFE,0x00,0x01,0x01,0xD6,0x93 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x6C,0x00,0x01,0x01,0xF6,0x00,0x00 +,0x00,0x52,0x8E,0xFF,0xFF,0xFF,0x00,0x8C,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0x6E,0x00,0x00,0x00,0xFF,0x0A,0x7C,0x94,0xFF,0x90,0x0F,0xBF,0xE4,0xFF +,0x02,0x05,0x40,0x4C,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x23,0x92,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0xFF,0x06,0x4E,0x5D +,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x83,0x9C,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x90,0x8A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x82,0x00 +,0x00,0x00,0xFF,0x0B,0x8A,0xA5,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB5 +,0xD7,0xFF,0x00,0x05,0x06,0xFE,0x00,0x00,0x00,0xB9,0x9A,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x6A,0x00,0x00,0x00,0xFF,0x0B,0x90,0xAC,0xFF,0x8E,0x0F +,0xBF,0xE4,0xFF,0x01,0x04,0x31,0x3B,0xFF,0x00,0x01,0x02,0xF0,0x95,0xFF,0xFF +,0xFF,0x00,0x03,0x00,0x00,0x00,0x08,0x00,0x01,0x01,0xDC,0x01,0x08,0x0A,0xFD +,0x0D,0xAA,0xCB,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x65,0x79,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x6D,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0x73,0x00,0x00,0x00,0xFF,0x0A,0x80,0x99,0xFF,0x90,0x0F,0xBF,0xE4,0xFF +,0x02,0x0D,0xA6,0xC6,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x9F,0x87,0xFF +,0xFF,0xFF,0x00,0x01,0x00,0x01,0x02,0xE3,0x03,0x24,0x2B,0xFF,0x90,0x0F,0xBF +,0xE4,0xFF,0x02,0x05,0x3E,0x4A,0xFF,0x00,0x01,0x01,0xFC,0x00,0x00,0x00,0x0D +,0xA0,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x94,0x81 +,0x00,0x00,0x00,0xFF,0x01,0x00,0x01,0x01,0xFB,0x00,0x00,0x00,0x14,0x89,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0xFF,0x0B,0x8E,0xAA +,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x0F,0xBA,0xDE,0xFF,0x00,0x01,0x02,0xFF +,0x00,0x00,0x00,0xAE,0xA0,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x6D,0x83,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0xC5,0x01,0x07,0x09,0xFE,0x0E,0xB8,0xDB,0xFF,0x90,0x0F,0xBF,0xE4,0xFF +,0x02,0x06,0x4C,0x5A,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x30,0x92,0xFF +,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x13,0x8F,0xFF,0xFF +,0xFF,0x00,0x8C,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x14,0x00,0x01,0x01 +,0xFB,0x04,0x34,0x3F,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x83,0x9C,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x7C,0x92,0xFF,0xFF,0xFF,0x00,0x03,0x00 +,0x00,0x00,0x04,0x00,0x00,0x00,0xBE,0x00,0x00,0x00,0xFF,0x0A,0x7B,0x93,0xFF +,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x28,0x30,0xFF,0x00,0x01,0x01,0xF9,0x00 +,0x00,0x00,0x1E,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x27,0x00,0x00 +,0x00,0xFF,0x05,0x46,0x53,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x40,0x4C +,0xFF,0x00,0x00,0x01,0xFD,0x00,0x00,0x00,0x18,0x99,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xFF,0x0A,0x7F,0x97,0xFF,0x8E,0x0F,0xBF +,0xE4,0xFF,0x01,0x04,0x2E,0x37,0xFF,0x00,0x02,0x02,0xE8,0x96,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0xFF,0x05,0x3D,0x48,0xFF,0x8F +,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xB9,0xDD,0xFF,0x02,0x15,0x1A,0xFD,0x00,0x01 +,0x02,0xEE,0x00,0x00,0x00,0x0F,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x1B,0x00,0x00,0x00,0xFD,0x05,0x3C,0x48,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02 +,0x03,0x28,0x2F,0xFF,0x00,0x01,0x01,0xF2,0x00,0x00,0x00,0x06,0x86,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0xB9,0x01,0x07,0x08,0xFE,0x0F,0xBE,0xE3,0xFF +,0x8F,0x0F,0xBF,0xE4,0xFF,0x01,0x04,0x34,0x3E,0xFF,0x00,0x01,0x01,0xF6,0xA3 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x6E,0x81,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x6D,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x4F,0x00 +,0x00,0x00,0xFF,0x09,0x76,0x8C,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA2 +,0xC1,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x88,0xA0,0xFF,0xFF,0xFF,0x00 +,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x84,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x6D,0x00,0x00,0x00,0xFF,0x0A,0x7E,0x96,0xFF,0x90,0x0F,0xBF +,0xE4,0xFF,0x02,0x0B,0x90,0xAC,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x8B +,0xA4,0xFF,0xFF,0xFF,0x00,0x8D,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xAE +,0x00,0x01,0x01,0xFF,0x0D,0xAA,0xCB,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0F +,0xBB,0xDF,0xFF,0x01,0x0B,0x0D,0xFE,0x00,0x01,0x01,0xD6,0x93,0xFF,0xFF,0xFF +,0x00,0x03,0x00,0x00,0x00,0x15,0x00,0x01,0x02,0xEB,0x01,0x0F,0x12,0xFD,0x0E +,0xB3,0xD6,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x8E,0xA9,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x9E,0x8A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x01,0x01 +,0xCE,0x01,0x09,0x0B,0xFE,0x0E,0xB8,0xDC,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02 +,0x0A,0x84,0x9D,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x6F,0x99,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xFF,0x09,0x6D,0x82,0xFF +,0x8E,0x0F,0xBF,0xE4,0xFF,0x01,0x03,0x2C,0x35,0xFF,0x00,0x01,0x02,0xEF,0x97 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xA5,0x00,0x00,0x00,0xFF,0x0A,0x85 +,0x9E,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x7B,0x93,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x8A,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xBE +,0x00,0x04,0x05,0xFE,0x0E,0xB3,0xD6,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x08 +,0x69,0x7D,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x4D,0x86,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0xFF,0x0D,0xA9,0xC9,0xFF,0x8F +,0x0F,0xBF,0xE4,0xFF,0x02,0x06,0x49,0x58,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x10,0xA3,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x6B,0x00,0x00,0x01 +,0xFC,0x00,0x00,0x00,0x70,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x2C +,0x00,0x00,0x00,0xFF,0x07,0x58,0x69,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x0B +,0x88,0xA3,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x68,0xA7,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x17,0x00,0x00,0x01,0xFD,0x05,0x3C,0x48,0xFF,0x90 +,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBE,0xE3,0xFF,0x02,0x15,0x19,0xFE,0x00,0x01 +,0x01,0xE4,0x00,0x00,0x00,0x02,0xA3,0xFF,0xFF,0xFF,0x00,0x8D,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x4D,0x00,0x00,0x00,0xFF,0x08,0x64,0x77,0xFF,0x90 +,0x0F,0xBF,0xE4,0xFF,0x02,0x06,0x4A,0x59,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x2F,0x93,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x5E,0x00,0x00,0x00 +,0xFF,0x06,0x50,0x60,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x04,0x33,0x3D,0xFF +,0x00,0x00,0x01,0xFD,0x00,0x00,0x00,0x28,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x72,0x00,0x00,0x00,0xFF,0x0A,0x7E,0x96,0xFF,0x90,0x0F,0xBF,0xE4 +,0xFF,0x02,0x0F,0xBB,0xDF,0xFF,0x01,0x0C,0x0E,0xFE,0x00,0x01,0x01,0xCB,0x99 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0xFF,0x07,0x5B +,0x6D,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x06,0x4D,0x5C,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x22,0x96,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x16 +,0x00,0x01,0x01,0xF0,0x02,0x15,0x18,0xFD,0x0E,0xB6,0xD9,0xFF,0x8E,0x0F,0xBF +,0xE4,0xFF,0x03,0x0F,0xBE,0xE3,0xFF,0x03,0x27,0x2E,0xFE,0x00,0x01,0x01,0xF9 +,0x00,0x00,0x00,0x1F,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x63,0x00 +,0x00,0x00,0xFF,0x09,0x74,0x8B,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA9 +,0xC9,0xFF,0x00,0x01,0x01,0xFF,0x00,0x00,0x00,0xA4,0x86,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x6A,0x00,0x00,0x00,0xFF,0x0B,0x8B,0xA6,0xFF,0x8F,0x0F +,0xBF,0xE4,0xFF,0x02,0x08,0x60,0x72,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x2B,0xA4,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x19,0x8A,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x01,0x01,0xEE,0x03,0x27,0x2E,0xFF,0x91 +,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x71,0x87,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x4A,0xA8,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xBC,0x00,0x04,0x05 +,0xFE,0x0E,0xB4,0xD7,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x58,0x6A,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x40,0xA3,0xFF,0xFF,0xFF,0x00,0x8D,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x01,0x01,0xEA,0x02,0x1B,0x20 +,0xFE,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x8D,0xA8,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x88,0x94,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x01,0xC1,0x00 +,0x01,0x01,0xFF,0x0C,0x9A,0xB8,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x97 +,0xB5,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xAC,0x89,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0xFD,0x05,0x3A,0x46,0xFF,0x91,0x0F +,0xBF,0xE4,0xFF,0x02,0x06,0x4C,0x5B,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x25,0x98,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0xFF +,0x06,0x48,0x56,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x77,0x8E,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x5A,0x97,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0x66,0x00,0x00,0x00,0xFF,0x07,0x55,0x65,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF +,0x02,0x0B,0x8B,0xA6,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x91,0x88,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x10,0x00,0x01,0x01,0xF9,0x04,0x31,0x3A +,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x2B,0x33,0xFF,0x00,0x01,0x01,0xF4 +,0x00,0x00,0x00,0x08,0x85,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x42,0x00 +,0x00,0x00,0xFF,0x09,0x6D,0x83,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x76 +,0x8D,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x51,0xB1,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0xAD,0x00,0x01,0x01,0xFF,0x0E,0xB3,0xD6,0xFF,0x90,0x0F +,0xBF,0xE4,0xFF,0x02,0x0A,0x7D,0x95,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x5C,0xA8,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0xFF +,0x09,0x77,0x8E,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x9D,0xBB,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x9B,0xA3,0xFF,0xFF,0xFF,0x00,0x8E,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x8D,0x00,0x00,0x00,0xFF,0x0C,0x93,0xAF,0xFF +,0x8F,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBE,0xE2,0xFF,0x01,0x12,0x15,0xFE,0x00 +,0x01,0x01,0xE2,0x00,0x00,0x00,0x01,0x93,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00 +,0x00,0x2B,0x00,0x01,0x01,0xFB,0x03,0x2A,0x32,0xFF,0x0F,0xBE,0xE3,0xFF,0x90 +,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x3D,0x48,0xFF,0x00,0x00,0x00,0xFE,0x00,0x00 +,0x00,0x33,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xBD,0x00,0x04,0x05 +,0xFE,0x0E,0xB2,0xD4,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x91,0xAD,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x80,0x99,0xFF,0xFF,0xFF,0x00,0x01,0x00 +,0x01,0x01,0xE6,0x03,0x24,0x2B,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA2 +,0xC1,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x92,0x97,0xFF,0xFF,0xFF,0x00 +,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xC5,0x00,0x02,0x02,0xFE,0x0C,0x9C +,0xBA,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x22,0x29,0xFE,0x00,0x01,0x01 +,0xF4,0x00,0x00,0x00,0x0F,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xAE +,0x00,0x01,0x01,0xFF,0x0D,0xAB,0xCC,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x08 +,0x6C,0x81,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x51,0x85,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0xFF,0x06,0x50,0x60,0xFF,0x8F +,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA2,0xC1,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x97,0xB1,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x6A,0x00,0x00,0x00 +,0xFF,0x0A,0x83,0x9C,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x9B,0xB9,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x82,0xA8,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x11,0x00,0x01,0x01,0xFA,0x04,0x34,0x3F,0xFF,0x91,0x0F,0xBF,0xE4 +,0xFF,0x02,0x03,0x21,0x27,0xFE,0x00,0x01,0x01,0xF1,0x00,0x00,0x00,0x07,0xA2 +,0xFF,0xFF,0xFF,0x00,0x8E,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x2D,0x00 +,0x00,0x00,0xFF,0x06,0x4B,0x59,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x54 +,0x64,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x3B,0x94,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x8B,0x00,0x00,0x00,0xFF,0x0A,0x7B,0x93,0xFF,0x90,0x0F +,0xBF,0xE4,0xFF,0x02,0x0D,0xA0,0xBE,0xFF,0x00,0x01,0x01,0xFF,0x00,0x00,0x00 +,0xB9,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0xFF +,0x09,0x73,0x89,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0F,0xBE,0xE3,0xFF,0x02 +,0x15,0x19,0xFE,0x00,0x01,0x02,0xDB,0x99,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0xAE,0x00,0x02,0x03,0xFE,0x0E,0xB8,0xDC,0xFF,0x8D,0x0F,0xBF,0xE4,0xFF +,0x02,0x0F,0xBE,0xE3,0xFF,0x01,0x0C,0x0E,0xFE,0x00,0x00,0x00,0xCA,0x98,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x2E,0x00,0x00,0x00,0xFE,0x05,0x3F,0x4B +,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x77,0x8E,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x75,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x53,0x00 +,0x00,0x00,0xFF,0x08,0x68,0x7C,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xAC +,0xCD,0xFF,0x00,0x01,0x01,0xFF,0x00,0x00,0x00,0xA8,0x86,0xFF,0xFF,0xFF,0x00 +,0x01,0x00,0x01,0x01,0xF4,0x04,0x32,0x3C,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x01 +,0x02,0x18,0x1D,0xFE,0x00,0x01,0x01,0xE0,0xB1,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x27,0x00,0x00,0x00,0xFF,0x06,0x51,0x61,0xFF,0x90,0x0F,0xBF,0xE4 +,0xFF,0x02,0x0E,0xB8,0xDC,0xFF,0x00,0x01,0x01,0xFF,0x00,0x00,0x00,0xA9,0xA9 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xB2,0x00,0x02,0x02,0xFE,0x0E,0xAF +,0xD1,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x65,0x79,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x51,0xA2,0xFF,0xFF,0xFF,0x00,0x8F,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0xCC,0x01,0x09,0x0B,0xFD,0x0E,0xB8,0xDB,0xFF,0x8F,0x0F +,0xBF,0xE4,0xFF,0x02,0x0C,0x97,0xB5,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x95,0x94,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x10,0x00,0x01,0x02,0xF1 +,0x02,0x1A,0x1F,0xFE,0x0F,0xBC,0xE0,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x05 +,0x46,0x53,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x31,0x88,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x0F,0x00,0x01,0x01,0xF9,0x04,0x2E,0x37,0xFF,0x91 +,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x59,0x6A,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x35,0x98,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x77,0x00,0x00,0x00 +,0xFF,0x0B,0x92,0xAE,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x04,0x36,0x40,0xFF +,0x00,0x01,0x01,0xFB,0x00,0x00,0x00,0x08,0x98,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0xB2,0x00,0x01,0x01,0xFF,0x0D,0xA4,0xC4,0xFF,0x8E,0x0F,0xBF,0xE4 +,0xFF,0x03,0x0F,0xBB,0xDF,0xFF,0x01,0x11,0x14,0xFE,0x00,0x01,0x01,0xE3,0x00 +,0x00,0x00,0x04,0x87,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x07,0x00,0x01 +,0x01,0xF1,0x03,0x24,0x2B,0xFE,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x04,0x2E,0x37 +,0xFF,0x00,0x01,0x01,0xF5,0x00,0x00,0x00,0x0A,0x85,0xFF,0xFF,0xFF,0x00,0x01 +,0x00,0x00,0x00,0xCB,0x02,0x14,0x18,0xFE,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x06 +,0x4F,0x5E,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x27,0xB1,0xFF,0xFF,0xFF +,0x00,0x01,0x00,0x01,0x01,0xE5,0x02,0x1F,0x25,0xFE,0x91,0x0F,0xBF,0xE4,0xFF +,0x01,0x02,0x16,0x1B,0xFE,0x00,0x00,0x00,0xD0,0xA9,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x5A,0x00,0x00,0x00,0xFF,0x09,0x70,0x85,0xFF,0x90,0x0F,0xBF +,0xE4,0xFF,0x02,0x0D,0xA9,0xC9,0xFF,0x00,0x01,0x01,0xFF,0x00,0x00,0x00,0xAC +,0xA2,0xFF,0xFF,0xFF,0x00,0x8F,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x6C +,0x00,0x00,0x00,0xFF,0x0A,0x7A,0x92,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x02 +,0x1B,0x20,0xFE,0x00,0x01,0x01,0xEB,0x00,0x00,0x00,0x04,0x94,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x7A,0x00,0x00,0x00,0xFF,0x09,0x73,0x89,0xFF,0x90 +,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x9B,0xB9,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0xA0,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xAD,0x00,0x01,0x01 +,0xFF,0x0D,0xA9,0xCA,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x9D,0xBB,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x90,0x98,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x40,0x00,0x00,0x00,0xFF,0x08,0x6A,0x7E,0xFF,0x8E,0x0F,0xBF,0xE4 +,0xFF,0x02,0x08,0x60,0x72,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x3A,0x98 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x3B,0x00,0x00,0x00,0xFF,0x06,0x4D +,0x5C,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x62,0x75,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x59,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x9D +,0x00,0x00,0x00,0xFF,0x0D,0xA0,0xBF,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x09 +,0x6F,0x84,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x56,0x85,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xFF,0x0E,0xAF,0xD1,0xFF,0x8F +,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x85,0x9F,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x70,0xB1,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xA1,0x00,0x00,0x00 +,0xFF,0x0E,0xAC,0xCE,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x04,0x35,0x3F,0xFF +,0x00,0x01,0x01,0xF7,0x00,0x00,0x00,0x01,0xA8,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x0C,0x00,0x01,0x01,0xF6,0x04,0x2E,0x37,0xFF,0x91,0x0F,0xBF,0xE4 +,0xFF,0x02,0x04,0x2E,0x37,0xFF,0x00,0x01,0x01,0xF9,0x00,0x00,0x00,0x0F,0xA1 +,0xFF,0xFF,0xFF,0x00,0x8F,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x12,0x00 +,0x01,0x01,0xFA,0x04,0x32,0x3C,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x5E +,0x70,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x48,0x94,0xFF,0xFF,0xFF,0x00 +,0x03,0x00,0x00,0x00,0x0B,0x00,0x01,0x02,0xEB,0x02,0x14,0x18,0xFE,0x0F,0xB9 +,0xDD,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x04,0x2D,0x36,0xFF,0x00,0x01,0x01 +,0xF9,0x00,0x00,0x00,0x16,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x53 +,0x00,0x00,0x00,0xFF,0x08,0x67,0x7A,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x03 +,0x20,0x27,0xFE,0x00,0x01,0x02,0xEA,0x00,0x00,0x00,0x03,0x97,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0xFD,0x05,0x41,0x4E,0xFF,0x8E +,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x8B,0xA5,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x72,0x99,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xC4,0x00,0x05,0x06 +,0xFE,0x0E,0xAE,0xCF,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB0,0xD2,0xFF +,0x00,0x06,0x07,0xFE,0x00,0x00,0x00,0xCB,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x42,0x00,0x00,0x00,0xFF,0x07,0x5C,0x6E,0xFF,0x90,0x0F,0xBF,0xE4 +,0xFF,0x02,0x0E,0xAE,0xCF,0xFF,0x00,0x01,0x01,0xFF,0x00,0x00,0x00,0xAD,0x85 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x5C,0x00,0x00,0x00,0xFF,0x0A,0x79 +,0x91,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB7,0xDA,0xFF,0x00,0x04,0x05 +,0xFE,0x00,0x00,0x00,0xB8,0xB1,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x5F +,0x00,0x00,0x00,0xFF,0x0A,0x7B,0x93,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x07 +,0x53,0x63,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x22,0xA9,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0xA9,0x00,0x01,0x01,0xFF,0x0D,0xAA,0xCB,0xFF,0x90 +,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x72,0x88,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x62,0xA1,0xFF,0xFF,0xFF,0x00,0x90,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0xAB,0x00,0x01,0x01,0xFF,0x0D,0xA9,0xC9,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF +,0x02,0x0D,0xA1,0xC0,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xA2,0x95,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x6F,0x00,0x00,0x00,0xFF,0x08,0x6A,0x7F +,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x80,0x99,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x7D,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x07,0x00 +,0x01,0x01,0xF1,0x03,0x23,0x2A,0xFE,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x65 +,0x79,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x46,0x98,0xFF,0xFF,0xFF,0x00 +,0x01,0x00,0x01,0x01,0xD3,0x02,0x18,0x1C,0xFE,0x8E,0x0F,0xBF,0xE4,0xFF,0x02 +,0x0E,0xB6,0xD9,0xFF,0x00,0x05,0x06,0xFE,0x00,0x00,0x00,0xC1,0x99,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x4E,0x00,0x00,0x00,0xFF,0x07,0x5B,0x6D,0xFF +,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x06,0x4C,0x5B,0xFF,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x3D,0x87,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x01 +,0x01,0xE6,0x02,0x18,0x1C,0xFE,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x04,0x31,0x3A +,0xFF,0x00,0x01,0x01,0xF7,0x00,0x00,0x00,0x0C,0x84,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xFD,0x05,0x41,0x4E,0xFF,0x90,0x0F,0xBF +,0xE4,0xFF,0x02,0x04,0x32,0x3C,0xFF,0x00,0x01,0x01,0xF8,0x00,0x00,0x00,0x09 +,0xB0,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0xFF,0x06 +,0x49,0x58,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x82,0x9B,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x6B,0xA9,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x51,0x00,0x00,0x00,0xFF,0x08,0x69,0x7D,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02 +,0x0E,0xB2,0xD4,0xFF,0x00,0x04,0x05,0xFE,0x00,0x00,0x00,0xBD,0xA1,0xFF,0xFF +,0xFF,0x00,0x90,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x4B,0x00,0x00,0x00 +,0xFF,0x08,0x61,0x74,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x25,0x2C,0xFF +,0x00,0x01,0x01,0xF3,0x00,0x00,0x00,0x09,0x94,0xFF,0xFF,0xFF,0x00,0x03,0x00 +,0x00,0x00,0x07,0x00,0x01,0x02,0xE4,0x01,0x0F,0x12,0xFE,0x0E,0xB6,0xD9,0xFF +,0x8F,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBD,0xE1,0xFF,0x02,0x15,0x19,0xFD,0x00 +,0x01,0x01,0xE7,0x00,0x00,0x00,0x05,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0x9E,0x00,0x00,0x00,0xFF,0x0C,0x9F,0xBE,0xFF,0x90,0x0F,0xBF,0xE4,0xFF +,0x02,0x0D,0xA9,0xC9,0xFF,0x00,0x01,0x01,0xFF,0x00,0x00,0x00,0xA1,0x98,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x9B,0x00,0x00,0x00,0xFF,0x0E,0xAF,0xD1 +,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x3E,0x4A,0xFF,0x00,0x00,0x00,0xFD +,0x00,0x00,0x00,0x1A,0x98,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x01,0x00 +,0x01,0x01,0xD7,0x01,0x0C,0x0E,0xFD,0x0E,0xB6,0xD9,0xFF,0x8E,0x0F,0xBF,0xE4 +,0xFF,0x02,0x0D,0xA0,0xBF,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x9F,0x88 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x8D,0x00,0x00,0x00,0xFF,0x0C,0x94 +,0xB1,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x72,0x88,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x5A,0x85,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xC8 +,0x01,0x0C,0x0E,0xFE,0x0F,0xBD,0xE1,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x08 +,0x68,0x7C,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x48,0xB1,0xFF,0xFF,0xFF +,0x00,0x01,0x00,0x01,0x01,0xDA,0x02,0x16,0x1B,0xFE,0x90,0x0F,0xBF,0xE4,0xFF +,0x02,0x0E,0xB7,0xDA,0xFF,0x00,0x06,0x07,0xFE,0x00,0x00,0x00,0xBC,0xA9,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x07,0x00,0x01,0x01,0xF1,0x03,0x26,0x2D +,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x3A,0x46,0xFF,0x00,0x00,0x00,0xFD +,0x00,0x00,0x00,0x1A,0xA0,0xFF,0xFF,0xFF,0x00,0x90,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x03,0x00,0x01,0x01,0xE8,0x02,0x19,0x1E,0xFE,0x90,0x0F,0xBF +,0xE4,0xFF,0x02,0x08,0x67,0x7B,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x55 +,0x95,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0xFF,0x08 +,0x61,0x74,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x65,0x79,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x5A,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x43,0x00,0x00,0x00,0xFF,0x07,0x5B,0x6D,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02 +,0x04,0x2E,0x36,0xFF,0x00,0x01,0x02,0xF4,0x00,0x00,0x00,0x09,0x97,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0xFF,0x0A,0x80,0x99,0xFF +,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x7F,0x98,0xFF,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x6F,0x99,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x61,0x00,0x00 +,0x00,0xFF,0x08,0x6A,0x7E,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x24,0x2B +,0xFE,0x00,0x01,0x01,0xEF,0x00,0x00,0x00,0x05,0x87,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xFF,0x06,0x50,0x60,0xFF,0x90,0x0F,0xBF +,0xE4,0xFF,0x02,0x0E,0xB0,0xD2,0xFF,0x00,0x02,0x03,0xFE,0x00,0x00,0x00,0xB1 +,0x85,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0xFF,0x0B +,0x92,0xAE,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x9E,0xBD,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x91,0xB1,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x96,0x00,0x00,0x00,0xFF,0x0D,0xA5,0xC5,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02 +,0x05,0x3A,0x46,0xFF,0x00,0x01,0x01,0xFC,0x00,0x00,0x00,0x11,0xA9,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xFF,0x0D,0xA3,0xC3,0xFF +,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x7F,0x97,0xFF,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x72,0xA0,0xFF,0xFF,0xFF,0x00,0x91,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x8A,0x00,0x00,0x00,0xFF,0x0B,0x91,0xAD,0xFF,0x8F,0x0F,0xBF,0xE4 +,0xFF,0x02,0x0D,0xA9,0xCA,0xFF,0x00,0x01,0x01,0xFF,0x00,0x00,0x00,0xAE,0x95 +,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x04,0x00,0x01,0x01,0xDC,0x01,0x0A +,0x0C,0xFE,0x0E,0xB2,0xD4,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB1,0xD3 +,0xFF,0x00,0x05,0x06,0xFE,0x00,0x00,0x00,0xC8,0x88,0xFF,0xFF,0xFF,0x00,0x03 +,0x00,0x00,0x00,0x02,0x00,0x01,0x01,0xE7,0x02,0x17,0x1C,0xFE,0x0F,0xBE,0xE3 +,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x72,0x88,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x57,0x97,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x1C,0x00 +,0x00,0x00,0xFE,0x05,0x41,0x4E,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB8 +,0xDC,0xFF,0x01,0x08,0x09,0xFD,0x00,0x00,0x00,0xC6,0x99,0xFF,0xFF,0xFF,0x00 +,0x03,0x00,0x00,0x00,0x06,0x00,0x01,0x01,0xE5,0x02,0x14,0x18,0xFD,0x0F,0xBB +,0xE0,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x64,0x77,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x47,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x01,0x01,0xD8 +,0x01,0x0F,0x12,0xFE,0x0F,0xBC,0xE0,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x04 +,0x34,0x3F,0xFF,0x00,0x01,0x01,0xF9,0x00,0x00,0x00,0x0F,0x84,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xFF,0x07,0x5A,0x6B,0xFF,0x90 +,0x0F,0xBF,0xE4,0xFF,0x01,0x02,0x14,0x18,0xFE,0x00,0x01,0x01,0xDA,0xB1,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xFF,0x09,0x73,0x8A +,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x76,0x8D,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x5D,0xA9,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x47,0x00 +,0x00,0x00,0xFF,0x08,0x61,0x74,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB8 +,0xDC,0xFF,0x01,0x09,0x0B,0xFE,0x00,0x01,0x01,0xCE,0xA0,0xFF,0xFF,0xFF,0x00 +,0x91,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x2A,0x00,0x00,0x00,0xFF,0x06 +,0x49,0x57,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x04,0x2E,0x37,0xFF,0x00,0x01 +,0x01,0xF9,0x00,0x00,0x00,0x0F,0x95,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x5A,0x00,0x00,0x00,0xFF,0x07,0x59,0x6A,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02 +,0x06,0x4A,0x59,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x37,0x88,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x8E,0x00,0x00,0x00,0xFF,0x0C,0x94,0xB0,0xFF +,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB2,0xD4,0xFF,0x00,0x03,0x04,0xFE,0x00 +,0x00,0x00,0xB1,0x98,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x01,0xC7,0x01,0x08 +,0x0A,0xFE,0x0F,0xB9,0xDD,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x43,0x50 +,0xFF,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x1E,0x99,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0xFF,0x09,0x79,0x90,0xFF,0x8E,0x0F,0xBF +,0xE4,0xFF,0x02,0x0D,0xA3,0xC2,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x9C +,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x7D,0x00,0x00,0x00,0xFF,0x0B +,0x88,0xA3,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x75,0x8B,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x5E,0x84,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x01,0x00,0x01,0x01,0xEB,0x03,0x22,0x29,0xFE,0x90,0x0F,0xBF,0xE4,0xFF,0x01 +,0x06,0x4B,0x59,0xFF,0x00,0x00,0x00,0xFF,0xA5,0x00,0x01,0x01,0xF9,0x05,0x00 +,0x01,0x01,0xF8,0x00,0x01,0x01,0xDD,0x00,0x00,0x00,0xB5,0x00,0x00,0x00,0x8D +,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x23,0x85,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x13,0x00,0x00,0x00,0xFE,0x05,0x41,0x4E,0xFF,0x90,0x0F,0xBF,0xE4 +,0xFF,0x02,0x0E,0xB0,0xD2,0xFF,0x00,0x02,0x02,0xFE,0x00,0x00,0x00,0xAD,0xA9 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x01,0x01,0xEB,0x02,0x1F +,0x25,0xFE,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x06,0x47,0x55,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x28,0x9F,0xFF,0xFF,0xFF,0x00,0x92,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0xCA,0x01,0x08,0x0A,0xFE,0x0E,0xB7,0xDA,0xFF,0x8F,0x0F +,0xBF,0xE4,0xFF,0x02,0x09,0x72,0x88,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x61,0x95,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x01,0x01,0xD3 +,0x01,0x07,0x08,0xFE,0x0E,0xAD,0xCF,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0C +,0x9C,0xBA,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xA3,0x88,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0xFF,0x06,0x4F,0x5F,0xFF,0x91 +,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x3A,0x45,0xFF,0x00,0x01,0x01,0xFB,0x00,0x00 +,0x00,0x12,0x97,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x74,0x00,0x00,0x00 +,0xFF,0x0A,0x84,0x9D,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x85,0x9F,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x74,0x99,0xFF,0xFF,0xFF,0x00,0x03,0x00 +,0x00,0x00,0x0D,0x00,0x01,0x02,0xF1,0x03,0x20,0x27,0xFE,0x0F,0xBE,0xE3,0xFF +,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x21,0x28,0xFE,0x00,0x01,0x01,0xED,0x00 +,0x00,0x00,0x04,0x87,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x22,0x00,0x00 +,0x00,0xFF,0x05,0x44,0x51,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB2,0xD5 +,0xFF,0x00,0x03,0x04,0xFE,0x00,0x00,0x00,0xB5,0x85,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0xA2,0x00,0x00,0x00,0xFF,0x0D,0xAA,0xCB,0xFF,0x8F,0x0F,0xBF +,0xE4,0xFF,0x00,0x0B,0x8E,0xAA,0xFF,0xA6,0x05,0x3B,0x47,0xFF,0x02,0x04,0x39 +,0x44,0xFF,0x02,0x20,0x26,0xFE,0x00,0x05,0x05,0xFE,0x81,0x00,0x00,0x00,0xFF +,0x01,0x00,0x01,0x01,0xF8,0x00,0x00,0x00,0x6A,0x85,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0xCE,0x01,0x0F,0x12,0xFE,0x0F,0xBE,0xE3,0xFF,0x90,0x0F,0xBF +,0xE4,0xFF,0x02,0x04,0x2F,0x38,0xFF,0x00,0x01,0x01,0xF6,0x00,0x00,0x00,0x09 +,0xA9,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0xFF,0x0C +,0x9D,0xBB,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x8B,0xA6,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x83,0x9F,0xFF,0xFF,0xFF,0x00,0x92,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0xFF,0x09,0x78,0x8F,0xFF,0x8F +,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB1,0xD3,0xFF,0x00,0x03,0x04,0xFE,0x00,0x00 +,0x00,0xBB,0x96,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x4F,0x00,0x00,0x00 +,0xFF,0x06,0x51,0x61,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x2B,0x34,0xFF +,0x00,0x01,0x01,0xF5,0x00,0x00,0x00,0x0B,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x01,0x01,0xDA,0x01,0x0E,0x11,0xFE,0x0F,0xBC,0xE0,0xFF,0x90,0x0F,0xBF,0xE4 +,0xFF,0x02,0x0A,0x7E,0x96,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x67,0x97 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0xFF,0x05,0x46 +,0x53,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x0F,0xBB,0xDF,0xFF,0x01,0x0B,0x0D +,0xFD,0x00,0x00,0x00,0xCB,0x9A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x86 +,0x00,0x00,0x00,0xFF,0x0B,0x87,0xA1,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x08 +,0x61,0x73,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x44,0x88,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0xC7,0x01,0x07,0x09,0xFE,0x0E,0xB8,0xDB,0xFF,0x90 +,0x0F,0xBF,0xE4,0xFF,0x02,0x04,0x37,0x42,0xFF,0x00,0x01,0x01,0xFB,0x00,0x00 +,0x00,0x11,0x84,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x58,0x00,0x00,0x00 +,0xFF,0x09,0x73,0x89,0xFF,0xB9,0x0F,0xBF,0xE4,0xFF,0x05,0x0F,0xBE,0xE2,0xFF +,0x0D,0xA6,0xC6,0xFF,0x0A,0x82,0x9B,0xFF,0x02,0x19,0x1E,0xFE,0x00,0x00,0x00 +,0xFD,0x00,0x00,0x00,0x2E,0x84,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x8B +,0x00,0x00,0x00,0xFF,0x0C,0x9A,0xB8,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x08 +,0x6B,0x80,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x4E,0xA9,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0xFF,0x07,0x5B,0x6C,0xFF,0x90 +,0x0F,0xBF,0xE4,0xFF,0x02,0x0F,0xBD,0xE1,0xFF,0x01,0x12,0x15,0xFE,0x00,0x01 +,0x01,0xDE,0x9F,0xFF,0xFF,0xFF,0x00,0x92,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0x11,0x00,0x01,0x01,0xF9,0x04,0x30,0x39,0xFF,0x90,0x0F,0xBF,0xE4,0xFF +,0x02,0x04,0x38,0x43,0xFF,0x00,0x00,0x01,0xFD,0x00,0x00,0x00,0x18,0x96,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xC9,0x00,0x04,0x05,0xFE,0x0D,0xA8,0xC8 +,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x6F,0x84,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x5A,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x7E,0x00 +,0x00,0x00,0xFF,0x0B,0x88,0xA2,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB8 +,0xDC,0xFF,0x01,0x09,0x0A,0xFE,0x00,0x00,0x00,0xC2,0x98,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0xCC,0x01,0x0A,0x0C,0xFE,0x0F,0xBB,0xDF,0xFF,0x8E,0x0F +,0xBF,0xE4,0xFF,0x02,0x06,0x49,0x57,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x22,0x99,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x18,0x00,0x01,0x01,0xF9 +,0x04,0x2E,0x37,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA0,0xBE,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x98,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0x6C,0x00,0x00,0x00,0xFF,0x0A,0x7C,0x94,0xFF,0x90,0x0F,0xBF,0xE4,0xFF +,0x02,0x09,0x79,0x90,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x63,0x84,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xFD,0x05,0x3B,0x47 +,0xFF,0xBC,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x9A,0xB8,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0xA5,0x84,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x3A,0x00 +,0x00,0x00,0xFF,0x07,0x5B,0x6D,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA7 +,0xC7,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x9F,0xA9,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x01,0x00,0x01,0x01,0xE5,0x02,0x18,0x1D,0xFE,0x91,0x0F +,0xBF,0xE4,0xFF,0x02,0x07,0x54,0x64,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x39,0x9E,0xFF,0xFF,0xFF,0x00,0x93,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0xA9,0x00,0x01,0x01,0xFF,0x0D,0xA6,0xC6,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02 +,0x0A,0x7C,0x94,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x6E,0x96,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0xFF,0x06,0x4A,0x59,0xFF +,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xAF,0xD0,0xFF,0x00,0x02,0x03,0xFE,0x00 +,0x00,0x00,0xB5,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x24,0x00,0x00 +,0x00,0xFF,0x05,0x43,0x50,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x06,0x46,0x54 +,0xFF,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x1E,0x97,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xFF,0x0B,0x88,0xA3,0xFF,0x8E,0x0F,0xBF +,0xE4,0xFF,0x02,0x0B,0x8B,0xA5,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x79 +,0x9A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x9F,0x00,0x00,0x00,0xFF,0x0D +,0xA5,0xC5,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x02,0x1E,0x24,0xFE,0x00,0x01 +,0x01,0xEA,0x00,0x00,0x00,0x03,0x87,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x16,0x00,0x01,0x01,0xFC,0x04,0x39,0x44,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02 +,0x0E,0xB4,0xD7,0xFF,0x00,0x05,0x05,0xFE,0x00,0x00,0x00,0xBA,0x85,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0xC5,0x01,0x07,0x09,0xFE,0x0F,0xBB,0xDF,0xFF +,0xBC,0x0F,0xBF,0xE4,0xFF,0x02,0x04,0x2E,0x36,0xFF,0x00,0x01,0x01,0xF8,0x00 +,0x00,0x00,0x10,0x83,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x01 +,0x01,0xE3,0x02,0x1A,0x1F,0xFE,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x23,0x2A +,0xFE,0x00,0x01,0x01,0xED,0x00,0x00,0x00,0x06,0xA9,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x8D,0x00,0x00,0x00,0xFF,0x0C,0x96,0xB3,0xFF,0x90,0x0F,0xBF +,0xE4,0xFF,0x02,0x0C,0x98,0xB6,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x94 +,0x9E,0xFF,0xFF,0xFF,0x00,0x93,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x49 +,0x00,0x00,0x00,0xFF,0x07,0x5F,0x72,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0E +,0xB7,0xDA,0xFF,0x01,0x07,0x08,0xFE,0x00,0x00,0x01,0xC7,0x97,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0xC6,0x01,0x07,0x08,0xFE,0x0E,0xB5,0xD8,0xFF,0x8F +,0x0F,0xBF,0xE4,0xFF,0x02,0x04,0x36,0x40,0xFF,0x00,0x00,0x01,0xFC,0x00,0x00 +,0x00,0x14,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xC9,0x01,0x07,0x09 +,0xFE,0x0E,0xB7,0xDA,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x8B,0xA5,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x78,0x97,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x25,0x00,0x00,0x00,0xFF,0x06,0x49,0x58,0xFF,0x8E,0x0F,0xBF,0xE4 +,0xFF,0x03,0x0F,0xBD,0xE1,0xFF,0x01,0x0F,0x11,0xFD,0x00,0x01,0x01,0xD6,0x00 +,0x00,0x00,0x01,0x99,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x43,0x00,0x00 +,0x00,0xFF,0x08,0x61,0x74,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x5E,0x70 +,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x41,0x88,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0xB7,0x00,0x03,0x04,0xFE,0x0E,0xB1,0xD3,0xFF,0x90,0x0F,0xBF +,0xE4,0xFF,0x02,0x05,0x3A,0x46,0xFF,0x00,0x01,0x01,0xFC,0x00,0x00,0x00,0x14 +,0x84,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x7B,0x00,0x00,0x00,0xFF,0x0B +,0x8B,0xA6,0xFF,0xBC,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x78,0x8F,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x6A,0x84,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x8E,0x00,0x00,0x00,0xFF,0x0C,0x9A,0xB7,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02 +,0x08,0x68,0x7C,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x5C,0xA9,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xFF,0x07,0x53,0x63,0xFF +,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x02,0x1D,0x22,0xFE,0x00,0x01,0x01,0xEB,0x00 +,0x00,0x00,0x04,0x9D,0xFF,0xFF,0xFF,0x00,0x93,0xFF,0xFF,0xFF,0x00,0x03,0x00 +,0x00,0x00,0x03,0x00,0x01,0x01,0xE6,0x02,0x18,0x1C,0xFE,0x0F,0xBE,0xE3,0xFF +,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x42,0x4F,0xFF,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x22,0x96,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x62,0x00,0x00 +,0x00,0xFF,0x09,0x74,0x8B,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x79,0x90 +,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x6A,0x88,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x6F,0x00,0x00,0x00,0xFF,0x0A,0x7C,0x94,0xFF,0x90,0x0F,0xBF +,0xE4,0xFF,0x02,0x0F,0xBD,0xE1,0xFF,0x01,0x10,0x13,0xFD,0x00,0x01,0x01,0xD3 +,0x98,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x01,0xD2,0x01,0x0D,0x10,0xFD,0x0F +,0xBC,0xE0,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x59,0x6A,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x4B,0x99,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x03,0x00,0x01,0x02,0xE9,0x02,0x1E,0x24,0xFE,0x8E,0x0F,0xBF,0xE4,0xFF,0x02 +,0x0C,0x9D,0xBB,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x95,0x88,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x5C,0x00,0x00,0x00,0xFF,0x09,0x70,0x86,0xFF +,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x7C,0x94,0xFF,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x67,0x84,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x2A,0x00,0x00 +,0x00,0xFF,0x05,0x44,0x51,0xFF,0xBC,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB8,0xDB +,0xFF,0x01,0x09,0x0B,0xFE,0x00,0x01,0x01,0xCE,0x84,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xFF,0x07,0x59,0x6A,0xFF,0x90,0x0F,0xBF +,0xE4,0xFF,0x02,0x0E,0xB2,0xD5,0xFF,0x01,0x07,0x08,0xFE,0x00,0x00,0x00,0xCB +,0xAA,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x01,0x01,0xDD,0x01,0x12,0x15,0xFE,0x0F +,0xBE,0xE2,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x61,0x74,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x49,0x9D,0xFF,0xFF,0xFF,0x00,0x94,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0xFF,0x0B,0x8F,0xAB,0xFF,0x8F +,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x85,0x9F,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x7B,0x96,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x0C,0x00,0x01,0x01 +,0xF5,0x03,0x2B,0x34,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB5,0xD8,0xFF +,0x00,0x06,0x07,0xFE,0x00,0x00,0x00,0xC5,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x17,0x00,0x00,0x01,0xFD,0x04,0x38,0x43,0xFF,0x91,0x0F,0xBF,0xE4 +,0xFF,0x02,0x07,0x53,0x63,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x2D,0x97 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xFF,0x0A,0x7D +,0x95,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xAD,0xCF,0xFF,0x00,0x04,0x05 +,0xFE,0x00,0x00,0x00,0xC4,0x9A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x92 +,0x00,0x00,0x00,0xFF,0x0C,0x9B,0xB9,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x02 +,0x1B,0x20,0xFE,0x00,0x01,0x01,0xE9,0x00,0x00,0x00,0x02,0x87,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x0C,0x00,0x01,0x01,0xF6,0x04,0x2D,0x35,0xFF,0x90 +,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB6,0xD9,0xFF,0x00,0x06,0x07,0xFE,0x00,0x00 +,0x00,0xBE,0x85,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xC2,0x00,0x04,0x05 +,0xFE,0x0E,0xB1,0xD3,0xFF,0xBC,0x0F,0xBF,0xE4,0xFF,0x02,0x06,0x4C,0x5B,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x30,0x83,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x01,0x00,0x01,0x01,0xE2,0x02,0x19,0x1D,0xFE,0x91,0x0F,0xBF,0xE4 +,0xFF,0x02,0x06,0x4E,0x5D,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x3A,0xA9 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xFF,0x0B,0x8E +,0xAA,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA5,0xC5,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0xA4,0x9D,0xFF,0xFF,0xFF,0x00,0x94,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0xFF,0x06,0x46,0x54,0xFF,0x8F,0x0F +,0xBF,0xE4,0xFF,0x02,0x0F,0xBB,0xE0,0xFF,0x01,0x0D,0x0F,0xFE,0x00,0x01,0x01 +,0xD5,0x97,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xFF +,0x0D,0xA3,0xC2,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x40,0x4C,0xFF,0x00 +,0x00,0x00,0xFE,0x00,0x00,0x00,0x20,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0xB9,0x00,0x03,0x04,0xFE,0x0E,0xB0,0xD2,0xFF,0x90,0x0F,0xBF,0xE4,0xFF +,0x02,0x0C,0x97,0xB5,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x88,0x97,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x01,0x01,0xF6,0x03,0x26,0x2E +,0xFE,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x06,0x4C,0x5B,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x3D,0x99,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x39,0x00 +,0x00,0x00,0xFF,0x07,0x58,0x69,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x5B +,0x6C,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x3D,0x88,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0xA6,0x00,0x01,0x01,0xFF,0x0D,0xA8,0xC8,0xFF,0x90,0x0F +,0xBF,0xE4,0xFF,0x02,0x05,0x3D,0x49,0xFF,0x00,0x00,0x00,0xFD,0x00,0x00,0x00 +,0x18,0x84,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x5A,0x00,0x00,0x00,0xFF +,0x08,0x69,0x7D,0xFF,0xBC,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x97,0xB4,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x93,0x84,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0x8C,0x00,0x00,0x00,0xFF,0x0C,0x98,0xB6,0xFF,0x90,0x0F,0xBF,0xE4,0xFF +,0x02,0x0D,0xA0,0xBF,0xFF,0x00,0x01,0x01,0xFF,0x00,0x00,0x00,0xAA,0xA9,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x2B,0x00,0x00,0x00,0xFF,0x06,0x4C,0x5B +,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x2A,0x32,0xFF,0x00,0x01,0x01,0xF5 +,0x00,0x00,0x00,0x0B,0x9C,0xFF,0xFF,0xFF,0x00,0x95,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0xC7,0x01,0x07,0x09,0xFE,0x0E,0xB6,0xD9,0xFF,0x8F,0x0F,0xBF +,0xE4,0xFF,0x02,0x06,0x4C,0x5B,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x2E +,0x96,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0xFF,0x07 +,0x5B,0x6C,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x83,0x9C,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x76,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x5F,0x00,0x00,0x00,0xFF,0x09,0x70,0x86,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02 +,0x02,0x1B,0x20,0xFE,0x00,0x01,0x02,0xE3,0x00,0x00,0x00,0x01,0x97,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0xFF,0x0B,0x91,0xAD,0xFF +,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA4,0xC4,0xFF,0x00,0x01,0x01,0xFF,0x00 +,0x00,0x00,0xB5,0x9A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x01,0x01,0xE0,0x02,0x15 +,0x19,0xFE,0x0F,0xBE,0xE3,0xFF,0x8D,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x9A,0xB7 +,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x91,0x88,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x4C,0x00,0x00,0x00,0xFF,0x08,0x64,0x78,0xFF,0x90,0x0F,0xBF +,0xE4,0xFF,0x02,0x0A,0x7F,0x97,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x6B +,0x84,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x06,0x00,0x01,0x01,0xEB,0x02 +,0x1B,0x20,0xFE,0x0F,0xBE,0xE3,0xFF,0xBC,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x21 +,0x28,0xFE,0x00,0x01,0x01,0xF0,0x00,0x00,0x00,0x06,0x83,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0xFF,0x07,0x58,0x69,0xFF,0x91,0x0F +,0xBF,0xE4,0xFF,0x02,0x04,0x34,0x3F,0xFF,0x00,0x01,0x01,0xFC,0x00,0x00,0x00 +,0x1D,0xA9,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x01,0x01,0xD4,0x01,0x0C,0x0F,0xFE +,0x0F,0xBB,0xE0,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x6E,0x83,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x5A,0x9C,0xFF,0xFF,0xFF,0x00,0x95,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0xFF,0x09,0x76,0x8D,0xFF +,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x8F,0xAB,0xFF,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x87,0x96,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x01 +,0x01,0xDE,0x02,0x13,0x17,0xFE,0x0F,0xBD,0xE1,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF +,0x02,0x0F,0xBB,0xE0,0xFF,0x01,0x09,0x0B,0xFD,0x00,0x00,0x00,0xBF,0x88,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x0D,0x00,0x01,0x01,0xF7,0x03,0x2C,0x35 +,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x5F,0x72,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x3E,0x97,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x23,0x00 +,0x00,0x00,0xFD,0x05,0x3A,0x45,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x40 +,0x4C,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x2F,0x99,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x8A,0x00,0x00,0x00,0xFF,0x0C,0x9D,0xBB,0xFF,0x8E,0x0F +,0xBF,0xE4,0xFF,0x02,0x02,0x19,0x1E,0xFE,0x00,0x01,0x02,0xE6,0x00,0x00,0x00 +,0x01,0x87,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x01,0x01,0xED +,0x03,0x20,0x27,0xFE,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB8,0xDB,0xFF,0x01 +,0x07,0x09,0xFE,0x00,0x00,0x00,0xC2,0x85,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0x89,0x00,0x00,0x00,0xFF,0x0B,0x8E,0xA9,0xFF,0xBC,0x0F,0xBF,0xE4,0xFF +,0x02,0x08,0x64,0x77,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x42,0x84,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x01,0x01,0xDD,0x01,0x0F,0x12,0xFD,0x0F,0xBB,0xDF +,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x88,0xA2,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x88,0xA9,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x7A,0x00 +,0x00,0x00,0xFF,0x0B,0x88,0xA2,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xAF +,0xD0,0xFF,0x00,0x02,0x03,0xFE,0x00,0x00,0x00,0xB5,0x9C,0xFF,0xFF,0xFF,0x00 +,0x95,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x0F,0x00,0x01,0x01,0xF8,0x04 +,0x2E,0x36,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBE,0xE2,0xFF,0x02,0x14 +,0x17,0xFE,0x00,0x01,0x01,0xE1,0x00,0x00,0x00,0x01,0x96,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x7D,0x00,0x00,0x00,0xFF,0x0B,0x89,0xA4,0xFF,0x8F,0x0F +,0xBF,0xE4,0xFF,0x02,0x05,0x3C,0x48,0xFF,0x00,0x01,0x01,0xFB,0x00,0x00,0x00 +,0x0C,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xAA,0x00,0x01,0x01,0xFF +,0x0D,0xA8,0xC8,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA3,0xC3,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x99,0x98,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0xAD,0x00,0x01,0x01,0xFF,0x0D,0xA2,0xC1,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF +,0x02,0x0C,0x99,0xB6,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xA6,0x99,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0xFF,0x08,0x6C,0x81 +,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x58,0x6A,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x34,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x96,0x00 +,0x00,0x00,0xFF,0x0C,0x9D,0xBB,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x41 +,0x4E,0xFF,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x1B,0x84,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0xFE,0x05,0x40,0x4C,0xFF,0xBC,0x0F +,0xBF,0xE4,0xFF,0x02,0x0C,0x97,0xB5,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x87,0x84,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xFF +,0x0A,0x7E,0x96,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBE,0xE3,0xFF,0x02 +,0x1C,0x21,0xFE,0x00,0x01,0x01,0xEE,0x00,0x00,0x00,0x09,0xA8,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0xFF,0x05,0x45,0x52,0xFF,0x91 +,0x0F,0xBF,0xE4,0xFF,0x02,0x04,0x37,0x41,0xFF,0x00,0x01,0x01,0xFC,0x00,0x00 +,0x00,0x15,0x9B,0xFF,0xFF,0xFF,0x00,0x96,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0xA6,0x00,0x00,0x00,0xFF,0x0D,0xA5,0xC5,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF +,0x02,0x07,0x56,0x67,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x3A,0x96,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0xFF,0x06,0x4D,0x5C +,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x70,0x86,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x4F,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x4F,0x00 +,0x00,0x00,0xFF,0x08,0x64,0x78,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x27 +,0x2F,0xFF,0x00,0x01,0x02,0xEF,0x00,0x00,0x00,0x06,0x97,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x3A,0x00,0x00,0x00,0xFF,0x06,0x4C,0x5B,0xFF,0x8F,0x0F +,0xBF,0xE4,0xFF,0x02,0x04,0x33,0x3D,0xFF,0x00,0x00,0x00,0xFD,0x00,0x00,0x00 +,0x23,0x98,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x0C,0x00,0x01,0x01,0xFC +,0x05,0x3B,0x47,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x8B,0xA6,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x68,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0x3B,0x00,0x00,0x00,0xFF,0x07,0x58,0x6A,0xFF,0x90,0x0F,0xBF,0xE4,0xFF +,0x02,0x0A,0x82,0x9B,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x70,0x85,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xB8,0x00,0x03,0x04,0xFE,0x0E,0xAE,0xCF +,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x04,0x0E,0xB6,0xD9,0xFF,0x07,0x5C,0x6E,0xFF +,0x07,0x58,0x69,0xFF,0x07,0x54,0x64,0xFF,0x06,0x50,0x60,0xFF,0x97,0x06,0x4E +,0x5D,0xFF,0x00,0x0A,0x7A,0x92,0xFF,0x8D,0x0F,0xBF,0xE4,0xFF,0x02,0x0F,0xBE +,0xE2,0xFF,0x01,0x0C,0x0E,0xFE,0x00,0x00,0x00,0xCC,0x84,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x15,0x00,0x01,0x01,0xFA,0x04,0x2F,0x38,0xFF,0x91,0x0F +,0xBF,0xE4,0xFF,0x02,0x09,0x6E,0x83,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x66,0xA9,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xC9,0x01,0x09,0x0A,0xFE +,0x0E,0xB8,0xDC,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x7B,0x93,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x6B,0x9B,0xFF,0xFF,0xFF,0x00,0x96,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0xFF,0x07,0x5E,0x70,0xFF +,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x9A,0xB7,0xFF,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x94,0x97,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x01,0x02,0xEA,0x03,0x26 +,0x2E,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA4,0xC4,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x97,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x06 +,0x00,0x01,0x01,0xEF,0x03,0x21,0x27,0xFE,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x08 +,0x6C,0x81,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x4E,0x98,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x01,0xC6,0x00,0x05,0x06,0xFE,0x0E,0xAF,0xD1,0xFF,0x8E +,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x8D,0xA8,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x98,0x99,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xC8,0x01,0x0B,0x0D +,0xFE,0x0F,0xBE,0xE2,0xFF,0x8D,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB1,0xD3,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x9B,0x88,0xFF,0xFF,0xFF,0x00,0x03,0x00 +,0x00,0x00,0x01,0x00,0x01,0x01,0xE0,0x02,0x15,0x19,0xFE,0x0F,0xBE,0xE3,0xFF +,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0F,0xB9,0xDD,0xFF,0x01,0x09,0x0B,0xFE,0x00 +,0x00,0x01,0xC7,0x85,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x50,0x00,0x00 +,0x00,0xFF,0x08,0x64,0x78,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x00,0x04,0x35,0x3F +,0xFF,0x9A,0x00,0x00,0x00,0xFF,0x00,0x02,0x1F,0x26,0xFE,0x8E,0x0F,0xBF,0xE4 +,0xFF,0x02,0x05,0x3F,0x4B,0xFF,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x13,0x84 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xA7,0x00,0x00,0x00,0xFF,0x0D,0xA0 +,0xBF,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB6,0xD9,0xFF,0x01,0x0A,0x0C +,0xFD,0x00,0x01,0x01,0xD5,0xA9,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x71 +,0x00,0x00,0x00,0xFF,0x0A,0x80,0x99,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0E +,0xB7,0xDA,0xFF,0x01,0x07,0x08,0xFE,0x00,0x00,0x00,0xC6,0x9B,0xFF,0xFF,0xFF +,0x00,0x96,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x01,0x01,0xE4 +,0x02,0x16,0x1A,0xFE,0x0F,0xBE,0xE3,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x02 +,0x1D,0x22,0xFE,0x00,0x01,0x02,0xEB,0x00,0x00,0x00,0x03,0x96,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0xB1,0x00,0x04,0x05,0xFE,0x0F,0xBB,0xDF,0xFF,0x8F +,0x0F,0xBF,0xE4,0xFF,0x01,0x02,0x18,0x1D,0xFE,0x00,0x01,0x01,0xE0,0x89,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x9A,0x00,0x00,0x00,0xFF,0x0C,0x9D,0xBB +,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xAD,0xCF,0xFF,0x00,0x02,0x02,0xFE +,0x00,0x00,0x00,0xA9,0x98,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x52,0x00 +,0x00,0x00,0xFF,0x08,0x60,0x72,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x26 +,0x2E,0xFE,0x00,0x01,0x01,0xF9,0x00,0x00,0x00,0x18,0x98,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0xFF,0x0C,0x9A,0xB7,0xFF,0x8E,0x0F +,0xBF,0xE4,0xFF,0x01,0x02,0x16,0x1B,0xFE,0x00,0x00,0x00,0xCD,0x89,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xFF,0x0B,0x91,0xAD,0xFF +,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x44,0x51,0xFF,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x1E,0x84,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x01 +,0x01,0xE5,0x02,0x17,0x1B,0xFD,0x0F,0xBE,0xE2,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF +,0x04,0x0B,0x92,0xAE,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xB7,0x00,0x00 +,0x00,0x1B,0x00,0x00,0x00,0x18,0x95,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x00 +,0x9E,0x00,0x00,0x00,0xFF,0x0D,0xA6,0xC6,0xFF,0x8D,0x0F,0xBF,0xE4,0xFF,0x02 +,0x09,0x72,0x88,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x55,0x84,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0xFF,0x06,0x52,0x62,0xFF +,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x55,0x65,0xFF,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x49,0xA8,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x1B,0x00,0x00 +,0x00,0xFD,0x05,0x3E,0x4A,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x43,0x50 +,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x21,0x9A,0xFF,0xFF,0xFF,0x00,0x97 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xFF,0x0B,0x8D +,0xA8,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x60,0x72,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x47,0x96,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x84 +,0x00,0x00,0x00,0xFF,0x0C,0x9F,0xBE,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x06 +,0x4D,0x5C,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x27,0x88,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0xFF,0x07,0x59,0x6A,0xFF,0x91 +,0x0F,0xBF,0xE4,0xFF,0x02,0x04,0x34,0x3F,0xFF,0x00,0x01,0x01,0xF7,0x00,0x00 +,0x00,0x0D,0x97,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x01,0x01 +,0xDD,0x01,0x0E,0x10,0xFD,0x0E,0xB3,0xD6,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02 +,0x0A,0x80,0x99,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x95,0x98,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0xFF,0x08,0x6A,0x7E,0xFF +,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x3D,0x49,0xFF,0x00,0x01,0x01,0xFA,0x00 +,0x00,0x00,0x06,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x2B,0x00,0x00 +,0x00,0xFF,0x06,0x4C,0x5B,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x85,0x9F +,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x74,0x85,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0xFF,0x0B,0x88,0xA3,0xFF,0x90,0x0F,0xBF +,0xE4,0xFF,0x02,0x04,0x2E,0x37,0xFF,0x00,0x00,0x01,0xFD,0x00,0x00,0x00,0x24 +,0x96,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x4B,0x00,0x00,0x00,0xFF,0x09 +,0x6D,0x82,0xFF,0x8D,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA6,0xC6,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x9A,0x85,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x01,0x01 +,0xD8,0x01,0x0B,0x0D,0xFE,0x0E,0xB8,0xDB,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x03 +,0x0D,0xAA,0xCB,0xFF,0x00,0x06,0x07,0xFE,0x00,0x01,0x01,0xD3,0x00,0x00,0x00 +,0x03,0xA8,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xC0,0x00,0x05,0x06,0xFE +,0x0E,0xB5,0xD8,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x88,0xA2,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x7B,0x9A,0xFF,0xFF,0xFF,0x00,0x97,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0xFF,0x05,0x45,0x52,0xFF +,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA3,0xC3,0xFF,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0xA0,0x96,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x80,0x00,0x00 +,0x00,0xFF,0x0C,0x9B,0xB9,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x82,0x9B +,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x6E,0x88,0xFF,0xFF,0xFF,0x00,0x03 +,0x00,0x00,0x00,0x01,0x00,0x01,0x01,0xE4,0x02,0x16,0x1A,0xFE,0x0F,0xBE,0xE3 +,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x78,0x8F,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x5F,0x98,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x57,0x00 +,0x00,0x00,0xFF,0x06,0x51,0x61,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBE +,0xE3,0xFF,0x04,0x2D,0x35,0xFF,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x32,0x97 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0xFF,0x06,0x4D +,0x5C,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x63,0x76,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x32,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x01,0x01,0xD1 +,0x01,0x0C,0x0F,0xFD,0x0F,0xBB,0xDF,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0F +,0xBB,0xDF,0xFF,0x01,0x0A,0x0C,0xFE,0x00,0x01,0x01,0xCC,0x85,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x1B,0x00,0x01,0x01,0xFC,0x05,0x3B,0x47,0xFF,0x90 +,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x8B,0xA5,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x9C,0x96,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x08,0x00,0x01,0x01 +,0xF6,0x04,0x33,0x3D,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x01,0x02,0x19,0x1E,0xFE +,0x00,0x01,0x01,0xE0,0x85,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x70,0x00 +,0x00,0x00,0xFF,0x09,0x76,0x8D,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x5C +,0x6E,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x66,0xA8,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0xFF,0x0A,0x79,0x91,0xFF,0x90,0x0F +,0xBF,0xE4,0xFF,0x02,0x0F,0xBC,0xE0,0xFF,0x01,0x0E,0x11,0xFE,0x00,0x01,0x01 +,0xD7,0x9A,0xFF,0xFF,0xFF,0x00,0x98,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0xC5,0x01,0x07,0x08,0xFE,0x0E,0xB5,0xD7,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02 +,0x03,0x27,0x2E,0xFF,0x00,0x01,0x02,0xF3,0x00,0x00,0x00,0x08,0x95,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xFF,0x0C,0x9B,0xB9,0xFF +,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB1,0xD3,0xFF,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0xA4,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x8A,0x00,0x00 +,0x00,0xFF,0x0B,0x91,0xAD,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB5,0xD8 +,0xFF,0x00,0x06,0x07,0xFE,0x00,0x00,0x00,0xBA,0x99,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0xBE,0x00,0x02,0x02,0xFE,0x0C,0x9C,0xBA,0xFF,0x8E,0x0F,0xBF +,0xE4,0xFF,0x03,0x0C,0x9D,0xBC,0xFF,0x00,0x02,0x03,0xFE,0x00,0x00,0x00,0xC8 +,0x00,0x00,0x00,0x01,0x96,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x01,0x00 +,0x01,0x01,0xF9,0x04,0x36,0x40,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x88 +,0xA3,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x65,0x89,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xFF,0x0A,0x85,0x9E,0xFF,0x90,0x0F +,0xBF,0xE4,0xFF,0x02,0x06,0x47,0x55,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x22,0x85,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xAE,0x00,0x01,0x01,0xFF +,0x0C,0x9F,0xBE,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x27,0x2E,0xFF,0x00 +,0x01,0x01,0xFB,0x00,0x00,0x00,0x1D,0x96,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0xB0,0x00,0x03,0x04,0xFE,0x0E,0xB5,0xD7,0xFF,0x8D,0x0F,0xBF,0xE4,0xFF +,0x02,0x06,0x4D,0x5C,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x24,0x84,0xFF +,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x11,0x00,0x01,0x01,0xF7,0x03,0x21,0x28 +,0xFE,0x0F,0xBE,0xE3,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x03,0x0E,0xB5,0xD8,0xFF +,0x01,0x0F,0x12,0xFD,0x00,0x01,0x01,0xEA,0x00,0x00,0x00,0x0D,0xA7,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x14,0x00,0x01,0x01,0xFC,0x04,0x37,0x41,0xFF +,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x06,0x50,0x60,0xFF,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x31,0x99,0xFF,0xFF,0xFF,0x00,0x98,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x65,0x00,0x00,0x00,0xFF,0x09,0x74,0x8B,0xFF,0x8F,0x0F,0xBF,0xE4 +,0xFF,0x02,0x08,0x6A,0x7E,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x54,0x95 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x9E,0x00,0x00,0x00,0xFF,0x0D,0xAB +,0xCC,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x01,0x02,0x15,0x19,0xFE,0x00,0x00,0x01 +,0xD4,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0xFF +,0x06,0x4D,0x5C,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x40,0x4D,0xFF,0x00 +,0x00,0x01,0xFD,0x00,0x00,0x00,0x18,0x98,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00 +,0x00,0x2B,0x00,0x01,0x01,0xFC,0x03,0x2C,0x34,0xFF,0x0F,0xBE,0xE3,0xFF,0x8E +,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x56,0x67,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x64,0x97,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x01,0x01,0xDD,0x02,0x1F,0x25 +,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xAF,0xD0,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x97,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x1C,0x00 +,0x00,0x00,0xFE,0x05,0x41,0x4E,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x88 +,0xA3,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x78,0x85,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xFE,0x05,0x3A,0x45,0xFF,0x90,0x0F +,0xBF,0xE4,0xFF,0x02,0x0A,0x83,0x9C,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x93,0x96,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0xFF +,0x0A,0x82,0x9C,0xFF,0x8D,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x81,0x9A,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x69,0x85,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0x8E,0x00,0x00,0x00,0xFF,0x0A,0x80,0x99,0xFF,0x91,0x0F,0xBF,0xE4,0xFF +,0x02,0x09,0x71,0x87,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x87,0xA8,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xB7,0x00,0x02,0x03,0xFE,0x0E,0xB1,0xD3 +,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x94,0xB1,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x8C,0x99,0xFF,0xFF,0xFF,0x00,0x98,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x0E,0x00,0x01,0x01,0xF7,0x03,0x2C,0x35,0xFF,0x8F,0x0F,0xBF +,0xE4,0xFF,0x02,0x0D,0xAC,0xCD,0xFF,0x00,0x01,0x01,0xFF,0x00,0x00,0x00,0xAD +,0x94,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x02,0x02,0xED,0x03 +,0x24,0x2C,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x3A,0x46,0xFF,0x00,0x00 +,0x01,0xFC,0x00,0x00,0x00,0x07,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x01,0x01 +,0xD6,0x01,0x0C,0x0F,0xFE,0x0F,0xBB,0xE0,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02 +,0x0A,0x85,0x9E,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x6F,0x99,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x8E,0x00,0x00,0x00,0xFF,0x09,0x79,0x90,0xFF +,0x8E,0x0F,0xBF,0xE4,0xFF,0x03,0x0E,0xB6,0xD9,0xFF,0x02,0x13,0x17,0xFE,0x00 +,0x01,0x02,0xEE,0x00,0x00,0x00,0x1E,0x96,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00 +,0x00,0xBD,0x01,0x07,0x09,0xFE,0x8F,0x0F,0xBF,0xE4,0xFF,0x01,0x02,0x13,0x17 +,0xFD,0x00,0x00,0x00,0xCA,0x8A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xC0 +,0x00,0x06,0x07,0xFE,0x0E,0xB5,0xD8,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0F +,0xBB,0xE0,0xFF,0x01,0x0D,0x0F,0xFE,0x00,0x01,0x01,0xD0,0x86,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0xA6,0x00,0x00,0x00,0xFF,0x0B,0x91,0xAD,0xFF,0x8F +,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBE,0xE3,0xFF,0x03,0x20,0x26,0xFE,0x00,0x01 +,0x01,0xF8,0x00,0x00,0x00,0x2A,0x95,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x39,0x00,0x00,0x00,0xFF,0x08,0x6A,0x7F,0xFF,0x8D,0x0F,0xBF,0xE4,0xFF,0x02 +,0x0E,0xB2,0xD5,0xFF,0x00,0x01,0x01,0xFF,0x00,0x00,0x00,0xAE,0x85,0xFF,0xFF +,0xFF,0x00,0x03,0x00,0x00,0x00,0x17,0x00,0x01,0x01,0xF6,0x03,0x21,0x28,0xFE +,0x0F,0xBE,0xE3,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBD,0xE1,0xFF,0x03 +,0x20,0x27,0xFE,0x00,0x01,0x01,0xFB,0x00,0x00,0x00,0x31,0xA7,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x5E,0x00,0x00,0x00,0xFF,0x09,0x72,0x88,0xFF,0x91 +,0x0F,0xBF,0xE4,0xFF,0x02,0x02,0x18,0x1D,0xFE,0x00,0x01,0x01,0xE6,0x00,0x00 +,0x00,0x02,0x98,0xFF,0xFF,0xFF,0x00,0x99,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0xA4,0x00,0x00,0x00,0xFF,0x0D,0xA3,0xC3,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF +,0x02,0x04,0x31,0x3A,0xFF,0x00,0x01,0x01,0xF9,0x00,0x00,0x00,0x0F,0x93,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0xFF,0x08,0x61,0x74 +,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x5E,0x71,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x32,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x7B,0x00 +,0x00,0x00,0xFF,0x0A,0x85,0x9F,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBB +,0xDF,0xFF,0x01,0x0C,0x0F,0xFD,0x00,0x01,0x01,0xD1,0x00,0x00,0x00,0x01,0x98 +,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x0E,0x00,0x01,0x02,0xE9,0x01,0x10 +,0x13,0xFD,0x0E,0xB5,0xD7,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x03,0x0A,0x84,0x9D +,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xC8,0x00,0x00,0x00,0x06,0x95,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xA1,0x00,0x00,0x00,0xFF,0x0E,0xB2,0xD5 +,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x3A,0x46,0xFF,0x00,0x01,0x01,0xF8 +,0x00,0x00,0x00,0x04,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x65,0x00 +,0x00,0x00,0xFF,0x09,0x79,0x90,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x06,0x4A +,0x59,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x26,0x85,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x22,0x00,0x01,0x01,0xFA,0x03,0x2A,0x32,0xFE,0x90,0x0F +,0xBF,0xE4,0xFF,0x03,0x0B,0x92,0xAE,0xFF,0x00,0x02,0x03,0xFE,0x00,0x01,0x01 +,0xD6,0x00,0x00,0x00,0x0A,0x94,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x21 +,0x00,0x00,0x00,0xFF,0x07,0x5A,0x6B,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x01,0x03 +,0x28,0x30,0xFF,0x00,0x01,0x01,0xEF,0x86,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0x8B,0x00,0x00,0x00,0xFF,0x0A,0x80,0x99,0xFF,0x91,0x0F,0xBF,0xE4,0xFF +,0x03,0x0C,0x9B,0xB9,0xFF,0x00,0x04,0x04,0xFE,0x00,0x01,0x01,0xD6,0x00,0x00 +,0x00,0x08,0xA6,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x0E,0x00,0x01,0x01 +,0xF8,0x04,0x30,0x39,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x5D,0x6F,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x42,0x98,0xFF,0xFF,0xFF,0x00,0x99,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0xFF,0x07,0x5B,0x6D +,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x74,0x8B,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x60,0x92,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x0C,0x00 +,0x01,0x02,0xE3,0x01,0x0C,0x0E,0xFD,0x0E,0xAF,0xD1,0xFF,0x91,0x0F,0xBF,0xE4 +,0xFF,0x02,0x0A,0x83,0x9C,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x62,0x89 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0xFF,0x05,0x42 +,0x4F,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x5A,0x6B,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x61,0x99,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x5E +,0x00,0x00,0x00,0xFF,0x07,0x54,0x64,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x07 +,0x55,0x66,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x93,0x95,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0xAD,0x00,0x01,0x01,0xFF,0x0F,0xBB,0xDF,0xFF,0x8E +,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x60,0x72,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x2E,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x11,0x00,0x01,0x01 +,0xFA,0x04,0x35,0x3F,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x8B,0xA6,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x7D,0x86,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x91,0x00,0x00,0x00,0xFF,0x0A,0x82,0x9B,0xFF,0x90,0x0F,0xBF,0xE4 +,0xFF,0x02,0x08,0x65,0x79,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xA0,0x94 +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0xFF,0x07,0x53 +,0x63,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x06,0x4D,0x5C,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x11,0x85,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x15 +,0x00,0x01,0x01,0xF5,0x03,0x21,0x28,0xFE,0x0F,0xBE,0xE3,0xFF,0x91,0x0F,0xBF +,0xE4,0xFF,0x02,0x08,0x65,0x79,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x8E +,0xA7,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xAD,0x00,0x01,0x01,0xFF,0x0D +,0xAC,0xCD,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA1,0xC0,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x9C,0x98,0xFF,0xFF,0xFF,0x00,0x99,0xFF,0xFF,0xFF +,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x01,0x01,0xE2,0x02,0x14,0x18,0xFE,0x0F +,0xBE,0xE2,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB2,0xD5,0xFF,0x00,0x04 +,0x05,0xFE,0x00,0x00,0x00,0xBA,0x91,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00 +,0x03,0x00,0x00,0x00,0xA7,0x00,0x00,0x00,0xFF,0x09,0x71,0x87,0xFF,0x92,0x0F +,0xBF,0xE4,0xFF,0x02,0x0D,0xA6,0xC6,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x8F,0x8A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xC6,0x01,0x07,0x08,0xFE +,0x0E,0xB6,0xD9,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x03,0x0E,0xB5,0xD8,0xFF,0x01 +,0x10,0x13,0xFD,0x00,0x01,0x02,0xEB,0x00,0x00,0x00,0x0F,0x98,0xFF,0xFF,0xFF +,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xC4,0x00,0x02,0x03,0xFE,0x0C +,0x9E,0xBD,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBC,0xE0,0xFF,0x04,0x2E +,0x36,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x57,0x94,0xFF,0xFF,0xFF,0x00 +,0x01,0x00,0x00,0x00,0xC9,0x01,0x13,0x16,0xFE,0x8F,0x0F,0xBF,0xE4,0xFF,0x02 +,0x0A,0x7F,0x97,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x59,0x8A,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0xAF,0x00,0x02,0x02,0xFE,0x0E,0xAE,0xCF,0xFF +,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0F,0xBD,0xE1,0xFF,0x01,0x0F,0x12,0xFE,0x00 +,0x01,0x01,0xD5,0x86,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x15,0x00,0x01 +,0x01,0xF3,0x02,0x1C,0x22,0xFD,0x0F,0xBC,0xE0,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF +,0x03,0x0F,0xBE,0xE3,0xFF,0x04,0x36,0x40,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x60,0x93,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x45,0x00,0x00,0x00 +,0xFF,0x09,0x6F,0x84,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x65,0x79,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x31,0x86,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x87,0x00,0x00,0x00,0xFF,0x0A,0x80,0x99,0xFF,0x91,0x0F,0xBF,0xE4 +,0xFF,0x03,0x0F,0xBE,0xE2,0xFF,0x04,0x2D,0x35,0xFF,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x57,0xA6,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x55,0x00,0x00 +,0x00,0xFF,0x08,0x6B,0x80,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x26,0x2D +,0xFE,0x00,0x01,0x01,0xF2,0x00,0x00,0x00,0x09,0x97,0xFF,0xFF,0xFF,0x00,0x9A +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0xFF,0x0B,0x8B +,0xA5,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x3A,0x46,0xFF,0x00,0x00,0x01 +,0xFD,0x00,0x00,0x00,0x17,0x8F,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00,0x0A +,0x00,0x00,0x00,0xA6,0x00,0x00,0x00,0xFF,0x05,0x3F,0x4B,0xFF,0x0F,0xBE,0xE2 +,0xFF,0x92,0x0F,0xBF,0xE4,0xFF,0x02,0x0F,0xBB,0xE0,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0xA7,0x8A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x6B,0x00 +,0x00,0x00,0xFF,0x0A,0x7A,0x92,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x03,0x09,0x73 +,0x8A,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xB4,0x00,0x00,0x00,0x0B,0x98 +,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x30,0x00,0x00,0x01,0xFD,0x03,0x27 +,0x2F,0xFE,0x0F,0xBA,0xDE,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x03,0x0E,0xAC,0xCE +,0xFF,0x01,0x11,0x14,0xFD,0x00,0x01,0x01,0xF7,0x00,0x00,0x00,0x51,0x93,0xFF +,0xFF,0xFF,0x00,0x01,0x00,0x02,0x02,0xE8,0x03,0x2A,0x32,0xFF,0x8F,0x0F,0xBF +,0xE4,0xFF,0x02,0x0A,0x7C,0x94,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x56 +,0x8A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0xFF,0x09 +,0x6D,0x82,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x06,0x4E,0x5D,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x2A,0x86,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x7D,0x00,0x00,0x00,0xFF,0x09,0x72,0x88,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x03 +,0x0E,0xB0,0xD2,0xFF,0x01,0x13,0x17,0xFD,0x00,0x01,0x01,0xF6,0x00,0x00,0x00 +,0x2E,0x92,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x8A,0x00,0x00,0x00,0xFF +,0x0B,0x90,0xAC,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x7C,0x94,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x50,0x86,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00 +,0x00,0x13,0x00,0x01,0x02,0xF4,0x03,0x21,0x28,0xFE,0x0F,0xBE,0xE2,0xFF,0x91 +,0x0F,0xBF,0xE4,0xFF,0x04,0x0D,0xA6,0xC6,0xFF,0x01,0x0D,0x10,0xFD,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x8C,0x00,0x00,0x00,0x04,0xA4,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x09,0x00,0x01,0x01,0xF4,0x03,0x28,0x30,0xFF,0x91,0x0F +,0xBF,0xE4,0xFF,0x02,0x09,0x6E,0x83,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x83,0x97,0xFF,0xFF,0xFF,0x00,0x9A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x24,0x00,0x00,0x00,0xFF,0x05,0x43,0x50,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02 +,0x0A,0x7E,0x96,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x6D,0x8D,0xFF,0xFF +,0xFF,0x00,0x05,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x4C,0x00,0x01,0x02,0xE1 +,0x00,0x00,0x00,0xFF,0x05,0x3F,0x4B,0xFF,0x0F,0xBC,0xE0,0xFF,0x94,0x0F,0xBF +,0xE4,0xFF,0x01,0x01,0x09,0x0B,0xFD,0x00,0x00,0x00,0xBB,0x8A,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x01,0x01,0xFC,0x04,0x36,0x40,0xFF,0x91 +,0x0F,0xBF,0xE4,0xFF,0x04,0x0F,0xBE,0xE2,0xFF,0x06,0x4C,0x5A,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x01,0x01,0xD2,0x00,0x00,0x00,0x48,0x98,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0xFF,0x06,0x4C,0x5A,0xFF,0x8F,0x0F +,0xBF,0xE4,0xFF,0x03,0x0C,0x98,0xB6,0xFF,0x01,0x0F,0x11,0xFD,0x00,0x00,0x00 +,0xFD,0x00,0x00,0x00,0x6D,0x91,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x1D +,0x00,0x00,0x00,0xFD,0x05,0x40,0x4D,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x09 +,0x76,0x8C,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x4D,0x8A,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x08,0x00,0x01,0x01,0xF2,0x03,0x29,0x31,0xFF,0x90 +,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x8E,0xAA,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x81,0x86,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x0B,0x00,0x01,0x01 +,0xE8,0x01,0x11,0x15,0xFD,0x0E,0xB7,0xDA,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x03 +,0x0B,0x91,0xAD,0xFF,0x00,0x02,0x02,0xFE,0x00,0x01,0x01,0xF2,0x00,0x00,0x00 +,0x4B,0x90,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x24,0x00,0x01,0x01,0xF9 +,0x03,0x25,0x2C,0xFE,0x0F,0xBE,0xE3,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x02,0x0C +,0x94,0xB1,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x70,0x87,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0xFF,0x09,0x6D,0x83,0xFF,0x92 +,0x0F,0xBF,0xE4,0xFF,0x08,0x0D,0xA7,0xC7,0xFF,0x03,0x27,0x2F,0xFE,0x00,0x00 +,0x00,0xFF,0x00,0x01,0x01,0xE0,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x3D,0x00 +,0x00,0x00,0x2B,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0x09,0xA0,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0xA4,0x00,0x00,0x00,0xFF,0x0D,0xA6,0xC6,0xFF,0x90 +,0x0F,0xBF,0xE4,0xFF,0x05,0x0E,0xB6,0xD9,0xFF,0x03,0x23,0x2A,0xFE,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x2F,0x00,0x00,0x00,0x0C,0x94 +,0xFF,0xFF,0xFF,0x00,0x9B,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xC2,0x00 +,0x05,0x06,0xFE,0x0E,0xB4,0xD7,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF,0x04,0x0E,0xB8 +,0xDB,0xFF,0x01,0x08,0x0A,0xFE,0x00,0x01,0x01,0xCC,0x00,0x00,0x00,0x22,0x00 +,0x00,0x00,0x04,0x88,0xFF,0xFF,0xFF,0x00,0x07,0x00,0x00,0x00,0x08,0x00,0x00 +,0x00,0x4C,0x00,0x00,0x00,0x9C,0x00,0x01,0x01,0xEA,0x00,0x00,0x00,0xFF,0x01 +,0x09,0x0B,0xFD,0x09,0x70,0x86,0xFF,0x0F,0xBE,0xE3,0xFF,0x95,0x0F,0xBF,0xE4 +,0xFF,0x01,0x02,0x18,0x1D,0xFE,0x00,0x00,0x00,0xD0,0x8B,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0xB6,0x00,0x02,0x03,0xFE,0x0E,0xAF,0xD0,0xFF,0x92,0x0F +,0xBF,0xE4,0xFF,0x07,0x08,0x65,0x79,0xFF,0x00,0x03,0x04,0xFE,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x01,0xC7,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x5C,0x00,0x00 +,0x00,0x43,0x00,0x00,0x00,0x31,0x8C,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00 +,0x1B,0x85,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0xB6 +,0x00,0x00,0x00,0xFF,0x09,0x73,0x8A,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x04,0x0D +,0xA5,0xC5,0xFF,0x02,0x1A,0x1F,0xFE,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x8B +,0x00,0x00,0x00,0x01,0x8F,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xB6,0x00 +,0x00,0x00,0xFF,0x0B,0x8A,0xA5,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x6E +,0x83,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x44,0x8B,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x9F,0x00,0x00,0x00,0xFF,0x0D,0xA4,0xC4,0xFF,0x8F,0x0F +,0xBF,0xE4,0xFF,0x02,0x0F,0xBE,0xE2,0xFF,0x01,0x11,0x14,0xFE,0x00,0x01,0x01 +,0xD9,0x87,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0xFF +,0x08,0x62,0x75,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x04,0x0B,0x8D,0xA8,0xFF,0x01 +,0x0D,0x10,0xFD,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x8D,0x00,0x00,0x00,0x17 +,0x8D,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x38,0x00,0x01,0x01,0xE3,0x00 +,0x00,0x00,0xFF,0x0B,0x90,0xAC,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xAC +,0xCD,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x8F,0x87,0xFF,0xFF,0xFF,0x00 +,0x03,0x00,0x00,0x00,0x0A,0x00,0x01,0x02,0xDE,0x01,0x07,0x09,0xFE,0x0D,0xA7 +,0xC7,0xFF,0x92,0x0F,0xBF,0xE4,0xFF,0x02,0x0F,0xBB,0xDF,0xFF,0x07,0x5F,0x72 +,0xFF,0x02,0x16,0x1A,0xFE,0x84,0x00,0x00,0x00,0xFF,0x01,0x00,0x01,0x01,0xF8 +,0x00,0x01,0x01,0xEA,0x90,0x00,0x01,0x01,0xE9,0x03,0x00,0x01,0x01,0xDA,0x00 +,0x00,0x00,0xA2,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x1F,0x83,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0xB1,0x84,0x00,0x01,0x01,0xE9,0x02,0x00,0x01,0x01 +,0xF3,0x00,0x00,0x00,0xFF,0x08,0x64,0x78,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x01 +,0x0E,0xAE,0xCF,0xFF,0x02,0x1F,0x25,0xFE,0x82,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x01,0x01,0xEF,0x88,0x00,0x01,0x01,0xE9,0x04,0x00,0x01,0x01,0xE8,0x00,0x00 +,0x00,0xD7,0x00,0x00,0x00,0xBA,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x1F,0x85 +,0xFF,0xFF,0xFF,0x00,0x9B,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x62,0x00 +,0x00,0x00,0xFF,0x09,0x72,0x88,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x00,0x05,0x45 +,0x52,0xFF,0x81,0x00,0x00,0x00,0xFF,0x0A,0x00,0x00,0x01,0xFC,0x00,0x01,0x01 +,0xDD,0x00,0x00,0x00,0xB9,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x74,0x00,0x00 +,0x00,0x72,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0xA9,0x00 +,0x00,0x00,0xBD,0x00,0x01,0x01,0xF4,0x81,0x00,0x00,0x00,0xFF,0x02,0x03,0x21 +,0x28,0xFE,0x07,0x5E,0x71,0xFF,0x0D,0xAB,0xCC,0xFF,0x97,0x0F,0xBF,0xE4,0xFF +,0x01,0x03,0x28,0x2F,0xFF,0x00,0x01,0x01,0xE5,0x8B,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x5B,0x00,0x00,0x00,0xFF,0x09,0x6E,0x83,0xFF,0x93,0x0F,0xBF +,0xE4,0xFF,0x02,0x0D,0xA8,0xC8,0xFF,0x06,0x4E,0x5D,0xFF,0x00,0x04,0x05,0xFE +,0x91,0x00,0x00,0x00,0xFF,0x02,0x00,0x01,0x01,0xD0,0x00,0x00,0x00,0x80,0x00 +,0x00,0x00,0x14,0x83,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x11,0x00,0x01 +,0x02,0xDE,0x00,0x04,0x05,0xFE,0x0C,0x97,0xB4,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF +,0x05,0x0E,0xB0,0xD2,0xFF,0x03,0x2A,0x32,0xFF,0x00,0x00,0x00,0xFF,0x00,0x01 +,0x01,0xC8,0x00,0x00,0x00,0x4F,0x00,0x00,0x00,0x01,0x8B,0xFF,0xFF,0xFF,0x00 +,0x03,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0xB3,0x00,0x00,0x00,0xFF,0x05,0x46 +,0x53,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x67,0x7B,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x3B,0x8B,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x44 +,0x00,0x00,0x00,0xFF,0x08,0x61,0x73,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x06 +,0x51,0x61,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x2F,0x86,0xFF,0xFF,0xFF +,0x00,0x03,0x00,0x00,0x00,0x04,0x00,0x01,0x01,0xDA,0x01,0x09,0x0A,0xFD,0x0E +,0xAF,0xD1,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x06,0x0D,0xA8,0xC8,0xFF,0x03,0x28 +,0x30,0xFE,0x00,0x00,0x00,0xFF,0x00,0x01,0x01,0xF8,0x00,0x00,0x00,0x97,0x00 +,0x00,0x00,0x46,0x00,0x00,0x00,0x0C,0x87,0xFF,0xFF,0xFF,0x00,0x05,0x00,0x00 +,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x9A,0x00,0x01,0x01,0xFB,0x00 +,0x05,0x06,0xFE,0x09,0x73,0x8A,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0F,0xBE +,0xE3,0xFF,0x00,0x02,0x02,0xFF,0x00,0x00,0x00,0xAE,0x88,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0xFF,0x04,0x34,0x3E,0xFF,0x94,0x0F +,0xBF,0xE4,0xFF,0x07,0x0F,0xBE,0xE3,0xFF,0x0C,0x93,0xAF,0xFF,0x08,0x67,0x7B +,0xFF,0x07,0x5B,0x6C,0xFF,0x06,0x4E,0x5D,0xFF,0x05,0x41,0x4E,0xFF,0x04,0x35 +,0x3F,0xFF,0x03,0x2B,0x33,0xFF,0x90,0x03,0x29,0x31,0xFF,0x05,0x02,0x1D,0x23 +,0xFE,0x00,0x01,0x01,0xFF,0x00,0x00,0x00,0xFF,0x00,0x01,0x01,0xFA,0x00,0x00 +,0x00,0x91,0x00,0x00,0x00,0x15,0x81,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x76,0x00,0x00,0x00,0xFF,0x02,0x19,0x1E,0xFF,0x84,0x03,0x29,0x31,0xFF,0x00 +,0x06,0x4B,0x59,0xFF,0x92,0x0F,0xBF,0xE4,0xFF,0x04,0x0F,0xBE,0xE3,0xFF,0x0B +,0x8C,0xA7,0xFF,0x07,0x5C,0x6E,0xFF,0x05,0x43,0x50,0xFF,0x04,0x2D,0x36,0xFF +,0x89,0x03,0x29,0x31,0xFF,0x05,0x02,0x1B,0x21,0xFF,0x00,0x06,0x07,0xFE,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x9F,0x00,0x00,0x00,0x0F +,0x83,0xFF,0xFF,0xFF,0x00,0x9B,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x0D +,0x00,0x01,0x01,0xF6,0x03,0x2A,0x32,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x05,0x0D +,0xA6,0xC6,0xFF,0x09,0x6F,0x84,0xFF,0x07,0x55,0x65,0xFF,0x05,0x3B,0x47,0xFF +,0x03,0x21,0x28,0xFF,0x01,0x07,0x09,0xFE,0x85,0x00,0x00,0x00,0xFF,0x03,0x01 +,0x09,0x0B,0xFD,0x03,0x2A,0x33,0xFF,0x08,0x67,0x7B,0xFF,0x0D,0xA5,0xC5,0xFF +,0x9A,0x0F,0xBF,0xE4,0xFF,0x01,0x04,0x36,0x40,0xFF,0x00,0x01,0x01,0xF9,0x8B +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x0C,0x00,0x01,0x01,0xF6,0x03,0x2A +,0x32,0xFF,0x95,0x0F,0xBF,0xE4,0xFF,0x04,0x0E,0xAF,0xD1,0xFF,0x0C,0x93,0xAF +,0xFF,0x0A,0x80,0x99,0xFF,0x09,0x6D,0x83,0xFF,0x08,0x60,0x72,0xFF,0x8C,0x07 +,0x5F,0x72,0xFF,0x04,0x05,0x43,0x50,0xFF,0x01,0x0C,0x0E,0xFE,0x00,0x00,0x00 +,0xFF,0x00,0x01,0x02,0xE8,0x00,0x00,0x00,0x45,0x83,0xFF,0xFF,0xFF,0x00,0x03 +,0x00,0x00,0x00,0x2F,0x00,0x01,0x01,0xF7,0x02,0x14,0x18,0xFD,0x0E,0xAF,0xD0 +,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x08,0x0E,0xB8,0xDC,0xFF,0x07,0x55,0x66,0xFF +,0x01,0x08,0x09,0xFD,0x00,0x00,0x00,0xFF,0x00,0x01,0x01,0xD8,0x00,0x00,0x00 +,0x77,0x00,0x00,0x00,0x4B,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x83,0xFF +,0xFF,0xFF,0x00,0x07,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x1E,0x00,0x00,0x00 +,0x5F,0x00,0x00,0x00,0xA7,0x00,0x01,0x01,0xF6,0x00,0x00,0x00,0xFF,0x05,0x3F +,0x4B,0xFF,0x0E,0xB3,0xD6,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x61,0x73 +,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x32,0x8B,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x03,0x00,0x01,0x02,0xE8,0x02,0x1D,0x22,0xFE,0x90,0x0F,0xBF +,0xE4,0xFF,0x02,0x0B,0x92,0xAE,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x85 +,0x87,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xFF,0x05 +,0x3E,0x4A,0xFF,0x93,0x0F,0xBF,0xE4,0xFF,0x01,0x0B,0x86,0xA0,0xFF,0x03,0x28 +,0x30,0xFF,0x81,0x00,0x00,0x00,0xFF,0x09,0x00,0x00,0x00,0xFD,0x00,0x00,0x00 +,0xCF,0x00,0x00,0x00,0xB5,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0x8C,0x00,0x00 +,0x00,0x86,0x00,0x00,0x00,0x9A,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0xC4,0x00 +,0x01,0x01,0xF2,0x81,0x00,0x00,0x00,0xFF,0x01,0x03,0x25,0x2C,0xFE,0x0C,0x9D +,0xBB,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x0F,0xBD,0xE1,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0xAC,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x9B +,0x00,0x00,0x00,0xFF,0x09,0x76,0x8C,0xFF,0xAD,0x0F,0xBF,0xE4,0xFF,0x09,0x0E +,0xB3,0xD6,0xFF,0x0B,0x87,0xA1,0xFF,0x03,0x2B,0x33,0xFE,0x00,0x00,0x00,0xFF +,0x00,0x01,0x01,0xEB,0x00,0x00,0x00,0x1D,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x23,0x00,0x00,0x00,0xFF,0x06,0x4B,0x59,0xFF,0xA8,0x0F,0xBF,0xE4,0xFF,0x05 +,0x0F,0xBE,0xE3,0xFF,0x0B,0x89,0xA4,0xFF,0x04,0x31,0x3B,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x01,0x01,0xE3,0x00,0x00,0x00,0x2F,0x82,0xFF,0xFF,0xFF,0x00,0x9C +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xA1,0x00,0x00,0x00,0xFF,0x0D,0xA1 +,0xC0,0xFF,0x94,0x0F,0xBF,0xE4,0xFF,0x05,0x0E,0xAE,0xCF,0xFF,0x0C,0x94,0xB1 +,0xFF,0x0C,0x93,0xAF,0xFF,0x0D,0xA0,0xBF,0xFF,0x0E,0xAF,0xD0,0xFF,0x0F,0xBC +,0xE0,0xFF,0x9E,0x0F,0xBF,0xE4,0xFF,0x01,0x04,0x34,0x3E,0xFF,0x00,0x01,0x01 +,0xF7,0x8C,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xA6,0x00,0x00,0x00,0xFF +,0x0D,0xA6,0xC6,0xFF,0xA7,0x0F,0xBF,0xE4,0xFF,0x04,0x0F,0xBC,0xE0,0xFF,0x09 +,0x78,0x8F,0xFF,0x01,0x0B,0x0D,0xFD,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x67 +,0x83,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x5C,0x00,0x00,0x00,0xFF,0x04 +,0x30,0x39,0xFF,0x0F,0xBC,0xE0,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB2 +,0xD4,0xFF,0x08,0x61,0x74,0xFF,0x01,0x0E,0x11,0xFD,0x82,0x00,0x00,0x00,0xFF +,0x05,0x00,0x01,0x01,0xFB,0x00,0x01,0x02,0xF2,0x00,0x02,0x02,0xEB,0x00,0x02 +,0x02,0xE4,0x00,0x02,0x02,0xEF,0x00,0x00,0x00,0xFE,0x82,0x00,0x00,0x00,0xFF +,0x01,0x03,0x23,0x2A,0xFE,0x0B,0x87,0xA1,0xFF,0x92,0x0F,0xBF,0xE4,0xFF,0x02 +,0x07,0x53,0x63,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x28,0x8C,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x8F,0x00,0x00,0x00,0xFF,0x0C,0x99,0xB6,0xFF +,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0F,0xBE,0xE3,0xFF,0x02,0x13,0x17,0xFE,0x00 +,0x01,0x01,0xDD,0x88,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xA9,0x00,0x00 +,0x00,0xFF,0x08,0x6C,0x81,0xFF,0x94,0x0F,0xBF,0xE4,0xFF,0x04,0x0C,0x9B,0xB9 +,0xFF,0x08,0x6C,0x81,0xFF,0x05,0x3D,0x49,0xFF,0x02,0x13,0x17,0xFE,0x00,0x03 +,0x04,0xFE,0x83,0x00,0x00,0x00,0xFF,0x04,0x00,0x05,0x06,0xFE,0x02,0x15,0x19 +,0xFE,0x03,0x2B,0x34,0xFF,0x08,0x64,0x78,0xFF,0x0D,0xA3,0xC2,0xFF,0x93,0x0F +,0xBF,0xE4,0xFF,0x02,0x0E,0xB3,0xD6,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x9F,0x89,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x0F,0x00,0x02,0x02,0xE7 +,0x01,0x0B,0x0D,0xFE,0x0E,0xAC,0xCE,0xFF,0xAF,0x0F,0xBF,0xE4,0xFF,0x07,0x09 +,0x76,0x8C,0xFF,0x00,0x01,0x01,0xFF,0x00,0x01,0x01,0xCB,0x00,0x00,0x00,0x07 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xD0,0x01,0x0E,0x10,0xFD,0x0F,0xBD,0xE1 +,0xFF,0xAA,0x0F,0xBF,0xE4,0xFF,0x03,0x09,0x76,0x8C,0xFF,0x00,0x04,0x05,0xFE +,0x00,0x01,0x01,0xD8,0x00,0x00,0x00,0x09,0x81,0xFF,0xFF,0xFF,0x00,0x9C,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0xFF,0x07,0x59,0x6A +,0xFF,0xB9,0x0F,0xBF,0xE4,0xFF,0x01,0x03,0x24,0x2B,0xFF,0x00,0x01,0x01,0xE3 +,0x8C,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x4C,0x00,0x00,0x00,0xFF,0x08 +,0x62,0x75,0xFF,0xA9,0x0F,0xBF,0xE4,0xFF,0x03,0x0D,0xAA,0xCB,0xFF,0x02,0x16 +,0x1A,0xFE,0x00,0x01,0x01,0xF9,0x00,0x00,0x00,0x32,0x83,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0xFF,0x07,0x55,0x66,0xFF,0x92,0x0F +,0xBF,0xE4,0xFF,0x0C,0x0F,0xB9,0xDD,0xFF,0x0C,0x97,0xB5,0xFF,0x09,0x76,0x8C +,0xFF,0x07,0x54,0x64,0xFF,0x05,0x3B,0x47,0xFF,0x04,0x35,0x3F,0xFF,0x04,0x30 +,0x39,0xFF,0x03,0x2B,0x34,0xFF,0x04,0x32,0x3C,0xFF,0x05,0x40,0x4D,0xFF,0x06 +,0x4F,0x5F,0xFF,0x09,0x76,0x8C,0xFF,0x0D,0xAB,0xCC,0xFF,0x94,0x0F,0xBF,0xE4 +,0xFF,0x02,0x02,0x1E,0x24,0xFE,0x00,0x01,0x01,0xED,0x00,0x00,0x00,0x03,0x8C +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0xFF,0x07,0x55 +,0x65,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x54,0x64,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x33,0x87,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x0D +,0x00,0x01,0x01,0xDB,0x00,0x03,0x04,0xFE,0x0C,0x96,0xB3,0xFF,0x98,0x0F,0xBF +,0xE4,0xFF,0x03,0x0E,0xB7,0xDA,0xFF,0x0D,0xA9,0xCA,0xFF,0x0D,0xA6,0xC6,0xFF +,0x0E,0xB5,0xD8,0xFF,0x98,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA9,0xC9,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x92,0x8A,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00 +,0x00,0x4E,0x00,0x00,0x00,0xFF,0x05,0x3A,0x45,0xFF,0x0F,0xBE,0xE3,0xFF,0xAF +,0x0F,0xBF,0xE4,0xFF,0x06,0x07,0x5B,0x6D,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x9A,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0xFF,0x0B +,0x8E,0xA9,0xFF,0xAB,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x68,0x7C,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x86,0x81,0xFF,0xFF,0xFF,0x00,0x9C,0xFF,0xFF,0xFF +,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x01,0x01,0xE0,0x01,0x12,0x16,0xFD,0x0F +,0xBD,0xE1,0xFF,0xB8,0x0F,0xBF,0xE4,0xFF,0x01,0x02,0x14,0x18,0xFE,0x00,0x00 +,0x00,0xCE,0x8C,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x01,0x01 +,0xED,0x02,0x1E,0x24,0xFE,0xAA,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x97,0xB4,0xFF +,0x00,0x03,0x04,0xFE,0x00,0x00,0x00,0xBB,0x83,0xFF,0xFF,0xFF,0x00,0x03,0x00 +,0x00,0x00,0x05,0x00,0x00,0x01,0xC4,0x00,0x00,0x00,0xFF,0x09,0x6E,0x83,0xFF +,0xB2,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA3,0xC3,0xFF,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x9F,0x8E,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x01,0x01,0xDA,0x01,0x12 +,0x15,0xFE,0x0F,0xBE,0xE2,0xFF,0x8F,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x95,0xB2 +,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x8A,0x88,0xFF,0xFF,0xFF,0x00,0x03 +,0x00,0x00,0x00,0x2F,0x00,0x01,0x01,0xF8,0x02,0x15,0x1A,0xFD,0x0E,0xB2,0xD4 +,0xFF,0xB4,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x9E,0xBD,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x85,0x8B,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xA6,0x00 +,0x00,0x00,0xFF,0x07,0x5A,0x6B,0xFF,0xAF,0x0F,0xBF,0xE4,0xFF,0x06,0x0F,0xBE +,0xE2,0xFF,0x04,0x34,0x3F,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x42,0x00 +,0x00,0x00,0x2B,0x00,0x00,0x00,0xFF,0x06,0x4F,0x5F,0xFF,0xAB,0x0F,0xBF,0xE4 +,0xFF,0x02,0x0F,0xBE,0xE2,0xFF,0x01,0x13,0x16,0xFE,0x00,0x00,0x00,0xCC,0x81 +,0xFF,0xFF,0xFF,0x00,0x9D,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x81,0x00 +,0x00,0x00,0xFF,0x0B,0x88,0xA3,0xFF,0xB8,0x0F,0xBF,0xE4,0xFF,0x01,0x00,0x05 +,0x06,0xFE,0x00,0x00,0x00,0xBB,0x8D,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x97,0x00,0x00,0x00,0xFF,0x0C,0x9A,0xB8,0xFF,0xAA,0x0F,0xBF,0xE4,0xFF,0x02 +,0x05,0x42,0x4F,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x28,0x83,0xFF,0xFF +,0xFF,0x00,0x04,0x00,0x00,0x00,0x19,0x00,0x01,0x02,0xDE,0x00,0x00,0x00,0xFF +,0x07,0x57,0x68,0xFF,0x0F,0xBE,0xE3,0xFF,0xB0,0x0F,0xBF,0xE4,0xFF,0x02,0x08 +,0x68,0x7C,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x4E,0x8E,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0xFF,0x0B,0x8D,0xA8,0xFF,0x8F +,0x0F,0xBF,0xE4,0xFF,0x02,0x0F,0xBE,0xE3,0xFF,0x02,0x16,0x1B,0xFE,0x00,0x01 +,0x01,0xE1,0x89,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x65,0x00,0x00,0x00 +,0xFF,0x04,0x38,0x43,0xFF,0x0F,0xBE,0xE3,0xFF,0xB3,0x0F,0xBF,0xE4,0xFF,0x02 +,0x0C,0x94,0xB0,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x77,0x8B,0xFF,0xFF +,0xFF,0x00,0x03,0x00,0x00,0x00,0x0B,0x00,0x01,0x01,0xCB,0x00,0x00,0x00,0xFF +,0x09,0x70,0x85,0xFF,0xAF,0x0F,0xBF,0xE4,0xFF,0x06,0x0C,0x9B,0xB9,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x94,0xFF,0xFF,0xFF,0x00,0x00,0x01,0x01,0xDA +,0x01,0x11,0x14,0xFD,0x0F,0xBE,0xE2,0xFF,0xAB,0x0F,0xBF,0xE4,0xFF,0x03,0x04 +,0x39,0x44,0xFF,0x00,0x01,0x01,0xF9,0x00,0x00,0x00,0x05,0xFF,0xFF,0xFF,0x00 +,0x9D,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0xFE,0x05 +,0x40,0x4D,0xFF,0xB7,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB2,0xD4,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0xA7,0x8D,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x3C,0x00,0x00,0x00,0xFF,0x07,0x57,0x68,0xFF,0xAA,0x0F,0xBF,0xE4,0xFF,0x02 +,0x0B,0x8E,0xA9,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x8A,0x84,0xFF,0xFF +,0xFF,0x00,0x04,0x00,0x00,0x00,0x14,0x00,0x00,0x01,0xC4,0x00,0x00,0x00,0xFF +,0x05,0x3E,0x4A,0xFF,0x0E,0xB8,0xDC,0xFF,0xAF,0x0F,0xBF,0xE4,0xFF,0x02,0x04 +,0x2D,0x36,0xFF,0x00,0x01,0x01,0xF5,0x00,0x00,0x00,0x09,0x8E,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0xFF,0x06,0x49,0x57,0xFF,0x90 +,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x57,0x68,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x37,0x89,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xA4,0x00,0x00,0x00 +,0xFF,0x08,0x65,0x79,0xFF,0xB3,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x68,0x7C,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x50,0x8C,0xFF,0xFF,0xFF,0x00,0x03,0x00 +,0x00,0x00,0x16,0x00,0x01,0x01,0xDD,0x00,0x01,0x01,0xFF,0x0A,0x84,0x9D,0xFF +,0xAF,0x0F,0xBF,0xE4,0xFF,0x05,0x02,0x15,0x19,0xFE,0x00,0x01,0x01,0xE1,0xFF +,0xFF,0xFF,0x00,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xFF,0x0B,0x92,0xAE,0xFF +,0xAB,0x0F,0xBF,0xE4,0xFF,0x03,0x07,0x5E,0x70,0xFF,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x2F,0xFF,0xFF,0xFF,0x00,0x9E,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0xC0,0x00,0x04,0x05,0xFE,0x0E,0xB2,0xD5,0xFF,0xB6,0x0F,0xBF,0xE4,0xFF +,0x02,0x09,0x72,0x88,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x6A,0x8D,0xFF +,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x01,0x01,0xE1,0x02,0x13,0x17 +,0xFE,0x0F,0xBE,0xE2,0xFF,0x93,0x0F,0xBF,0xE4,0xFF,0x00,0x0E,0xB4,0xD7,0xFF +,0x94,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBE,0xE3,0xFF,0x02,0x17,0x1C,0xFE,0x00 +,0x01,0x01,0xE8,0x00,0x00,0x00,0x04,0x84,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00 +,0x00,0x07,0x00,0x00,0x00,0xA6,0x00,0x00,0x00,0xFF,0x03,0x29,0x31,0xFE,0x0E +,0xAE,0xCF,0xFF,0xAD,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x87,0xA1,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0xA8,0x90,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x01,0x01 +,0xE5,0x03,0x25,0x2D,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x98,0xB6,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x8E,0x89,0xFF,0xFF,0xFF,0x00,0x03,0x00 +,0x00,0x00,0x0B,0x00,0x01,0x01,0xD8,0x00,0x02,0x02,0xFE,0x0B,0x91,0xAD,0xFF +,0xB2,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x21,0x27,0xFE,0x00,0x01,0x01,0xEF,0x00 +,0x00,0x00,0x06,0x8D,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x24,0x00,0x01 +,0x02,0xEC,0x00,0x06,0x07,0xFE,0x0C,0x95,0xB2,0xFF,0xAE,0x0F,0xBF,0xE4,0xFF +,0x05,0x06,0x50,0x60,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x2E,0x00,0x00 +,0x00,0x33,0x00,0x00,0x00,0xFF,0x07,0x53,0x63,0xFF,0xAB,0x0F,0xBF,0xE4,0xFF +,0x03,0x0A,0x82,0x9C,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x60,0xFF,0xFF +,0xFF,0x00,0x9E,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x61,0x00,0x00,0x00 +,0xFF,0x09,0x77,0x8E,0xFF,0xB6,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x28,0x2F,0xFF +,0x00,0x01,0x01,0xF7,0x00,0x00,0x00,0x0F,0x8E,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x87,0x00,0x00,0x00,0xFF,0x0B,0x8F,0xAB,0xFF,0x92,0x0F,0xBF,0xE4 +,0xFF,0x02,0x06,0x4C,0x5A,0xFF,0x00,0x05,0x05,0xFE,0x0C,0x9D,0xBC,0xFF,0x94 +,0x0F,0xBF,0xE4,0xFF,0x02,0x08,0x60,0x72,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x4D,0x86,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x81,0x00,0x00,0x00 +,0xFF,0x01,0x0E,0x10,0xFD,0x0A,0x7E,0x96,0xFF,0xAB,0x0F,0xBF,0xE4,0xFF,0x03 +,0x0E,0xAC,0xCE,0xFF,0x01,0x0E,0x11,0xFD,0x00,0x01,0x02,0xED,0x00,0x00,0x00 +,0x1B,0x90,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x01,0x01,0xE8,0x03,0x2C,0x35,0xFF +,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x02,0x19,0x1E,0xFE,0x00,0x01,0x02,0xE5,0x00 +,0x00,0x00,0x01,0x89,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x2B,0x00,0x01 +,0x01,0xF6,0x01,0x12,0x15,0xFE,0x0D,0xAC,0xCD,0xFF,0xB0,0x0F,0xBF,0xE4,0xFF +,0x02,0x0C,0x9A,0xB8,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x9A,0x8F,0xFF +,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x35,0x00,0x01,0x01,0xF5,0x01,0x0D,0x10 +,0xFD,0x0B,0x8B,0xA6,0xFF,0xAD,0x0F,0xBF,0xE4,0xFF,0x06,0x0B,0x8B,0xA5,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x7A,0xFF,0xFF,0xFF,0x00,0x00,0x01,0x01 +,0xE1,0x02,0x15,0x19,0xFE,0x0F,0xBE,0xE3,0xFF,0xAA,0x0F,0xBF,0xE4,0xFF,0x03 +,0x0D,0xA7,0xC7,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x91,0xFF,0xFF,0xFF +,0x00,0x9E,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0xFF +,0x06,0x51,0x61,0xFF,0xB5,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x9D,0xBB,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0xA2,0x8F,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0x2C,0x00,0x00,0x00,0xFF,0x06,0x4C,0x5A,0xFF,0x92,0x0F,0xBF,0xE4,0xFF +,0x03,0x05,0x40,0x4C,0xFF,0x00,0x00,0x00,0xFF,0x03,0x28,0x30,0xFE,0x0F,0xBE +,0xE2,0xFF,0x93,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA8,0xC8,0xFF,0x00,0x01,0x01 +,0xFF,0x00,0x00,0x00,0xAE,0x87,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00,0x4D +,0x00,0x01,0x02,0xE9,0x00,0x00,0x00,0xFF,0x05,0x3D,0x49,0xFF,0x0E,0xAF,0xD0 +,0xFF,0xA8,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBE,0xE3,0xFF,0x04,0x33,0x3C,0xFE +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x4B,0x91,0xFF,0xFF,0xFF,0x00,0x01,0x00 +,0x01,0x01,0xEF,0x04,0x32,0x3C,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x5A +,0x6B,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x3C,0x8A,0xFF,0xFF,0xFF,0x00 +,0x03,0x00,0x00,0x00,0x5F,0x00,0x00,0x00,0xFF,0x02,0x18,0x1D,0xFD,0x0D,0xA5 +,0xC5,0xFF,0xAF,0x0F,0xBF,0xE4,0xFF,0x02,0x07,0x54,0x64,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x3E,0x90,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00,0x47 +,0x00,0x01,0x02,0xF1,0x00,0x01,0x01,0xFF,0x07,0x55,0x65,0xFF,0x0F,0xBA,0xDE +,0xFF,0xAB,0x0F,0xBF,0xE4,0xFF,0x06,0x0F,0xBB,0xDF,0xFF,0x01,0x09,0x0A,0xFE +,0x00,0x00,0x00,0xC7,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x8E,0x00,0x00,0x00 +,0xFF,0x0C,0x97,0xB4,0xFF,0xAB,0x0F,0xBF,0xE4,0xFF,0x02,0x01,0x0B,0x0D,0xFD +,0x00,0x00,0x00,0xC3,0xFF,0xFF,0xFF,0x00,0x9F,0xFF,0xFF,0xFF,0x00,0x01,0x00 +,0x01,0x01,0xF1,0x04,0x30,0x39,0xFF,0xB5,0x0F,0xBF,0xE4,0xFF,0x02,0x06,0x4B +,0x59,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x3E,0x90,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x01,0xD4,0x01,0x0F,0x11,0xFD,0x0F,0xBD,0xE1,0xFF,0x91,0x0F +,0xBF,0xE4,0xFF,0x00,0x07,0x59,0x6A,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0x08 +,0x6B,0x80,0xFF,0x94,0x0F,0xBF,0xE4,0xFF,0x02,0x04,0x32,0x3C,0xFF,0x00,0x01 +,0x01,0xFB,0x00,0x00,0x00,0x15,0x87,0xFF,0xFF,0xFF,0x00,0x05,0x00,0x00,0x00 +,0x12,0x00,0x00,0x00,0xA7,0x00,0x00,0x00,0xFF,0x01,0x0E,0x11,0xFD,0x09,0x6E +,0x83,0xFF,0x0E,0xB7,0xDA,0xFF,0xA5,0x0F,0xBF,0xE4,0xFF,0x03,0x0E,0xAE,0xCF +,0xFF,0x04,0x37,0x41,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x8F,0x91,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0xFF,0x06,0x4B,0x59 +,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x97,0xB5,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x82,0x8B,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x63,0x00 +,0x00,0x01,0xFD,0x01,0x10,0x13,0xFD,0x0C,0x9C,0xBA,0xFF,0xAD,0x0F,0xBF,0xE4 +,0xFF,0x03,0x0D,0xA5,0xC5,0xFF,0x01,0x0B,0x0D,0xFD,0x00,0x01,0x01,0xE1,0x00 +,0x00,0x00,0x01,0x91,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00,0x1E,0x00,0x00 +,0x01,0xC3,0x00,0x00,0x00,0xFF,0x03,0x22,0x29,0xFE,0x0C,0x9F,0xBE,0xFF,0xAB +,0x0F,0xBF,0xE4,0xFF,0x05,0x05,0x40,0x4C,0xFF,0x00,0x00,0x00,0xFD,0x00,0x00 +,0x00,0x16,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xFF,0x07,0x58,0x69,0xFF,0xAB +,0x0F,0xBF,0xE4,0xFF,0x02,0x04,0x30,0x39,0xFF,0x00,0x01,0x01,0xF3,0x00,0x00 +,0x00,0x01,0x9F,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x01,0x01,0xEC,0x04,0x31,0x3B +,0xFF,0xB4,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x7C,0x94,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x01,0x01,0xCA,0x91,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x80,0x00 +,0x00,0x00,0xFF,0x0B,0x90,0xAC,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x04,0x09,0x72 +,0x88,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFE,0x01,0x07,0x08,0xFD,0x0D +,0xA8,0xC8,0xFF,0x93,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x7C,0x94,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x72,0x89,0xFF,0xFF,0xFF,0x00,0x05,0x00,0x00,0x00 +,0x53,0x00,0x01,0x02,0xEB,0x00,0x00,0x00,0xFF,0x01,0x0C,0x0E,0xFE,0x07,0x5B +,0x6C,0xFF,0x0D,0xAC,0xCD,0xFF,0xA2,0x0F,0xBF,0xE4,0xFF,0x04,0x0B,0x86,0xA0 +,0xFF,0x01,0x0F,0x12,0xFD,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xA4,0x00,0x00 +,0x00,0x06,0x91,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x67,0x00,0x00,0x00 +,0xFF,0x0A,0x7F,0x98,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x0D,0xA1,0xC0,0xFF +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x83,0x8C,0xFF,0xFF,0xFF,0x00,0x04,0x00 +,0x00,0x00,0x50,0x00,0x01,0x01,0xF9,0x01,0x09,0x0B,0xFD,0x09,0x76,0x8D,0xFF +,0x0F,0xBE,0xE3,0xFF,0xAA,0x0F,0xBF,0xE4,0xFF,0x03,0x0E,0xB2,0xD5,0xFF,0x02 +,0x1F,0x25,0xFE,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x4B,0x93,0xFF,0xFF,0xFF +,0x00,0x05,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x7F,0x00,0x00,0x01,0xFD,0x00 +,0x05,0x06,0xFE,0x08,0x66,0x7A,0xFF,0x0E,0xB1,0xD3,0xFF,0xA9,0x0F,0xBF,0xE4 +,0xFF,0x05,0x0A,0x7A,0x92,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x61,0x00 +,0x00,0x00,0x02,0x00,0x01,0x01,0xE8,0x02,0x19,0x1E,0xFE,0xAB,0x0F,0xBF,0xE4 +,0xFF,0x02,0x07,0x55,0x65,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x25,0x9E +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0xFE,0x05,0x3E +,0x4A,0xFF,0xB3,0x0F,0xBF,0xE4,0xFF,0x03,0x08,0x6A,0x7F,0xFF,0x00,0x03,0x04 +,0xFE,0x00,0x01,0x02,0xE7,0x00,0x00,0x00,0x1B,0x91,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x2E,0x00,0x00,0x00,0xFF,0x07,0x53,0x63,0xFF,0x91,0x0F,0xBF +,0xE4,0xFF,0x04,0x09,0x79,0x90,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x98 +,0x00,0x00,0x00,0xFE,0x04,0x36,0x40,0xFF,0x93,0x0F,0xBF,0xE4,0xFF,0x02,0x0F +,0xB9,0xDD,0xFF,0x01,0x0B,0x0D,0xFE,0x00,0x01,0x01,0xD4,0x8A,0xFF,0xFF,0xFF +,0x00,0x06,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0x69,0x00,0x01,0x01,0xDB,0x00 +,0x00,0x00,0xFF,0x00,0x03,0x04,0xFE,0x05,0x46,0x53,0xFF,0x0C,0x9B,0xB9,0xFF +,0x9D,0x0F,0xBF,0xE4,0xFF,0x05,0x0F,0xBE,0xE3,0xFF,0x0B,0x8B,0xA6,0xFF,0x05 +,0x3F,0x4B,0xFF,0x00,0x00,0x00,0xFF,0x00,0x01,0x02,0xEF,0x00,0x00,0x00,0x56 +,0x93,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xB2,0x00,0x01,0x01,0xFF,0x0E +,0xB2,0xD4,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x0B,0x87,0xA1,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x6E,0x8D,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00 +,0x3F,0x00,0x01,0x02,0xE8,0x00,0x00,0x00,0xFF,0x03,0x2C,0x34,0xFE,0x0C,0x9B +,0xB9,0xFF,0xA8,0x0F,0xBF,0xE4,0xFF,0x03,0x0B,0x88,0xA2,0xFF,0x01,0x13,0x17 +,0xFD,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x76,0x96,0xFF,0xFF,0xFF,0x00,0x06 +,0x00,0x00,0x00,0x3B,0x00,0x01,0x01,0xE1,0x00,0x00,0x00,0xFF,0x00,0x03,0x04 +,0xFE,0x05,0x3B,0x47,0xFF,0x0A,0x81,0x9A,0xFF,0x0F,0xBA,0xDE,0xFF,0xA6,0x0F +,0xBF,0xE4,0xFF,0x07,0x0E,0xB2,0xD4,0xFF,0x00,0x02,0x02,0xFE,0x00,0x00,0x00 +,0xAE,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0xFF,0x0B,0x8E +,0xAA,0xFF,0x0F,0xBB,0xDF,0xFF,0xA9,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x79,0x90 +,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x56,0x9D,0xFF,0xFF,0xFF,0x00,0x03 +,0x00,0x00,0x00,0x05,0x00,0x01,0x01,0xD2,0x00,0x02,0x02,0xFE,0x0C,0x97,0xB5 +,0xFF,0xB0,0x0F,0xBF,0xE4,0xFF,0x05,0x0E,0xB8,0xDC,0xFF,0x0A,0x7B,0x93,0xFF +,0x04,0x2D,0x35,0xFF,0x00,0x00,0x00,0xFF,0x00,0x01,0x01,0xD8,0x00,0x00,0x00 +,0x2C,0x92,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0xFF +,0x06,0x49,0x57,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x06,0x07,0x58,0x6A,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x9A,0x00,0x00,0x00,0xFF +,0x06,0x49,0x58,0xFF,0x0F,0xBC,0xE0,0xFF,0x92,0x0F,0xBF,0xE4,0xFF,0x02,0x06 +,0x4E,0x5D,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x35,0x8B,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x4E,0x00,0x00,0x00,0xC1,0x81 +,0x00,0x00,0x00,0xFF,0x02,0x04,0x31,0x3B,0xFF,0x0B,0x86,0xA0,0xFF,0x0F,0xBA +,0xDE,0xFF,0x97,0x0F,0xBF,0xE4,0xFF,0x03,0x0F,0xBE,0xE2,0xFF,0x0D,0xA0,0xBF +,0xFF,0x08,0x60,0x72,0xFF,0x02,0x16,0x1B,0xFE,0x81,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xB6,0x00,0x00,0x00,0x1A,0x93,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x0E,0x00,0x01,0x01,0xF9,0x04,0x31,0x3A,0xFF,0x91,0x0F,0xBF,0xE4 +,0xFF,0x03,0x0F,0xBB,0xDF,0xFF,0x04,0x31,0x3B,0xFF,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x1F,0x8E,0xFF,0xFF,0xFF,0x00,0x07,0x00,0x00,0x00,0x0D,0x00,0x00 +,0x00,0x8B,0x00,0x01,0x01,0xFB,0x00,0x00,0x00,0xFF,0x02,0x1C,0x21,0xFE,0x06 +,0x52,0x62,0xFF,0x0B,0x88,0xA2,0xFF,0x0E,0xB8,0xDC,0xFF,0x9F,0x0F,0xBF,0xE4 +,0xFF,0x07,0x0F,0xBE,0xE3,0xFF,0x0D,0xAB,0xCC,0xFF,0x0A,0x84,0x9D,0xFF,0x06 +,0x4D,0x5C,0xFF,0x02,0x15,0x19,0xFE,0x00,0x00,0x00,0xFF,0x00,0x01,0x02,0xF1 +,0x00,0x00,0x00,0x5B,0x98,0xFF,0xFF,0xFF,0x00,0x07,0x00,0x00,0x00,0x0B,0x00 +,0x00,0x00,0x5C,0x00,0x00,0x00,0xB8,0x00,0x00,0x01,0xFD,0x00,0x00,0x00,0xFF +,0x01,0x0C,0x0E,0xFD,0x06,0x4D,0x5C,0xFF,0x0C,0x93,0xAF,0xFF,0xA5,0x0F,0xBF +,0xE4,0xFF,0x03,0x04,0x2F,0x38,0xFF,0x00,0x01,0x01,0xF5,0x00,0x00,0x00,0x07 +,0x00,0x00,0x00,0x44,0x82,0x00,0x00,0x00,0xFF,0x05,0x01,0x0A,0x0C,0xFE,0x02 +,0x1B,0x20,0xFF,0x05,0x3A,0x45,0xFF,0x08,0x69,0x7D,0xFF,0x0C,0x98,0xB6,0xFF +,0x0F,0xBD,0xE1,0xFF,0xA3,0x0F,0xBF,0xE4,0xFF,0x02,0x0C,0x9D,0xBC,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x87,0x9C,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00 +,0x00,0x10,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xFF,0x07,0x56,0x67,0xFF,0xAD +,0x0F,0xBF,0xE4,0xFF,0x08,0x0F,0xBC,0xE0,0xFF,0x0D,0xA6,0xC6,0xFF,0x0B,0x8A +,0xA5,0xFF,0x06,0x4C,0x5B,0xFF,0x01,0x09,0x0B,0xFE,0x00,0x00,0x00,0xFF,0x00 +,0x01,0x01,0xFB,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x0A,0x93,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0xFF,0x09,0x76,0x8C,0xFF,0x90 +,0x0F,0xBF,0xE4,0xFF,0x08,0x0C,0x9A,0xB8,0xFF,0x01,0x0A,0x0C,0xFD,0x00,0x01 +,0x01,0xEA,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x0B,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0xFF,0x03,0x28,0x30,0xFE,0x0B,0x91,0xAD,0xFF,0x91,0x0F,0xBF,0xE4 +,0xFF,0x02,0x0C,0x97,0xB5,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x96,0x8E +,0xFF,0xFF,0xFF,0x00,0x08,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0xA5,0x00,0x01 +,0x01,0xFC,0x00,0x00,0x00,0xFF,0x00,0x04,0x05,0xFE,0x03,0x2A,0x32,0xFF,0x07 +,0x55,0x66,0xFF,0x0A,0x80,0x99,0xFF,0x0D,0xAB,0xCC,0xFF,0x8C,0x0F,0xBF,0xE4 +,0xFF,0x07,0x0F,0xBB,0xE0,0xFF,0x0D,0xAC,0xCD,0xFF,0x0C,0x9B,0xB9,0xFF,0x0B +,0x8B,0xA5,0xFF,0x09,0x76,0x8C,0xFF,0x06,0x51,0x61,0xFF,0x03,0x2C,0x35,0xFF +,0x01,0x07,0x09,0xFE,0x81,0x00,0x00,0x00,0xFF,0x02,0x00,0x01,0x01,0xE5,0x00 +,0x00,0x00,0x88,0x00,0x00,0x00,0x2A,0x94,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00 +,0x00,0x04,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0xFF,0x06,0x52,0x61,0xFF,0x8F +,0x0C,0x95,0xB2,0xFF,0x04,0x0B,0x8C,0xA7,0xFF,0x08,0x6C,0x81,0xFF,0x03,0x29 +,0x31,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xB0,0x91,0xFF,0xFF,0xFF,0x00 +,0x02,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x96,0x00,0x01,0x01,0xE1,0x81,0x00 +,0x00,0x00,0xFF,0x0E,0x00,0x02,0x02,0xFE,0x02,0x18,0x1C,0xFD,0x04,0x34,0x3E +,0xFF,0x06,0x4E,0x5D,0xFF,0x08,0x68,0x7C,0xFF,0x0A,0x7D,0x95,0xFF,0x0A,0x85 +,0x9F,0xFF,0x0B,0x8D,0xA8,0xFF,0x0C,0x94,0xB0,0xFF,0x0C,0x9B,0xB9,0xFF,0x0D +,0xA2,0xC1,0xFF,0x0D,0xA9,0xCA,0xFF,0x0E,0xB0,0xD2,0xFF,0x0E,0xB8,0xDB,0xFF +,0x0F,0xBE,0xE3,0xFF,0x84,0x0F,0xBF,0xE4,0xFF,0x0D,0x0F,0xBE,0xE2,0xFF,0x0E +,0xB4,0xD7,0xFF,0x0D,0xAA,0xCB,0xFF,0x0D,0xA0,0xBE,0xFF,0x0C,0x96,0xB3,0xFF +,0x0B,0x8B,0xA6,0xFF,0x0A,0x82,0x9B,0xFF,0x09,0x77,0x8E,0xFF,0x09,0x6D,0x82 +,0xFF,0x08,0x63,0x76,0xFF,0x07,0x55,0x66,0xFF,0x05,0x3C,0x48,0xFF,0x03,0x21 +,0x27,0xFE,0x00,0x06,0x07,0xFE,0x82,0x00,0x00,0x00,0xFF,0x02,0x00,0x01,0x01 +,0xD7,0x00,0x00,0x00,0x8D,0x00,0x00,0x00,0x1D,0x9C,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x71,0x00,0x01,0x01,0xCE,0x81,0x00,0x00 +,0x00,0xFF,0x04,0x02,0x19,0x1D,0xFE,0x06,0x4E,0x5D,0xFF,0x09,0x70,0x85,0xFF +,0x0B,0x91,0xAD,0xFF,0x0E,0xB2,0xD5,0xFF,0xA0,0x0F,0xBF,0xE4,0xFF,0x09,0x08 +,0x6A,0x7E,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x03 +,0x00,0x00,0x00,0x7D,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0xA8,0x00,0x00,0x00 +,0xBD,0x00,0x00,0x00,0xD3,0x00,0x00,0x01,0xFC,0x81,0x00,0x00,0x00,0xFF,0x02 +,0x01,0x09,0x0B,0xFE,0x06,0x4A,0x59,0xFF,0x0D,0xA0,0xBF,0xFF,0xA1,0x0F,0xBF +,0xE4,0xFF,0x02,0x0F,0xBC,0xE0,0xFF,0x00,0x05,0x05,0xFE,0x00,0x00,0x00,0xB9 +,0x9B,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0xB2,0x00,0x01,0x01,0xFA,0x81 +,0x00,0x00,0x00,0xFF,0x00,0x03,0x28,0x30,0xFF,0xAB,0x04,0x2F,0x38,0xFF,0x02 +,0x04,0x2E,0x37,0xFF,0x02,0x18,0x1D,0xFE,0x00,0x02,0x03,0xFE,0x82,0x00,0x00 +,0x00,0xFF,0x02,0x00,0x00,0x00,0xCD,0x00,0x00,0x00,0x6E,0x00,0x00,0x00,0x14 +,0x94,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x8C,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0xFF,0x05,0x3D,0x49,0xFF,0x8D,0x06,0x47,0x55,0xFF,0x05,0x06,0x46 +,0x54,0xFF,0x04,0x2E,0x37,0xFF,0x01,0x0A,0x0C,0xFE,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0xFD,0x00,0x00,0x00,0x43,0x81,0xFF,0xFF,0xFF,0x00,0x05,0x00,0x00 +,0x00,0x04,0x00,0x00,0x00,0x8C,0x00,0x01,0x01,0xFA,0x00,0x00,0x00,0xFF,0x01 +,0x12,0x16,0xFD,0x05,0x41,0x4E,0xFF,0x90,0x06,0x47,0x55,0xFF,0x02,0x00,0x04 +,0x04,0xFF,0x00,0x01,0x01,0xF0,0x00,0x00,0x00,0x08,0x8F,0xFF,0xFF,0xFF,0x00 +,0x03,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x7A,0x00,0x00,0x00,0xB5,0x00,0x01 +,0x01,0xEE,0x82,0x00,0x00,0x00,0xFF,0x0C,0x02,0x15,0x19,0xFE,0x04,0x34,0x3F +,0xFF,0x05,0x42,0x4F,0xFF,0x06,0x4F,0x5E,0xFF,0x07,0x5B,0x6D,0xFF,0x08,0x67 +,0x7B,0xFF,0x08,0x67,0x7A,0xFF,0x07,0x5D,0x6F,0xFF,0x06,0x4E,0x5D,0xFF,0x05 +,0x3D,0x49,0xFF,0x04,0x2D,0x36,0xFF,0x02,0x1C,0x22,0xFF,0x01,0x0B,0x0D,0xFE +,0x85,0x00,0x00,0x00,0xFF,0x04,0x00,0x01,0x02,0xED,0x00,0x00,0x00,0xB9,0x00 +,0x00,0x00,0x86,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x02,0x95,0xFF,0xFF,0xFF +,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xAB,0x95,0x00,0x00,0x00,0xFF +,0x01,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x04,0x94,0xFF,0xFF,0xFF,0x00,0x04 +,0x00,0x00,0x00,0x2B,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xAA,0x00,0x00,0x00 +,0xCE,0x00,0x01,0x01,0xF2,0x8B,0x00,0x00,0x00,0xFF,0x05,0x00,0x05,0x06,0xFE +,0x01,0x0C,0x0F,0xFD,0x02,0x13,0x17,0xFE,0x01,0x12,0x15,0xFE,0x01,0x08,0x0A +,0xFE,0x00,0x01,0x01,0xFF,0x89,0x00,0x00,0x00,0xFF,0x05,0x00,0x00,0x00,0xFD +,0x00,0x01,0x01,0xDF,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x92,0x00,0x00,0x00 +,0x67,0x00,0x00,0x00,0x20,0xA2,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x29 +,0x00,0x00,0x00,0x85,0x00,0x01,0x01,0xDF,0x83,0x00,0x00,0x00,0xFF,0x03,0x00 +,0x06,0x07,0xFE,0x01,0x11,0x14,0xFE,0x02,0x1D,0x23,0xFF,0x03,0x28,0x30,0xFF +,0x9C,0x04,0x2F,0x38,0xFF,0x02,0x03,0x23,0x2A,0xFF,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x95,0x85,0xFF,0xFF,0xFF,0x00,0x07,0x00,0x00,0x00,0x0B,0x00,0x00 +,0x00,0x46,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xC9,0x00,0x00,0x00,0xFF,0x00 +,0x01,0x01,0xFF,0x04,0x38,0x43,0xFF,0x0B,0x8F,0xAB,0xFF,0x8E,0x0F,0xBF,0xE4 +,0xFF,0x00,0x05,0x3D,0x48,0xFF,0x90,0x04,0x2F,0x38,0xFF,0x01,0x00,0x06,0x07 +,0xFF,0x00,0x01,0x01,0xEB,0x9B,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x04,0x04,0xB3 +,0xAF,0x00,0x02,0x02,0xEA,0x05,0x00,0x02,0x02,0xE8,0x00,0x00,0x00,0xCD,0x00 +,0x00,0x00,0xAC,0x00,0x00,0x00,0x8B,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x2C +,0x97,0xFF,0xFF,0xFF,0x00,0x00,0x01,0x06,0x08,0x97,0x91,0x00,0x00,0x00,0xFF +,0x03,0x00,0x01,0x01,0xF3,0x00,0x00,0x00,0xC4,0x00,0x00,0x00,0x95,0x00,0x00 +,0x00,0x4F,0x84,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x00,0x00 +,0x86,0x00,0x01,0x01,0xD3,0x93,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x5B +,0x92,0xFF,0xFF,0xFF,0x00,0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x28,0x00 +,0x00,0x00,0x61,0x00,0x00,0x00,0x9B,0x00,0x01,0x01,0xD5,0x00,0x01,0x01,0xF8 +,0x86,0x00,0x00,0x00,0xFF,0x09,0x00,0x00,0x00,0xFE,0x00,0x01,0x02,0xEE,0x00 +,0x00,0x00,0xD5,0x00,0x00,0x00,0xBF,0x00,0x00,0x00,0xA8,0x00,0x00,0x00,0x92 +,0x00,0x00,0x00,0x7B,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x4C,0x00,0x00,0x00 +,0x1E,0x9A,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x2D,0x93,0x00,0x00,0x00 +,0x70,0x02,0x00,0x00,0x00,0x6B,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x18,0x9B +,0xFF,0xFF,0xFF,0x00,0x1C,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x38,0x00,0x00 +,0x00,0x52,0x00,0x00,0x00,0x5C,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x70,0x00 +,0x00,0x00,0x7A,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x8E,0x00,0x00,0x00,0x98 +,0x00,0x00,0x00,0xA3,0x00,0x00,0x00,0xAD,0x00,0x00,0x00,0xB7,0x00,0x00,0x00 +,0xC1,0x00,0x00,0x00,0xCB,0x00,0x00,0x00,0xC9,0x00,0x00,0x00,0xBC,0x00,0x00 +,0x00,0xAE,0x00,0x00,0x00,0xA1,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x86,0x00 +,0x00,0x00,0x78,0x00,0x00,0x00,0x6B,0x00,0x00,0x00,0x5D,0x00,0x00,0x00,0x50 +,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x25,0x00,0x00,0x00 +,0x07,0xAA,0xFF,0xFF,0xFF,0x00,0x08,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x42 +,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x9F,0x00,0x00,0x00,0xB9,0x00,0x00,0x00 +,0xC6,0x00,0x00,0x00,0xD3,0x00,0x01,0x02,0xE3,0x00,0x02,0x02,0xE9,0x9C,0x00 +,0x02,0x02,0xEA,0x01,0x00,0x01,0x02,0xEA,0x00,0x00,0x00,0xC9,0x89,0xFF,0xFF +,0xFF,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xA9,0x00,0x00,0x01,0xFD +,0x00,0x00,0x00,0xFF,0x03,0x26,0x2D,0xFE,0x0A,0x7C,0x94,0xFF,0x0F,0xBC,0xE0 +,0xFF,0x8B,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x46,0x53,0xFF,0x00,0x00,0x00,0xFF +,0x00,0x01,0x02,0xF0,0x8F,0x00,0x02,0x02,0xEA,0x00,0x00,0x00,0x00,0xE8,0xEA +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x03,0x91,0x00,0x00,0x00,0x08,0x00 +,0x00,0x00,0x00,0x01,0x8A,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x06,0x92 +,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x04,0x98,0xFF,0xFF,0xFF,0x00,0x07 +,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x25,0x00,0x00,0x00 +,0x33,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x2D,0x00,0x00,0x00,0x19,0x00,0x00 +,0x00,0x04,0xFF,0xFF,0xFF,0xFF,0x00,0xD3,0xFF,0xFF,0xFF,0x00,0x06,0x00,0x00 +,0x00,0x21,0x00,0x00,0x00,0x92,0x00,0x01,0x01,0xF5,0x00,0x00,0x00,0xFF,0x02 +,0x15,0x1A,0xFD,0x09,0x70,0x85,0xFF,0x0F,0xBE,0xE2,0xFF,0x89,0x0F,0xBF,0xE4 +,0xFF,0x02,0x0A,0x84,0x9D,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x71,0x90 +,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0xFF +,0xFF,0xFF,0xFF,0x00,0x95,0xFF,0xFF,0xFF,0x00,0x05,0x00,0x00,0x00,0x12,0x00 +,0x00,0x00,0x7C,0x00,0x01,0x01,0xE9,0x00,0x00,0x00,0xFF,0x03,0x2A,0x33,0xFF +,0x0D,0xA0,0xBF,0xFF,0x88,0x0F,0xBF,0xE4,0xFF,0x02,0x0F,0xB9,0xDD,0xFF,0x01 +,0x08,0x0A,0xFE,0x00,0x00,0x00,0xC4,0x90,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF +,0xFF,0x00,0xEE,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00,0x07,0x00,0x00,0x00 +,0xA2,0x00,0x00,0x00,0xD6,0x00,0x01,0x02,0xED,0x00,0x00,0x00,0xFD,0x8C,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x01,0x01,0xE4,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF +,0xFF,0x00,0x94,0xFF,0xFF,0xFF,0x00,0x05,0x00,0x00,0x00,0x0A,0x00,0x00,0x00 +,0x8E,0x00,0x00,0x00,0xFD,0x00,0x04,0x05,0xFE,0x08,0x63,0x76,0xFF,0x0F,0xBC +,0xE0,0xFF,0x87,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x41,0x4E,0xFF,0x00,0x00,0x00 +,0xFE,0x00,0x00,0x00,0x19,0x8F,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0x00 +,0xED,0xFF,0xFF,0xFF,0x00,0x05,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0xB5,0x00 +,0x00,0x00,0xFF,0x02,0x17,0x1B,0xFF,0x04,0x2E,0x37,0xFF,0x05,0x3F,0x4B,0xFF +,0x8B,0x05,0x41,0x4E,0xFF,0x02,0x03,0x27,0x2E,0xFF,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x3E,0xFF,0xFF,0xFF,0xFF,0x00,0x96,0xFF,0xFF,0xFF,0x00,0x04,0x00 +,0x00,0x00,0x37,0x00,0x01,0x01,0xD5,0x00,0x00,0x00,0xFF,0x05,0x3B,0x47,0xFF +,0x0F,0xBA,0xDE,0xFF,0x86,0x0F,0xBF,0xE4,0xFF,0x02,0x0A,0x80,0x99,0xFF,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x6B,0x8F,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF +,0xFF,0x00,0xEC,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00,0x10,0x00,0x01,0x01 +,0xD8,0x00,0x00,0x00,0xFF,0x06,0x46,0x54,0xFF,0x0F,0xBD,0xE1,0xFF,0x8D,0x0F +,0xBF,0xE4,0xFF,0x02,0x0C,0x9E,0xBD,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x97,0xFF,0xFF,0xFF,0xFF,0x00,0x97,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00 +,0x06,0x00,0x00,0x00,0xA1,0x00,0x00,0x00,0xFF,0x04,0x34,0x3E,0xFF,0x0E,0xB8 +,0xDB,0xFF,0x85,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB7,0xDA,0xFF,0x00,0x06,0x07 +,0xFE,0x00,0x00,0x00,0xBE,0x8F,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0x00 +,0xEC,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0xFF,0x06 +,0x52,0x61,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x21,0x28,0xFE,0x00,0x01 +,0x02,0xEE,0x00,0x00,0x00,0x04,0xFF,0xFF,0xFF,0xFF,0x00,0x97,0xFF,0xFF,0xFF +,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0xFF,0x03 +,0x2C,0x34,0xFE,0x0E,0xB5,0xD7,0xFF,0x85,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x3D +,0x49,0xFF,0x00,0x00,0x01,0xFD,0x00,0x00,0x00,0x15,0x8E,0xFF,0xFF,0xFF,0x00 +,0xFF,0xFF,0xFF,0xFF,0x00,0xEC,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x71 +,0x00,0x00,0x00,0xFF,0x0B,0x8A,0xA5,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x08 +,0x65,0x79,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x4A,0xFF,0xFF,0xFF,0xFF +,0x00,0x99,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x8D,0x00,0x00,0x00,0xFF +,0x05,0x3A,0x45,0xFF,0x0F,0xBE,0xE3,0xFF,0x84,0x0F,0xBF,0xE4,0xFF,0x02,0x0A +,0x7C,0x94,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x65,0x8E,0xFF,0xFF,0xFF +,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0xEC,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x44,0x00,0x00,0x00,0xFF,0x08,0x64,0x78,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02 +,0x0D,0xA7,0xC7,0xFF,0x00,0x01,0x01,0xFF,0x00,0x00,0x00,0xA3,0xFF,0xFF,0xFF +,0xFF,0x00,0x9A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xA4,0x00,0x00,0x00 +,0xFF,0x08,0x65,0x79,0xFF,0x84,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB5,0xD7,0xFF +,0x00,0x05,0x05,0xFE,0x00,0x00,0x00,0xB8,0x8E,0xFF,0xFF,0xFF,0x00,0xFF,0xFF +,0xFF,0xFF,0x00,0xEC,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x01 +,0x01,0xF2,0x03,0x2A,0x32,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x03,0x2B,0x34 +,0xFF,0x00,0x01,0x01,0xF4,0x00,0x00,0x00,0x09,0xFF,0xFF,0xFF,0xFF,0x00,0x99 +,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x0A,0x00,0x01,0x01,0xD4,0x00,0x02 +,0x02,0xFE,0x0B,0x8E,0xAA,0xFF,0x84,0x0F,0xBF,0xE4,0xFF,0x02,0x04,0x39,0x44 +,0xFF,0x00,0x01,0x01,0xFB,0x00,0x00,0x00,0x11,0x8D,0xFF,0xFF,0xFF,0x00,0xFF +,0xFF,0xFF,0xFF,0x00,0xED,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xA8,0x00 +,0x01,0x01,0xFF,0x0E,0xAE,0xCF,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x6F +,0x84,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x56,0xFF,0xFF,0xFF,0xFF,0x00 +,0x9A,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x26,0x00,0x01,0x02,0xF3,0x01 +,0x12,0x15,0xFE,0x0E,0xB7,0xDA,0xFF,0x83,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x78 +,0x8F,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x5F,0x8D,0xFF,0xFF,0xFF,0x00 +,0xFF,0xFF,0xFF,0xFF,0x00,0xED,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x5A +,0x00,0x00,0x00,0xFF,0x09,0x75,0x8B,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x0E +,0xAF,0xD0,0xFF,0x00,0x02,0x02,0xFE,0x00,0x00,0x00,0xAF,0xFF,0xFF,0xFF,0xFF +,0x00,0x9B,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0xFF +,0x07,0x5E,0x71,0xFF,0x83,0x0F,0xBF,0xE4,0xFF,0x02,0x0E,0xB2,0xD5,0xFF,0x00 +,0x03,0x04,0xFE,0x00,0x00,0x00,0xB2,0x8D,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF +,0xFF,0x00,0xED,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x10,0x00,0x01,0x01 +,0xFC,0x05,0x3A,0x46,0xFF,0x91,0x0F,0xBF,0xE4,0xFF,0x02,0x04,0x35,0x3F,0xFF +,0x00,0x01,0x01,0xF9,0x00,0x00,0x00,0x10,0xFF,0xFF,0xFF,0xFF,0x00,0x9A,0xFF +,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x01,0x01,0xD4,0x01,0x07,0x09 +,0xFE,0x0E,0xAC,0xCE,0xFF,0x83,0x0F,0xBF,0xE4,0xFF,0x02,0x04,0x35,0x3F,0xFF +,0x00,0x01,0x01,0xF9,0x00,0x00,0x00,0x0D,0x8C,0xFF,0xFF,0xFF,0x00,0xFF,0xFF +,0xFF,0xFF,0x00,0xEE,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xBE,0x01,0x07 +,0x08,0xFE,0x0E,0xB8,0xDC,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x77,0x8E +,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x60,0xFF,0xFF,0xFF,0xFF,0x00,0x9B +,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0xFF,0x04,0x30 +,0x39,0xFF,0x83,0x07,0x59,0x6A,0xFF,0x02,0x04,0x2E,0x37,0xFF,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x59,0x8C,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0x00 +,0xEE,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xFF,0x0B +,0x86,0xA0,0xFF,0x90,0x0F,0xBF,0xE4,0xFF,0x02,0x09,0x70,0x85,0xFF,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x52,0xFF,0xFF,0xFF,0xFF,0x00,0x9C,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0xB8,0x86,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0xAE,0x8C,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0xEE,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0xFF,0x06,0x4C,0x5A,0xFF,0x90 +,0x0F,0xBF,0xE4,0xFF,0x02,0x05,0x3F,0x4B,0xFF,0x00,0x00,0x00,0xFE,0x00,0x00 +,0x00,0x13,0xFF,0xFF,0xFF,0xFF,0x00,0x9C,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0x10,0x86,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x23,0x8C,0xFF,0xFF +,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0xEF,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x01 +,0x01,0xD5,0x01,0x11,0x14,0xFD,0x0F,0xBE,0xE3,0xFF,0x8E,0x0F,0xBF,0xE4,0xFF +,0x02,0x0D,0xA8,0xC8,0xFF,0x01,0x0A,0x0C,0xFE,0x00,0x00,0x01,0xD2,0xFF,0xFF +,0xFF,0xFF,0x00,0xB3,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0xEF,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xFF,0x04,0x35,0x3F +,0xFF,0x8C,0x05,0x3B,0x47,0xFF,0x04,0x05,0x3C,0x48,0xFF,0x03,0x2B,0x33,0xFF +,0x01,0x0B,0x0D,0xFE,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x53,0xFF,0xFF,0xFF +,0xFF,0x00,0xB3,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0xEF,0xFF,0xFF +,0xFF,0x00,0x00,0x00,0x00,0x00,0x38,0x8E,0x00,0x00,0x00,0xFF,0x03,0x00,0x00 +,0x00,0xFE,0x00,0x01,0x01,0xE7,0x00,0x00,0x00,0xC7,0x00,0x00,0x00,0x6C,0xFF +,0xFF,0xFF,0xFF,0x00,0xB4,0xFF,0xFF,0xFF,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8 +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x52,0x55,0x45,0x56,0x49,0x53,0x49 +,0x4F,0x4E,0x2D,0x58,0x46,0x49,0x4C,0x45,0x2E,0x00}; +/* end binary data. size = 39085 bytes */ + + +/* begin binary data: */ +const int headphones_bytes = 22402; +const unsigned char headphones_data[] = /* 22402 */ +{0x00,0x00,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0xEB +,0x00,0x20,0x08,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0xFF,0xFF +,0xFF,0xFF,0x00,0xEA,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00 +,0x00,0x00,0x00,0x8B,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00 +,0x00,0x77,0x00,0x00,0x00,0x10,0xFF,0xFF,0xFF,0xFF,0x00,0xCC,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xBF,0x00,0x00,0x00,0x0E,0x8B +,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x8B +,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0xDF,0x00,0x00,0x00,0x34,0xFF,0xFF,0xFF,0xFF,0x00,0xC9,0xFF,0xFF,0xFF +,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xFB,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0xAC,0x8B,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00 +,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x8A,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00 +,0x00,0x3D,0x00,0x00,0x00,0xFB,0x81,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00 +,0xF9,0x00,0x00,0x00,0x6B,0xFF,0xFF,0xFF,0xFF,0x00,0xC7,0xFF,0xFF,0xFF,0x00 +,0x01,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0xB2,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x6F,0x8A,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89 +,0x00,0x00,0x00,0x00,0x89,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x16,0x00 +,0x00,0x00,0xE5,0x84,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x39,0xFF,0xFF +,0xFF,0xFF,0x00,0xC6,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x28,0x00,0x00 +,0x00,0xF3,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFA,0x00,0x00,0x00 +,0x38,0x89,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00 +,0x00,0x88,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0xBC +,0x84,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x90,0xFF,0xFF,0xFF,0xFF,0x00 +,0xC8,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x56,0x84,0x00,0x00,0x00,0xFF +,0x01,0x00,0x00,0x00,0xE2,0x00,0x00,0x00,0x11,0x88,0xFF,0xFF,0xFF,0x00,0x89 +,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x88,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0x65,0x84,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xC7,0x00 +,0x00,0x00,0x05,0xFF,0xFF,0xFF,0xFF,0x00,0xC9,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0x90,0x84,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x95,0x88,0xFF +,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x87,0xFF +,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xED,0x83,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xEC,0x00,0x00,0x00,0x1D,0x89,0xFF,0xFF,0xFF +,0x00,0x01,0x00,0x00,0x00,0x7A,0x00,0x00,0x00,0x20,0xFF,0xFF,0xFF,0xFF,0x00 +,0xB2,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x5D,0x00,0x00,0x00,0xC2,0x00 +,0x00,0x00,0x07,0x88,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00 +,0x00,0xC5,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFD,0x00,0x00,0x00 +,0x32,0x87,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00 +,0x00,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x9D,0x83,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x48,0x89,0xFF,0xFF,0xFF,0x00 +,0x03,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xF2,0x00,0x00 +,0x00,0x65,0x9D,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x29,0x00,0x00,0x00 +,0x72,0x00,0x00,0x00,0x1D,0xFF,0xFF,0xFF,0xFF,0x00,0x8E,0xFF,0xFF,0xFF,0x00 +,0x01,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0xB2,0x81,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x87,0x89,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x1C,0x00 +,0x00,0x00,0xF0,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xC8,0x00,0x00 +,0x00,0x01,0x86,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00 +,0x00,0x00,0x86,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x3A,0x00,0x00,0x00 +,0xFE,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x9D,0x89,0xFF,0xFF,0xFF +,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0xEB,0x82,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x72,0x98,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x0E +,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0xE1,0x81,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x57,0xEE,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00 +,0x00,0x8D,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x0F,0x9C,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0x67,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFC +,0x00,0x00,0x00,0x37,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x6E,0x84 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x65,0x86,0xFF,0xFF,0xFF,0x00,0x89 +,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x85,0xFF,0xFF,0xFF,0x00,0x01 +,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xD0,0x83,0x00,0x00,0x00,0xFF,0x01,0x00 +,0x00,0x00,0xEE,0x00,0x00,0x00,0x14,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0xAD,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE3,0x00,0x00,0x00 +,0x0F,0x85,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x01 +,0x8D,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x7A,0x00 +,0x00,0x00,0xC2,0x00,0x00,0x00,0xFB,0x84,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x89,0xED,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x14,0x81,0x00,0x00 +,0x00,0xFF,0x04,0x00,0x00,0x00,0xFB,0x00,0x00,0x00,0xC4,0x00,0x00,0x00,0x7C +,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x02,0x90,0xFF,0xFF,0xFF,0x00,0x01,0x00 +,0x00,0x00,0x1B,0x00,0x00,0x00,0x2B,0x85,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00 +,0x00,0x01,0x00,0x00,0x00,0xBC,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00 +,0xD7,0x00,0x00,0x00,0x08,0x88,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x03 +,0x00,0x00,0x00,0xD1,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEC,0x00 +,0x00,0x00,0x11,0x85,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00 +,0x00,0x00,0x00,0x85,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x58,0x84,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x68,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0x58,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x45,0x86,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0xA8,0x00,0x00,0x00,0xC5,0x00,0x00,0x00 +,0x2E,0x8A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x9E +,0x00,0x00,0x00,0xFC,0x87,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xBB,0xED +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x46,0x85,0x00,0x00,0x00,0xFF,0x03 +,0x00,0x00,0x00,0xEB,0x00,0x00,0x00,0xA6,0x00,0x00,0x00,0x57,0x00,0x00,0x00 +,0x03,0x8B,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x72 +,0x00,0x00,0x00,0xF3,0x00,0x00,0x00,0xD0,0x00,0x00,0x00,0x03,0x85,0xFF,0xFF +,0xFF,0x00,0x01,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0xF1,0x82,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x8C,0x89,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00 +,0x3C,0x00,0x00,0x00,0xFE,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x7D +,0x85,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00 +,0x85,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xCF,0x83,0x00,0x00,0x00,0xFF +,0x01,0x00,0x00,0x00,0xCB,0x00,0x00,0x00,0x02,0x88,0xFF,0xFF,0xFF,0x00,0x01 +,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0xEC,0x82,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x97,0x86,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x44,0x81,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF7,0x00,0x00,0x00,0x16,0x87,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0xF9 +,0x85,0x00,0x00,0x00,0xFF,0x01,0x10,0x10,0x10,0xFF,0x18,0x18,0x18,0xFF,0x81 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xED,0xED,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0x78,0x88,0x00,0x00,0x00,0xFF,0x02,0x00,0x00,0x00,0xD8,0x00 +,0x00,0x00,0x57,0x00,0x00,0x00,0x01,0x89,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00 +,0x00,0x12,0x00,0x00,0x00,0xEB,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x70,0x86,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x64,0x82,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x3A,0x89,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0xA1,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEA +,0x00,0x00,0x00,0x09,0x84,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89 +,0x00,0x00,0x00,0x00,0x84,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x48,0x84 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x3B,0x89,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0xAF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xDE,0x00 +,0x00,0x00,0x0C,0x85,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00 +,0x00,0xD9,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8D,0x87,0xFF,0xFF +,0xFF,0x00,0x01,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0xCC,0x83,0x00,0x00,0x00 +,0xFF,0x05,0x02,0x02,0x02,0xFF,0x1C,0x1C,0x1C,0xFF,0x3C,0x3C,0x3C,0xFF,0x60 +,0x60,0x60,0xFF,0x73,0x73,0x73,0xFF,0x53,0x53,0x53,0xFF,0x82,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x1F,0xEC,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0xAA,0x81,0x00,0x00,0x00,0xFF,0x02,0x13,0x13,0x13,0xFF,0x23,0x23,0x23,0xFF +,0x05,0x05,0x05,0xFF,0x85,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xD0,0x00 +,0x00,0x00,0x30,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x61,0x81,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF2,0x00,0x00,0x00,0x1A,0x86,0xFF,0xFF +,0xFF,0x00,0x00,0x00,0x00,0x00,0xB7,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00 +,0x00,0xDA,0x00,0x00,0x00,0x09,0x88,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00 +,0x1C,0x00,0x00,0x00,0xFA,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x6B +,0x84,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00 +,0x84,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xC0,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xC2,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x56 +,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x3E,0x86 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x7C,0x81,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xE4,0x00,0x00,0x00,0x0C,0x86,0xFF,0xFF,0xFF,0x00,0x01,0x00 +,0x00,0x00,0x32,0x00,0x00,0x00,0xE4,0x82,0x00,0x00,0x00,0xFF,0x07,0x01,0x01 +,0x01,0xFF,0x20,0x20,0x20,0xFF,0x51,0x51,0x51,0xFF,0x63,0x63,0x63,0xFF,0x68 +,0x68,0x68,0xFF,0x6E,0x6E,0x6E,0xFF,0x73,0x73,0x73,0xFF,0x69,0x69,0x69,0xFF +,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x52,0xEC,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0xDD,0x81,0x00,0x00,0x00,0xFF,0x05,0x37,0x37,0x37,0xFF +,0x73,0x73,0x73,0xFF,0x6E,0x6E,0x6E,0xFF,0x4E,0x4E,0x4E,0xFF,0x2D,0x2D,0x2D +,0xFF,0x0B,0x0B,0x0B,0xFF,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF4 +,0x00,0x00,0x00,0x51,0x88,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x01,0x00 +,0x00,0x00,0xC3,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA8,0x86,0xFF +,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x1B,0x00,0x00,0x00,0xEF,0x82,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x80,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0x9D,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xDF,0x00,0x00,0x00 +,0x04,0x83,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00 +,0x00,0x83,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x38,0x84,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x4B,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0xCB,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8F,0x86,0xFF,0xFF,0xFF +,0x00,0x01,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0xF6,0x81,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x54,0x86,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x34 +,0x00,0x00,0x00,0xF5,0x82,0x00,0x00,0x00,0xFF,0x09,0x10,0x10,0x10,0xFF,0x44 +,0x44,0x44,0xFF,0x56,0x56,0x56,0xFF,0x5C,0x5C,0x5C,0xFF,0x61,0x61,0x61,0xFF +,0x66,0x66,0x66,0xFF,0x6C,0x6C,0x6C,0xFF,0x71,0x71,0x71,0xFF,0x73,0x73,0x73 +,0xFF,0x0C,0x0C,0x0C,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x84 +,0xEB,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x10,0x82,0x00,0x00,0x00,0xFF +,0x07,0x4E,0x4E,0x4E,0xFF,0x73,0x73,0x73,0xFF,0x6F,0x6F,0x6F,0xFF,0x69,0x69 +,0x69,0xFF,0x64,0x64,0x64,0xFF,0x5D,0x5D,0x5D,0xFF,0x35,0x35,0x35,0xFF,0x09 +,0x09,0x09,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFE,0x00,0x00 +,0x00,0x7B,0x88,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x2D,0x00,0x00,0x00 +,0xFB,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x44,0x86,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0x5E,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00 +,0xE6,0x00,0x00,0x00,0x04,0x88,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x27 +,0x00,0x00,0x00,0xFD,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x5A,0x83 +,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x83 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xAB,0x83,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xD3,0x00,0x00,0x00,0x01,0x88,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0x33,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE6,0x00,0x00 +,0x00,0x09,0x86,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xB3,0x81,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xB7,0x86,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00 +,0x00,0x08,0x00,0x00,0x00,0xD7,0x82,0x00,0x00,0x00,0xFF,0x0A,0x17,0x17,0x17 +,0xFF,0x47,0x47,0x47,0xFF,0x4F,0x4F,0x4F,0xFF,0x54,0x54,0x54,0xFF,0x5A,0x5A +,0x5A,0xFF,0x5F,0x5F,0x5F,0xFF,0x64,0x64,0x64,0xFF,0x6A,0x6A,0x6A,0xFF,0x6F +,0x6F,0x6F,0xFF,0x73,0x73,0x73,0xFF,0x23,0x23,0x23,0xFF,0x81,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xB6,0xEB,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0x41,0x82,0x00,0x00,0x00,0xFF,0x08,0x65,0x65,0x65,0xFF,0x72,0x72,0x72,0xFF +,0x6D,0x6D,0x6D,0xFF,0x67,0x67,0x67,0xFF,0x62,0x62,0x62,0xFF,0x5D,0x5D,0x5D +,0xFF,0x57,0x57,0x57,0xFF,0x4F,0x4F,0x4F,0xFF,0x26,0x26,0x26,0xFF,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x7E,0x88,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0x8B,0x81,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xD8,0x00,0x00 +,0x00,0x01,0x86,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xCE,0x82,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x54,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0xAB,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xCA,0x83,0xFF,0xFF +,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x82,0xFF,0xFF +,0xFF,0x00,0x01,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0xF8,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x5D,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0x9C,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x83,0x86,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0x25,0x81,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00 +,0xF7,0x00,0x00,0x00,0x23,0x86,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x90 +,0x82,0x00,0x00,0x00,0xFF,0x0B,0x1B,0x1B,0x1B,0xFF,0x42,0x42,0x42,0xFF,0x48 +,0x48,0x48,0xFF,0x4D,0x4D,0x4D,0xFF,0x52,0x52,0x52,0xFF,0x58,0x58,0x58,0xFF +,0x5D,0x5D,0x5D,0xFF,0x62,0x62,0x62,0xFF,0x68,0x68,0x68,0xFF,0x6D,0x6D,0x6D +,0xFF,0x72,0x72,0x72,0xFF,0x3A,0x3A,0x3A,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xE8,0xEB,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x74,0x81 +,0x00,0x00,0x00,0xFF,0x0B,0x09,0x09,0x09,0xFF,0x73,0x73,0x73,0xFF,0x70,0x70 +,0x70,0xFF,0x6B,0x6B,0x6B,0xFF,0x65,0x65,0x65,0xFF,0x60,0x60,0x60,0xFF,0x5B +,0x5B,0x5B,0xFF,0x55,0x55,0x55,0xFF,0x50,0x50,0x50,0xFF,0x4B,0x4B,0x4B,0xFF +,0x2D,0x2D,0x2D,0xFF,0x02,0x02,0x02,0xFF,0x81,0x00,0x00,0x00,0xFF,0x01,0x00 +,0x00,0x00,0xFB,0x00,0x00,0x00,0x35,0x87,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00 +,0x00,0x0C,0x00,0x00,0x00,0xE4,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x40,0x86,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x66,0x82,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xBD,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0x33,0x84,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x25,0x82,0xFF,0xFF,0xFF +,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x82,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0x62,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00 +,0xE6,0x00,0x00,0x00,0x04,0x88,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x0F +,0x00,0x00,0x00,0xF5,0x81,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFD,0x00 +,0x00,0x00,0x1E,0x86,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x85,0x81,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x9A,0x86,0xFF,0xFF,0xFF,0x00,0x01,0x00 +,0x00,0x00,0x42,0x00,0x00,0x00,0xFE,0x81,0x00,0x00,0x00,0xFF,0x0C,0x0C,0x0C +,0x0C,0xFF,0x3A,0x3A,0x3A,0xFF,0x40,0x40,0x40,0xFF,0x46,0x46,0x46,0xFF,0x4B +,0x4B,0x4B,0xFF,0x50,0x50,0x50,0xFF,0x56,0x56,0x56,0xFF,0x5B,0x5B,0x5B,0xFF +,0x60,0x60,0x60,0xFF,0x66,0x66,0x66,0xFF,0x6B,0x6B,0x6B,0xFF,0x70,0x70,0x70 +,0xFF,0x50,0x50,0x50,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x1A +,0xEA,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xA6,0x81,0x00,0x00,0x00,0xFF +,0x0C,0x1F,0x1F,0x1F,0xFF,0x73,0x73,0x73,0xFF,0x6E,0x6E,0x6E,0xFF,0x69,0x69 +,0x69,0xFF,0x63,0x63,0x63,0xFF,0x5E,0x5E,0x5E,0xFF,0x59,0x59,0x59,0xFF,0x53 +,0x53,0x53,0xFF,0x4E,0x4E,0x4E,0xFF,0x49,0x49,0x49,0xFF,0x43,0x43,0x43,0xFF +,0x2F,0x2F,0x2F,0xFF,0x01,0x01,0x01,0xFF,0x81,0x00,0x00,0x00,0xFF,0x01,0x00 +,0x00,0x00,0xD7,0x00,0x00,0x00,0x09,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0x7E,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA1,0x86,0xFF,0xFF +,0xFF,0x00,0x01,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0xF2,0x81,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x26,0x89,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0xCD,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x7F +,0x82,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00 +,0x82,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xBD,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x8F,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x6D +,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB3,0x86,0xFF,0xFF,0xFF,0x00 +,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0xE4,0x81,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x38,0x86,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xC5,0x81 +,0x00,0x00,0x00,0xFF,0x0D,0x02,0x02,0x02,0xFF,0x2C,0x2C,0x2C,0xFF,0x39,0x39 +,0x39,0xFF,0x3E,0x3E,0x3E,0xFF,0x44,0x44,0x44,0xFF,0x49,0x49,0x49,0xFF,0x4E +,0x4E,0x4E,0xFF,0x54,0x54,0x54,0xFF,0x59,0x59,0x59,0xFF,0x5E,0x5E,0x5E,0xFF +,0x64,0x64,0x64,0xFF,0x69,0x69,0x69,0xFF,0x6E,0x6E,0x6E,0xFF,0x67,0x67,0x67 +,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x4D,0xEA,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0xD9,0x81,0x00,0x00,0x00,0xFF,0x0C,0x36,0x36,0x36 +,0xFF,0x71,0x71,0x71,0xFF,0x6C,0x6C,0x6C,0xFF,0x67,0x67,0x67,0xFF,0x61,0x61 +,0x61,0xFF,0x5C,0x5C,0x5C,0xFF,0x57,0x57,0x57,0xFF,0x51,0x51,0x51,0xFF,0x4C +,0x4C,0x4C,0xFF,0x47,0x47,0x47,0xFF,0x41,0x41,0x41,0xFF,0x3C,0x3C,0x3C,0xFF +,0x1D,0x1D,0x1D,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x90,0x87 +,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0xFD,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0xF5,0x00,0x00,0x00,0x0D,0x86,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0x96,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8E +,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x74,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xD9,0x82,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00 +,0x89,0x00,0x00,0x00,0x00,0x81,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x1A +,0x00,0x00,0x00,0xFD,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x36,0x89 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xD5,0x82,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x4B,0x86,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x48,0x81 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xD7,0x86,0xFF,0xFF,0xFF,0x00,0x01 +,0x00,0x00,0x00,0x1B,0x00,0x00,0x00,0xFE,0x81,0x00,0x00,0x00,0xFF,0x0E,0x18 +,0x18,0x18,0xFF,0x32,0x32,0x32,0xFF,0x37,0x37,0x37,0xFF,0x3C,0x3C,0x3C,0xFF +,0x42,0x42,0x42,0xFF,0x47,0x47,0x47,0xFF,0x4C,0x4C,0x4C,0xFF,0x52,0x52,0x52 +,0xFF,0x57,0x57,0x57,0xFF,0x5C,0x5C,0x5C,0xFF,0x62,0x62,0x62,0xFF,0x67,0x67 +,0x67,0xFF,0x6C,0x6C,0x6C,0xFF,0x72,0x72,0x72,0xFF,0x0A,0x0A,0x0A,0xFF,0x81 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x7F,0xE9,0xFF,0xFF,0xFF,0x00,0x01 +,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0xFE,0x81,0x00,0x00,0x00,0xFF,0x0D,0x4C +,0x4C,0x4C,0xFF,0x6F,0x6F,0x6F,0xFF,0x6A,0x6A,0x6A,0xFF,0x65,0x65,0x65,0xFF +,0x5F,0x5F,0x5F,0xFF,0x5A,0x5A,0x5A,0xFF,0x55,0x55,0x55,0xFF,0x4F,0x4F,0x4F +,0xFF,0x4A,0x4A,0x4A,0xFF,0x45,0x45,0x45,0xFF,0x3F,0x3F,0x3F,0xFF,0x3A,0x3A +,0x3A,0xFF,0x35,0x35,0x35,0xFF,0x0B,0x0B,0x0B,0xFF,0x81,0x00,0x00,0x00,0xFF +,0x01,0x00,0x00,0x00,0xFB,0x00,0x00,0x00,0x12,0x87,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0xBA,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x63,0x86 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x2F,0x82,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xED,0x00,0x00,0x00,0x08,0x88,0xFF,0xFF,0xFF,0x00,0x01,0x00 +,0x00,0x00,0x1D,0x00,0x00,0x00,0xFE,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x33,0x81,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00 +,0x00,0x00,0x81,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x70,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xDB,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0x3E,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE1,0x00,0x00,0x00 +,0x02,0x86,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xA9,0x81,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x75,0x86,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0x6E,0x81,0x00,0x00,0x00,0xFF,0x0F,0x01,0x01,0x01,0xFF,0x27,0x27,0x27,0xFF +,0x30,0x30,0x30,0xFF,0x35,0x35,0x35,0xFF,0x3A,0x3A,0x3A,0xFF,0x40,0x40,0x40 +,0xFF,0x45,0x45,0x45,0xFF,0x4A,0x4A,0x4A,0xFF,0x50,0x50,0x50,0xFF,0x55,0x55 +,0x55,0xFF,0x5A,0x5A,0x5A,0xFF,0x60,0x60,0x60,0xFF,0x65,0x65,0x65,0xFF,0x6A +,0x6A,0x6A,0xFF,0x70,0x70,0x70,0xFF,0x21,0x21,0x21,0xFF,0x81,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xB1,0xE9,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0x3D,0x82,0x00,0x00,0x00,0xFF,0x0D,0x63,0x63,0x63,0xFF,0x6D,0x6D,0x6D,0xFF +,0x68,0x68,0x68,0xFF,0x63,0x63,0x63,0xFF,0x5D,0x5D,0x5D,0xFF,0x58,0x58,0x58 +,0xFF,0x53,0x53,0x53,0xFF,0x4D,0x4D,0x4D,0xFF,0x48,0x48,0x48,0xFF,0x43,0x43 +,0x43,0xFF,0x3D,0x3D,0x3D,0xFF,0x38,0x38,0x38,0xFF,0x33,0x33,0x33,0xFF,0x26 +,0x26,0x26,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x61,0x87,0xFF +,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x58,0x81,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0xC5,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xC7,0x82,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x5F,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0xC2,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x88,0x81,0xFF +,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x81,0xFF +,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xB7,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x82,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xA7,0x82,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x7B,0x86,0xFF,0xFF,0xFF,0x00,0x04,0x00 +,0x00,0x00,0x12,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFB +,0x00,0x00,0x00,0x18,0x86,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xC3,0x81 +,0x00,0x00,0x00,0xFF,0x0F,0x09,0x09,0x09,0xFF,0x28,0x28,0x28,0xFF,0x2E,0x2E +,0x2E,0xFF,0x33,0x33,0x33,0xFF,0x38,0x38,0x38,0xFF,0x3E,0x3E,0x3E,0xFF,0x43 +,0x43,0x43,0xFF,0x48,0x48,0x48,0xFF,0x4E,0x4E,0x4E,0xFF,0x53,0x53,0x53,0xFF +,0x58,0x58,0x58,0xFF,0x5E,0x5E,0x5E,0xFF,0x63,0x63,0x63,0xFF,0x68,0x68,0x68 +,0xFF,0x6E,0x6E,0x6E,0xFF,0x37,0x37,0x37,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xE3,0xE9,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x70,0x81 +,0x00,0x00,0x00,0xFF,0x0F,0x07,0x07,0x07,0xFF,0x71,0x71,0x71,0xFF,0x6B,0x6B +,0x6B,0xFF,0x66,0x66,0x66,0xFF,0x61,0x61,0x61,0xFF,0x5B,0x5B,0x5B,0xFF,0x56 +,0x56,0x56,0xFF,0x51,0x51,0x51,0xFF,0x4B,0x4B,0x4B,0xFF,0x46,0x46,0x46,0xFF +,0x41,0x41,0x41,0xFF,0x3B,0x3B,0x3B,0xFF,0x36,0x36,0x36,0xFF,0x31,0x31,0x31 +,0xFF,0x2B,0x2B,0x2B,0xFF,0x08,0x08,0x08,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB6,0x87,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x08,0x00 +,0x00,0x00,0xEE,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x26,0x86,0xFF +,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x60,0x82,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0xC3,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x69,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xC9,0x81,0xFF,0xFF,0xFF,0x00,0x89,0x00 +,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x02,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x03,0x00,0x00,0x00,0xF2,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x34,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xEF,0x81,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xFB,0x00,0x00,0x00,0x19,0x86,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0x65,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB3 +,0x86,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0xFE,0x81 +,0x00,0x00,0x00,0xFF,0x0F,0x13,0x13,0x13,0xFF,0x26,0x26,0x26,0xFF,0x2C,0x2C +,0x2C,0xFF,0x31,0x31,0x31,0xFF,0x36,0x36,0x36,0xFF,0x3C,0x3C,0x3C,0xFF,0x41 +,0x41,0x41,0xFF,0x46,0x46,0x46,0xFF,0x4C,0x4C,0x4C,0xFF,0x51,0x51,0x51,0xFF +,0x56,0x56,0x56,0xFF,0x5C,0x5C,0x5C,0xFF,0x61,0x61,0x61,0xFF,0x66,0x66,0x66 +,0xFF,0x6C,0x6C,0x6C,0xFF,0x4D,0x4D,0x4D,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x16,0xE8,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xA2,0x81 +,0x00,0x00,0x00,0xFF,0x0F,0x1D,0x1D,0x1D,0xFF,0x6F,0x6F,0x6F,0xFF,0x69,0x69 +,0x69,0xFF,0x64,0x64,0x64,0xFF,0x5F,0x5F,0x5F,0xFF,0x59,0x59,0x59,0xFF,0x54 +,0x54,0x54,0xFF,0x4F,0x4F,0x4F,0xFF,0x49,0x49,0x49,0xFF,0x44,0x44,0x44,0xFF +,0x3F,0x3F,0x3F,0xFF,0x39,0x39,0x39,0xFF,0x34,0x34,0x34,0xFF,0x2F,0x2F,0x2F +,0xFF,0x29,0x29,0x29,0xFF,0x14,0x14,0x14,0xFF,0x81,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xFA,0x00,0x00,0x00,0x11,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0x95,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x77,0x86,0xFF +,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0xEF,0x81,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xF9,0x00,0x00,0x00,0x05,0x88,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0x22,0x83,0x00,0x00,0x00,0xFF,0x02,0x00,0x00,0x00 +,0xFB,0x00,0x00,0x00,0x0C,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89 +,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x35,0x83,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF2,0x00,0x00,0x00,0x03,0x88,0xFF,0xFF +,0xFF,0x00,0x00,0x00,0x00,0x00,0x21,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xC0,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x9A,0x81,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x61,0x86,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0x4C,0x82,0x00,0x00,0x00,0xFF,0x0F,0x1C,0x1C,0x1C,0xFF,0x24,0x24,0x24 +,0xFF,0x2A,0x2A,0x2A,0xFF,0x2F,0x2F,0x2F,0xFF,0x34,0x34,0x34,0xFF,0x3A,0x3A +,0x3A,0xFF,0x3F,0x3F,0x3F,0xFF,0x44,0x44,0x44,0xFF,0x4A,0x4A,0x4A,0xFF,0x4F +,0x4F,0x4F,0xFF,0x54,0x54,0x54,0xFF,0x5A,0x5A,0x5A,0xFF,0x5F,0x5F,0x5F,0xFF +,0x64,0x64,0x64,0xFF,0x6A,0x6A,0x6A,0xFF,0x62,0x62,0x62,0xFF,0x82,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x48,0xE8,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0xD4,0x81,0x00,0x00,0x00,0xFF,0x0F,0x33,0x33,0x33,0xFF,0x6D,0x6D,0x6D +,0xFF,0x67,0x67,0x67,0xFF,0x62,0x62,0x62,0xFF,0x5D,0x5D,0x5D,0xFF,0x57,0x57 +,0x57,0xFF,0x52,0x52,0x52,0xFF,0x4D,0x4D,0x4D,0xFF,0x47,0x47,0x47,0xFF,0x42 +,0x42,0x42,0xFF,0x3D,0x3D,0x3D,0xFF,0x37,0x37,0x37,0xFF,0x32,0x32,0x32,0xFF +,0x2D,0x2D,0x2D,0xFF,0x27,0x27,0x27,0xFF,0x1E,0x1E,0x1E,0xFF,0x82,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x60,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0x51,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA8,0x87,0xFF,0xFF +,0xFF,0x00,0x00,0x00,0x00,0x00,0xB6,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x2F,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xE3,0x83,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0x46,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00 +,0x00,0x89,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x74 +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB7,0x89,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0x52,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8E +,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xCB,0x81,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x2F,0x86,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x5D +,0x81,0x00,0x00,0x00,0xFF,0x11,0x01,0x01,0x01,0xFF,0x1F,0x1F,0x1F,0xFF,0x22 +,0x22,0x22,0xFF,0x28,0x28,0x28,0xFF,0x2D,0x2D,0x2D,0xFF,0x32,0x32,0x32,0xFF +,0x38,0x38,0x38,0xFF,0x3D,0x3D,0x3D,0xFF,0x42,0x42,0x42,0xFF,0x48,0x48,0x48 +,0xFF,0x4D,0x4D,0x4D,0xFF,0x52,0x52,0x52,0xFF,0x58,0x58,0x58,0xFF,0x5D,0x5D +,0x5D,0xFF,0x62,0x62,0x62,0xFF,0x68,0x68,0x68,0xFF,0x6D,0x6D,0x6D,0xFF,0x08 +,0x08,0x08,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x7A,0xE7,0xFF +,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0xFC,0x81,0x00,0x00 +,0x00,0xFF,0x10,0x48,0x48,0x48,0xFF,0x6B,0x6B,0x6B,0xFF,0x65,0x65,0x65,0xFF +,0x60,0x60,0x60,0xFF,0x5B,0x5B,0x5B,0xFF,0x55,0x55,0x55,0xFF,0x50,0x50,0x50 +,0xFF,0x4B,0x4B,0x4B,0xFF,0x45,0x45,0x45,0xFF,0x40,0x40,0x40,0xFF,0x3B,0x3B +,0x3B,0xFF,0x35,0x35,0x35,0xFF,0x30,0x30,0x30,0xFF,0x2B,0x2B,0x2B,0xFF,0x25 +,0x25,0x25,0xFF,0x20,0x20,0x20,0xFF,0x05,0x05,0x05,0xFF,0x81,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x94,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0x21,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xD9,0x87,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0x85,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x60,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xA4,0x83,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0x85,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00 +,0x89,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xB2,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x79,0x89,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0x83,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x5E,0x86 +,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xF7,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x05,0x86,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0x6F,0x81,0x00,0x00,0x00,0xFF,0x11,0x03,0x03,0x03,0xFF +,0x1F,0x1F,0x1F,0xFF,0x20,0x20,0x20,0xFF,0x26,0x26,0x26,0xFF,0x2B,0x2B,0x2B +,0xFF,0x30,0x30,0x30,0xFF,0x36,0x36,0x36,0xFF,0x3B,0x3B,0x3B,0xFF,0x40,0x40 +,0x40,0xFF,0x46,0x46,0x46,0xFF,0x4B,0x4B,0x4B,0xFF,0x50,0x50,0x50,0xFF,0x56 +,0x56,0x56,0xFF,0x5B,0x5B,0x5B,0xFF,0x60,0x60,0x60,0xFF,0x66,0x66,0x66,0xFF +,0x6B,0x6B,0x6B,0xFF,0x1E,0x1E,0x1E,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0xAC,0xE7,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x39,0x82,0x00 +,0x00,0x00,0xFF,0x10,0x5D,0x5D,0x5D,0xFF,0x69,0x69,0x69,0xFF,0x63,0x63,0x63 +,0xFF,0x5E,0x5E,0x5E,0xFF,0x59,0x59,0x59,0xFF,0x53,0x53,0x53,0xFF,0x4E,0x4E +,0x4E,0xFF,0x49,0x49,0x49,0xFF,0x43,0x43,0x43,0xFF,0x3E,0x3E,0x3E,0xFF,0x39 +,0x39,0x39,0xFF,0x33,0x33,0x33,0xFF,0x2E,0x2E,0x2E,0xFF,0x29,0x29,0x29,0xFF +,0x23,0x23,0x23,0xFF,0x1F,0x1F,0x1F,0xFF,0x09,0x09,0x09,0xFF,0x81,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xA5,0x88,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00 +,0x00,0xEF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x0C,0x86 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x54,0x82,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x91,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x66,0x83 +,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xC4,0xFF,0xFF,0xFF,0x00,0x89,0x00 +,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0xEC,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x3A,0x89,0xFF,0xFF +,0xFF,0x00,0x00,0x00,0x00,0x00,0xB3,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x2E,0x86,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x2C,0x81,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xCB,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0x80,0x81,0x00,0x00,0x00,0xFF,0x00,0x05,0x05,0x05,0xFF,0x81,0x1F,0x1F +,0x1F,0xFF,0x0E,0x24,0x24,0x24,0xFF,0x29,0x29,0x29,0xFF,0x2E,0x2E,0x2E,0xFF +,0x34,0x34,0x34,0xFF,0x39,0x39,0x39,0xFF,0x3E,0x3E,0x3E,0xFF,0x44,0x44,0x44 +,0xFF,0x49,0x49,0x49,0xFF,0x4E,0x4E,0x4E,0xFF,0x54,0x54,0x54,0xFF,0x59,0x59 +,0x59,0xFF,0x5E,0x5E,0x5E,0xFF,0x64,0x64,0x64,0xFF,0x69,0x69,0x69,0xFF,0x33 +,0x33,0x33,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xDE,0xE7,0xFF +,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x6C,0x81,0x00,0x00,0x00,0xFF,0x11,0x05 +,0x05,0x05,0xFF,0x6B,0x6B,0x6B,0xFF,0x67,0x67,0x67,0xFF,0x61,0x61,0x61,0xFF +,0x5C,0x5C,0x5C,0xFF,0x57,0x57,0x57,0xFF,0x51,0x51,0x51,0xFF,0x4C,0x4C,0x4C +,0xFF,0x47,0x47,0x47,0xFF,0x41,0x41,0x41,0xFF,0x3C,0x3C,0x3C,0xFF,0x37,0x37 +,0x37,0xFF,0x31,0x31,0x31,0xFF,0x2C,0x2C,0x2C,0xFF,0x27,0x27,0x27,0xFF,0x21 +,0x21,0x21,0xFF,0x1F,0x1F,0x1F,0xFF,0x0B,0x0B,0x0B,0xFF,0x81,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xB5,0x88,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0xBF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x3B,0x86,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0x23,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0xC2,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x27,0x83,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xF6,0x00,0x00,0x00,0x01,0x89,0x00,0x00,0x00,0x00 +,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x83,0x00,0x00,0x00,0xFF +,0x01,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x05,0x89,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0xE4,0x81,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF8,0x00 +,0x00,0x00,0x04,0x86,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x5D,0x81,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x9A,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0x92,0x81,0x00,0x00,0x00,0xFF,0x00,0x07,0x07,0x07,0xFF,0x81,0x1F +,0x1F,0x1F,0xFF,0x0E,0x22,0x22,0x22,0xFF,0x27,0x27,0x27,0xFF,0x2C,0x2C,0x2C +,0xFF,0x32,0x32,0x32,0xFF,0x37,0x37,0x37,0xFF,0x3C,0x3C,0x3C,0xFF,0x42,0x42 +,0x42,0xFF,0x47,0x47,0x47,0xFF,0x4C,0x4C,0x4C,0xFF,0x52,0x52,0x52,0xFF,0x57 +,0x57,0x57,0xFF,0x5C,0x5C,0x5C,0xFF,0x62,0x62,0x62,0xFF,0x67,0x67,0x67,0xFF +,0x48,0x48,0x48,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x11,0xE6 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x9E,0x81,0x00,0x00,0x00,0xFF,0x0E +,0x1A,0x1A,0x1A,0xFF,0x6A,0x6A,0x6A,0xFF,0x65,0x65,0x65,0xFF,0x5F,0x5F,0x5F +,0xFF,0x5A,0x5A,0x5A,0xFF,0x55,0x55,0x55,0xFF,0x4F,0x4F,0x4F,0xFF,0x4A,0x4A +,0x4A,0xFF,0x45,0x45,0x45,0xFF,0x3F,0x3F,0x3F,0xFF,0x3A,0x3A,0x3A,0xFF,0x35 +,0x35,0x35,0xFF,0x2F,0x2F,0x2F,0xFF,0x2A,0x2A,0x2A,0xFF,0x25,0x25,0x25,0xFF +,0x81,0x1F,0x1F,0x1F,0xFF,0x00,0x0D,0x0D,0x0D,0xFF,0x81,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xC6,0x88,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x8F +,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x6B,0x86,0xFF,0xFF,0xFF,0x00 +,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xF0,0x81,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xF1,0x00,0x00,0x00,0x01,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0xEF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x1C,0x89,0x00 +,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xD5,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0x15,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xCD,0x87,0xFF +,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x8D,0x81,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x68,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xA4,0x81,0x00 +,0x00,0x00,0xFF,0x00,0x09,0x09,0x09,0xFF,0x82,0x1F,0x1F,0x1F,0xFF,0x0D,0x25 +,0x25,0x25,0xFF,0x2A,0x2A,0x2A,0xFF,0x30,0x30,0x30,0xFF,0x35,0x35,0x35,0xFF +,0x3A,0x3A,0x3A,0xFF,0x40,0x40,0x40,0xFF,0x45,0x45,0x45,0xFF,0x4A,0x4A,0x4A +,0xFF,0x50,0x50,0x50,0xFF,0x55,0x55,0x55,0xFF,0x5A,0x5A,0x5A,0xFF,0x60,0x60 +,0x60,0xFF,0x65,0x65,0x65,0xFF,0x5B,0x5B,0x5B,0xFF,0x82,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x43,0xE6,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xD0 +,0x81,0x00,0x00,0x00,0xFF,0x0E,0x2F,0x2F,0x2F,0xFF,0x68,0x68,0x68,0xFF,0x63 +,0x63,0x63,0xFF,0x5D,0x5D,0x5D,0xFF,0x58,0x58,0x58,0xFF,0x53,0x53,0x53,0xFF +,0x4D,0x4D,0x4D,0xFF,0x48,0x48,0x48,0xFF,0x43,0x43,0x43,0xFF,0x3D,0x3D,0x3D +,0xFF,0x38,0x38,0x38,0xFF,0x33,0x33,0x33,0xFF,0x2D,0x2D,0x2D,0xFF,0x28,0x28 +,0x28,0xFF,0x23,0x23,0x23,0xFF,0x81,0x1F,0x1F,0x1F,0xFF,0x00,0x10,0x10,0x10 +,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xD6,0x88,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0x5E,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x9C,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xC1,0x82,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x24,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0xCA,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x41,0x89,0x00,0x00,0x00 +,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xB1,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0x46,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x9C,0x87,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0xBC,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x38,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xA6,0x81,0x00,0x00,0x00 +,0xFF,0x00,0x0A,0x0A,0x0A,0xFF,0x82,0x1F,0x1F,0x1F,0xFF,0x0E,0x23,0x23,0x23 +,0xFF,0x28,0x28,0x28,0xFF,0x2E,0x2E,0x2E,0xFF,0x33,0x33,0x33,0xFF,0x38,0x38 +,0x38,0xFF,0x3E,0x3E,0x3E,0xFF,0x43,0x43,0x43,0xFF,0x48,0x48,0x48,0xFF,0x4E +,0x4E,0x4E,0xFF,0x53,0x53,0x53,0xFF,0x58,0x58,0x58,0xFF,0x5E,0x5E,0x5E,0xFF +,0x63,0x63,0x63,0xFF,0x68,0x68,0x68,0xFF,0x06,0x06,0x06,0xFF,0x81,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x75,0xE5,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00 +,0x00,0x08,0x00,0x00,0x00,0xFB,0x81,0x00,0x00,0x00,0xFF,0x0E,0x43,0x43,0x43 +,0xFF,0x66,0x66,0x66,0xFF,0x61,0x61,0x61,0xFF,0x5B,0x5B,0x5B,0xFF,0x56,0x56 +,0x56,0xFF,0x51,0x51,0x51,0xFF,0x4B,0x4B,0x4B,0xFF,0x46,0x46,0x46,0xFF,0x41 +,0x41,0x41,0xFF,0x3B,0x3B,0x3B,0xFF,0x36,0x36,0x36,0xFF,0x31,0x31,0x31,0xFF +,0x2B,0x2B,0x2B,0xFF,0x26,0x26,0x26,0xFF,0x21,0x21,0x21,0xFF,0x81,0x1F,0x1F +,0x1F,0xFF,0x00,0x12,0x12,0x12,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xE6,0x88,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x31,0x81,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xC4,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0x90,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x55,0x89,0xFF,0xFF +,0xFF,0x00,0x00,0x00,0x00,0x00,0xA6,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x67,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x81,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8D,0x89,0xFF,0xFF +,0xFF,0x00,0x00,0x00,0x00,0x00,0x77,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x6C,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xC9,0x81,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x25,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0x86,0x81,0x00,0x00,0x00,0xFF,0x00,0x06,0x06,0x06,0xFF,0x82,0x1F,0x1F +,0x1F,0xFF,0x0E,0x21,0x21,0x21,0xFF,0x26,0x26,0x26,0xFF,0x2C,0x2C,0x2C,0xFF +,0x31,0x31,0x31,0xFF,0x36,0x36,0x36,0xFF,0x3C,0x3C,0x3C,0xFF,0x41,0x41,0x41 +,0xFF,0x46,0x46,0x46,0xFF,0x4C,0x4C,0x4C,0xFF,0x51,0x51,0x51,0xFF,0x56,0x56 +,0x56,0xFF,0x5C,0x5C,0x5C,0xFF,0x61,0x61,0x61,0xFF,0x66,0x66,0x66,0xFF,0x1B +,0x1B,0x1B,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA7,0xE5,0xFF +,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x35,0x82,0x00,0x00,0x00,0xFF,0x0D,0x56 +,0x56,0x56,0xFF,0x64,0x64,0x64,0xFF,0x5F,0x5F,0x5F,0xFF,0x59,0x59,0x59,0xFF +,0x54,0x54,0x54,0xFF,0x4F,0x4F,0x4F,0xFF,0x49,0x49,0x49,0xFF,0x44,0x44,0x44 +,0xFF,0x3F,0x3F,0x3F,0xFF,0x39,0x39,0x39,0xFF,0x34,0x34,0x34,0xFF,0x2F,0x2F +,0x2F,0xFF,0x29,0x29,0x29,0xFF,0x24,0x24,0x24,0xFF,0x82,0x1F,0x1F,0x1F,0xFF +,0x00,0x12,0x12,0x12,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xE9 +,0x88,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x24,0x81,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xCA,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x5F +,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x85,0x89,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0x82,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8C +,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA6 +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x68,0x89,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0x8F,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x49 +,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xCB,0x81,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x22,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x65 +,0x81,0x00,0x00,0x00,0xFF,0x00,0x02,0x02,0x02,0xFF,0x83,0x1F,0x1F,0x1F,0xFF +,0x0D,0x24,0x24,0x24,0xFF,0x2A,0x2A,0x2A,0xFF,0x2F,0x2F,0x2F,0xFF,0x34,0x34 +,0x34,0xFF,0x3A,0x3A,0x3A,0xFF,0x3F,0x3F,0x3F,0xFF,0x44,0x44,0x44,0xFF,0x4A +,0x4A,0x4A,0xFF,0x4F,0x4F,0x4F,0xFF,0x54,0x54,0x54,0xFF,0x5A,0x5A,0x5A,0xFF +,0x5F,0x5F,0x5F,0xFF,0x64,0x64,0x64,0xFF,0x2F,0x2F,0x2F,0xFF,0x81,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xD9,0xE5,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0x68,0x81,0x00,0x00,0x00,0xFF,0x0E,0x03,0x03,0x03,0xFF,0x65,0x65,0x65 +,0xFF,0x62,0x62,0x62,0xFF,0x5D,0x5D,0x5D,0xFF,0x57,0x57,0x57,0xFF,0x52,0x52 +,0x52,0xFF,0x4D,0x4D,0x4D,0xFF,0x47,0x47,0x47,0xFF,0x42,0x42,0x42,0xFF,0x3D +,0x3D,0x3D,0xFF,0x37,0x37,0x37,0xFF,0x32,0x32,0x32,0xFF,0x2D,0x2D,0x2D,0xFF +,0x27,0x27,0x27,0xFF,0x22,0x22,0x22,0xFF,0x82,0x1F,0x1F,0x1F,0xFF,0x00,0x0D +,0x0D,0x0D,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xCA,0x88,0xFF +,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x21,0x81,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0xCC,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x48,0x82,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8E,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0x5E,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB1,0x89,0x00 +,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x46,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0x8D,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x49,0x87,0xFF +,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xCE,0x81,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x1E,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x45,0x82,0x00 +,0x00,0x00,0xFF,0x00,0x1D,0x1D,0x1D,0xFF,0x82,0x1F,0x1F,0x1F,0xFF,0x0D,0x22 +,0x22,0x22,0xFF,0x28,0x28,0x28,0xFF,0x2D,0x2D,0x2D,0xFF,0x32,0x32,0x32,0xFF +,0x38,0x38,0x38,0xFF,0x3D,0x3D,0x3D,0xFF,0x42,0x42,0x42,0xFF,0x48,0x48,0x48 +,0xFF,0x4D,0x4D,0x4D,0xFF,0x52,0x52,0x52,0xFF,0x58,0x58,0x58,0xFF,0x5D,0x5D +,0x5D,0xFF,0x62,0x62,0x62,0xFF,0x43,0x43,0x43,0xFF,0x81,0x00,0x00,0x00,0xFF +,0x01,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x0D,0xE4,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0x9A,0x81,0x00,0x00,0x00,0xFF,0x0E,0x17,0x17,0x17,0xFF,0x65 +,0x65,0x65,0xFF,0x60,0x60,0x60,0xFF,0x5B,0x5B,0x5B,0xFF,0x55,0x55,0x55,0xFF +,0x50,0x50,0x50,0xFF,0x4B,0x4B,0x4B,0xFF,0x45,0x45,0x45,0xFF,0x40,0x40,0x40 +,0xFF,0x3B,0x3B,0x3B,0xFF,0x35,0x35,0x35,0xFF,0x30,0x30,0x30,0xFF,0x2B,0x2B +,0x2B,0xFF,0x25,0x25,0x25,0xFF,0x20,0x20,0x20,0xFF,0x82,0x1F,0x1F,0x1F,0xFF +,0x00,0x09,0x09,0x09,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA8 +,0x88,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x1D,0x81,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xCE,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x49 +,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8C,0x89,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0x3F,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xC4 +,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x35,0x89,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0x8B,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x4A +,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xD0,0x81,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x1B,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x24 +,0x82,0x00,0x00,0x00,0xFF,0x00,0x19,0x19,0x19,0xFF,0x82,0x1F,0x1F,0x1F,0xFF +,0x0D,0x20,0x20,0x20,0xFF,0x26,0x26,0x26,0xFF,0x2B,0x2B,0x2B,0xFF,0x30,0x30 +,0x30,0xFF,0x36,0x36,0x36,0xFF,0x3B,0x3B,0x3B,0xFF,0x40,0x40,0x40,0xFF,0x46 +,0x46,0x46,0xFF,0x4B,0x4B,0x4B,0xFF,0x50,0x50,0x50,0xFF,0x56,0x56,0x56,0xFF +,0x5B,0x5B,0x5B,0xFF,0x60,0x60,0x60,0xFF,0x56,0x56,0x56,0xFF,0x82,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x3E,0xE4,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0xCC,0x81,0x00,0x00,0x00,0xFF,0x0D,0x2B,0x2B,0x2B,0xFF,0x63,0x63,0x63 +,0xFF,0x5E,0x5E,0x5E,0xFF,0x59,0x59,0x59,0xFF,0x53,0x53,0x53,0xFF,0x4E,0x4E +,0x4E,0xFF,0x49,0x49,0x49,0xFF,0x43,0x43,0x43,0xFF,0x3E,0x3E,0x3E,0xFF,0x39 +,0x39,0x39,0xFF,0x33,0x33,0x33,0xFF,0x2E,0x2E,0x2E,0xFF,0x29,0x29,0x29,0xFF +,0x23,0x23,0x23,0xFF,0x83,0x1F,0x1F,0x1F,0xFF,0x00,0x05,0x05,0x05,0xFF,0x81 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x86,0x88,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0x1A,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xD1,0x87 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x4A,0x82,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x8A,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x32,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xCF,0x89,0x00,0x00,0x00,0x00,0x89 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x2A,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x89,0x82 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x4B,0x87,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0xD2,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x17,0x87 +,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0xFD,0x81,0x00 +,0x00,0x00,0xFF,0x00,0x15,0x15,0x15,0xFF,0x83,0x1F,0x1F,0x1F,0xFF,0x0D,0x24 +,0x24,0x24,0xFF,0x29,0x29,0x29,0xFF,0x2E,0x2E,0x2E,0xFF,0x34,0x34,0x34,0xFF +,0x39,0x39,0x39,0xFF,0x3E,0x3E,0x3E,0xFF,0x44,0x44,0x44,0xFF,0x49,0x49,0x49 +,0xFF,0x4E,0x4E,0x4E,0xFF,0x54,0x54,0x54,0xFF,0x59,0x59,0x59,0xFF,0x5E,0x5E +,0x5E,0xFF,0x63,0x63,0x63,0xFF,0x05,0x05,0x05,0xFF,0x81,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x70,0xE3,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x05 +,0x00,0x00,0x00,0xF9,0x81,0x00,0x00,0x00,0xFF,0x0D,0x3F,0x3F,0x3F,0xFF,0x61 +,0x61,0x61,0xFF,0x5C,0x5C,0x5C,0xFF,0x57,0x57,0x57,0xFF,0x51,0x51,0x51,0xFF +,0x4C,0x4C,0x4C,0xFF,0x47,0x47,0x47,0xFF,0x41,0x41,0x41,0xFF,0x3C,0x3C,0x3C +,0xFF,0x37,0x37,0x37,0xFF,0x31,0x31,0x31,0xFF,0x2C,0x2C,0x2C,0xFF,0x27,0x27 +,0x27,0xFF,0x21,0x21,0x21,0xFF,0x83,0x1F,0x1F,0x1F,0xFF,0x00,0x01,0x01,0x01 +,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x65,0x88,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0x16,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0xD3,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x4B,0x82,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x89,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0x26,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xDB,0x89,0x00,0x00,0x00 +,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE2,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x1E,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0x87,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x4C,0x87,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0xD5,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x14,0x88,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xE3,0x81,0x00,0x00,0x00 +,0xFF,0x00,0x10,0x10,0x10,0xFF,0x83,0x1F,0x1F,0x1F,0xFF,0x0D,0x22,0x22,0x22 +,0xFF,0x27,0x27,0x27,0xFF,0x2C,0x2C,0x2C,0xFF,0x32,0x32,0x32,0xFF,0x37,0x37 +,0x37,0xFF,0x3C,0x3C,0x3C,0xFF,0x42,0x42,0x42,0xFF,0x47,0x47,0x47,0xFF,0x4C +,0x4C,0x4C,0xFF,0x52,0x52,0x52,0xFF,0x57,0x57,0x57,0xFF,0x5C,0x5C,0x5C,0xFF +,0x62,0x62,0x62,0xFF,0x18,0x18,0x18,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0xA2,0xE3,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x31,0x82,0x00 +,0x00,0x00,0xFF,0x0C,0x51,0x51,0x51,0xFF,0x5F,0x5F,0x5F,0xFF,0x5A,0x5A,0x5A +,0xFF,0x55,0x55,0x55,0xFF,0x4F,0x4F,0x4F,0xFF,0x4A,0x4A,0x4A,0xFF,0x45,0x45 +,0x45,0xFF,0x3F,0x3F,0x3F,0xFF,0x3A,0x3A,0x3A,0xFF,0x35,0x35,0x35,0xFF,0x2F +,0x2F,0x2F,0xFF,0x2A,0x2A,0x2A,0xFF,0x25,0x25,0x25,0xFF,0x83,0x1F,0x1F,0x1F +,0xFF,0x00,0x1C,0x1C,0x1C,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x43,0x88,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x13,0x81,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xD5,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0x4C,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x87,0x89,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0x1A,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0xE6,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0xEE,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x12,0x89,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0x85,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x4D,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xD7,0x81,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x11,0x88,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0xC2,0x81,0x00,0x00,0x00,0xFF,0x00,0x0B,0x0B,0x0B,0xFF,0x84,0x1F,0x1F,0x1F +,0xFF,0x0C,0x25,0x25,0x25,0xFF,0x2A,0x2A,0x2A,0xFF,0x30,0x30,0x30,0xFF,0x35 +,0x35,0x35,0xFF,0x3A,0x3A,0x3A,0xFF,0x40,0x40,0x40,0xFF,0x45,0x45,0x45,0xFF +,0x4A,0x4A,0x4A,0xFF,0x50,0x50,0x50,0xFF,0x55,0x55,0x55,0xFF,0x5A,0x5A,0x5A +,0xFF,0x60,0x60,0x60,0xFF,0x2B,0x2B,0x2B,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xD4,0xE3,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x63,0x81 +,0x00,0x00,0x00,0xFF,0x0D,0x02,0x02,0x02,0xFF,0x61,0x61,0x61,0xFF,0x5D,0x5D +,0x5D,0xFF,0x58,0x58,0x58,0xFF,0x53,0x53,0x53,0xFF,0x4D,0x4D,0x4D,0xFF,0x48 +,0x48,0x48,0xFF,0x43,0x43,0x43,0xFF,0x3D,0x3D,0x3D,0xFF,0x38,0x38,0x38,0xFF +,0x33,0x33,0x33,0xFF,0x2D,0x2D,0x2D,0xFF,0x28,0x28,0x28,0xFF,0x23,0x23,0x23 +,0xFF,0x83,0x1F,0x1F,0x1F,0xFF,0x00,0x18,0x18,0x18,0xFF,0x82,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x22,0x88,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0x15,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xD6,0x87,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0x4D,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x85,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x0E,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xF1,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x00,0xF9,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x06,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x84,0x82,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x4E,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0xC3,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x2E,0x88,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0x8B,0x81,0x00,0x00,0x00,0xFF,0x00,0x03,0x03,0x03 +,0xFF,0x84,0x1F,0x1F,0x1F,0xFF,0x0C,0x23,0x23,0x23,0xFF,0x28,0x28,0x28,0xFF +,0x2E,0x2E,0x2E,0xFF,0x33,0x33,0x33,0xFF,0x38,0x38,0x38,0xFF,0x3E,0x3E,0x3E +,0xFF,0x43,0x43,0x43,0xFF,0x48,0x48,0x48,0xFF,0x4E,0x4E,0x4E,0xFF,0x53,0x53 +,0x53,0xFF,0x58,0x58,0x58,0xFF,0x5E,0x5E,0x5E,0xFF,0x3E,0x3E,0x3E,0xFF,0x81 +,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x0A,0xE2,0xFF +,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x96,0x81,0x00,0x00,0x00,0xFF,0x0D,0x14 +,0x14,0x14,0xFF,0x61,0x61,0x61,0xFF,0x5B,0x5B,0x5B,0xFF,0x56,0x56,0x56,0xFF +,0x51,0x51,0x51,0xFF,0x4B,0x4B,0x4B,0xFF,0x46,0x46,0x46,0xFF,0x41,0x41,0x41 +,0xFF,0x3B,0x3B,0x3B,0xFF,0x36,0x36,0x36,0xFF,0x31,0x31,0x31,0xFF,0x2B,0x2B +,0x2B,0xFF,0x26,0x26,0x26,0xFF,0x21,0x21,0x21,0xFF,0x83,0x1F,0x1F,0x1F,0xFF +,0x00,0x13,0x13,0x13,0xFF,0x81,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFB +,0x00,0x00,0x00,0x04,0x88,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x3C,0x81 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB6,0x87,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0x4E,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x83,0x89 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x03,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xFC,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0xFC,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x03,0x89 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x82,0x82,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x4F,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x96,0x81 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x5B,0x88,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0x45,0x82,0x00,0x00,0x00,0xFF,0x00,0x19,0x19,0x19,0xFF,0x83 +,0x1F,0x1F,0x1F,0xFF,0x0C,0x21,0x21,0x21,0xFF,0x26,0x26,0x26,0xFF,0x2C,0x2C +,0x2C,0xFF,0x31,0x31,0x31,0xFF,0x36,0x36,0x36,0xFF,0x3C,0x3C,0x3C,0xFF,0x41 +,0x41,0x41,0xFF,0x46,0x46,0x46,0xFF,0x4C,0x4C,0x4C,0xFF,0x51,0x51,0x51,0xFF +,0x56,0x56,0x56,0xFF,0x5C,0x5C,0x5C,0xFF,0x50,0x50,0x50,0xFF,0x82,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x39,0xE2,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0xC8,0x81,0x00,0x00,0x00,0xFF,0x0C,0x27,0x27,0x27,0xFF,0x5F,0x5F,0x5F +,0xFF,0x59,0x59,0x59,0xFF,0x54,0x54,0x54,0xFF,0x4F,0x4F,0x4F,0xFF,0x49,0x49 +,0x49,0xFF,0x44,0x44,0x44,0xFF,0x3F,0x3F,0x3F,0xFF,0x39,0x39,0x39,0xFF,0x34 +,0x34,0x34,0xFF,0x2F,0x2F,0x2F,0xFF,0x29,0x29,0x29,0xFF,0x24,0x24,0x24,0xFF +,0x84,0x1F,0x1F,0x1F,0xFF,0x00,0x0A,0x0A,0x0A,0xFF,0x81,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xC4,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x69 +,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x89,0x87,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0x4F,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x81 +,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x08,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xF8,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0xEF,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x12 +,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x80,0x82,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x56,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x6A +,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x87,0x88,0xFF,0xFF,0xFF,0x00 +,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0xF6,0x81,0x00,0x00,0x00,0xFF,0x00 +,0x11,0x11,0x11,0xFF,0x84,0x1F,0x1F,0x1F,0xFF,0x0C,0x24,0x24,0x24,0xFF,0x2A +,0x2A,0x2A,0xFF,0x2F,0x2F,0x2F,0xFF,0x34,0x34,0x34,0xFF,0x3A,0x3A,0x3A,0xFF +,0x3F,0x3F,0x3F,0xFF,0x44,0x44,0x44,0xFF,0x4A,0x4A,0x4A,0xFF,0x4F,0x4F,0x4F +,0xFF,0x54,0x54,0x54,0xFF,0x5A,0x5A,0x5A,0xFF,0x5E,0x5E,0x5E,0xFF,0x03,0x03 +,0x03,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x6B,0xE1,0xFF,0xFF +,0xFF,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xF6,0x81,0x00,0x00,0x00 +,0xFF,0x0C,0x3A,0x3A,0x3A,0xFF,0x5D,0x5D,0x5D,0xFF,0x57,0x57,0x57,0xFF,0x52 +,0x52,0x52,0xFF,0x4D,0x4D,0x4D,0xFF,0x47,0x47,0x47,0xFF,0x42,0x42,0x42,0xFF +,0x3D,0x3D,0x3D,0xFF,0x37,0x37,0x37,0xFF,0x32,0x32,0x32,0xFF,0x2D,0x2D,0x2D +,0xFF,0x27,0x27,0x27,0xFF,0x22,0x22,0x22,0xFF,0x84,0x1F,0x1F,0x1F,0xFF,0x00 +,0x02,0x02,0x02,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x7E,0x89 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x95,0x81,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x5D,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x61,0x82 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x7D,0x89,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0x17,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xEA,0x89 +,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x21,0x89,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0x63,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x85,0x87 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x3D,0x81,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xB4,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xB9,0x81 +,0x00,0x00,0x00,0xFF,0x00,0x08,0x08,0x08,0xFF,0x84,0x1F,0x1F,0x1F,0xFF,0x0C +,0x22,0x22,0x22,0xFF,0x28,0x28,0x28,0xFF,0x2D,0x2D,0x2D,0xFF,0x32,0x32,0x32 +,0xFF,0x38,0x38,0x38,0xFF,0x3D,0x3D,0x3D,0xFF,0x42,0x42,0x42,0xFF,0x48,0x48 +,0x48,0xFF,0x4D,0x4D,0x4D,0xFF,0x52,0x52,0x52,0xFF,0x58,0x58,0x58,0xFF,0x5D +,0x5D,0x5D,0xFF,0x15,0x15,0x15,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x9D,0xE1,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x2D,0x82,0x00,0x00 +,0x00,0xFF,0x0C,0x4C,0x4C,0x4C,0xFF,0x5B,0x5B,0x5B,0xFF,0x55,0x55,0x55,0xFF +,0x50,0x50,0x50,0xFF,0x4B,0x4B,0x4B,0xFF,0x45,0x45,0x45,0xFF,0x40,0x40,0x40 +,0xFF,0x3B,0x3B,0x3B,0xFF,0x35,0x35,0x35,0xFF,0x30,0x30,0x30,0xFF,0x2B,0x2B +,0x2B,0xFF,0x25,0x25,0x25,0xFF,0x20,0x20,0x20,0xFF,0x83,0x1F,0x1F,0x1F,0xFF +,0x00,0x18,0x18,0x18,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x38 +,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xC2,0x81,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x30,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x96 +,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x54,0x89,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0x26,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xDC +,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2 +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x30,0x89,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0x2E,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xBB +,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x11,0x81,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xE0,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x73 +,0x81,0x00,0x00,0x00,0xFF,0x01,0x01,0x01,0x01,0xFF,0x1E,0x1E,0x1E,0xFF,0x83 +,0x1F,0x1F,0x1F,0xFF,0x0C,0x20,0x20,0x20,0xFF,0x25,0x25,0x25,0xFF,0x2B,0x2B +,0x2B,0xFF,0x30,0x30,0x30,0xFF,0x36,0x36,0x36,0xFF,0x3B,0x3B,0x3B,0xFF,0x40 +,0x40,0x40,0xFF,0x46,0x46,0x46,0xFF,0x4B,0x4B,0x4B,0xFF,0x50,0x50,0x50,0xFF +,0x56,0x56,0x56,0xFF,0x5B,0x5B,0x5B,0xFF,0x28,0x28,0x28,0xFF,0x81,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xCF,0xE1,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0x5F,0x81,0x00,0x00,0x00,0xFF,0x0C,0x02,0x02,0x02,0xFF,0x5B,0x5B,0x5B +,0xFF,0x59,0x59,0x59,0xFF,0x53,0x53,0x53,0xFF,0x4E,0x4E,0x4E,0xFF,0x49,0x49 +,0x49,0xFF,0x43,0x43,0x43,0xFF,0x3E,0x3E,0x3E,0xFF,0x39,0x39,0x39,0xFF,0x33 +,0x33,0x33,0xFF,0x2E,0x2E,0x2E,0xFF,0x29,0x29,0x29,0xFF,0x23,0x23,0x23,0xFF +,0x84,0x1F,0x1F,0x1F,0xFF,0x00,0x0F,0x0F,0x0F,0xFF,0x81,0x00,0x00,0x00,0xFF +,0x01,0x00,0x00,0x00,0xEF,0x00,0x00,0x00,0x03,0x89,0xFF,0xFF,0xFF,0x00,0x03 +,0x00,0x00,0x00,0xEE,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFC,0x00,0x00,0x00 +,0x07,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xCB,0x82,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x1F,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0x35,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xCE,0x89,0x00,0x00,0x00 +,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC4,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x3F,0x89,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00 +,0x03,0x00,0x00,0x00,0xF5,0x81,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEF +,0x00,0x00,0x00,0x01,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xE5,0x81 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x0E,0x88,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0x2C,0x82,0x00,0x00,0x00,0xFF,0x00,0x16,0x16,0x16,0xFF,0x84 +,0x1F,0x1F,0x1F,0xFF,0x0B,0x24,0x24,0x24,0xFF,0x29,0x29,0x29,0xFF,0x2E,0x2E +,0x2E,0xFF,0x34,0x34,0x34,0xFF,0x39,0x39,0x39,0xFF,0x3E,0x3E,0x3E,0xFF,0x44 +,0x44,0x44,0xFF,0x49,0x49,0x49,0xFF,0x4E,0x4E,0x4E,0xFF,0x54,0x54,0x54,0xFF +,0x59,0x59,0x59,0xFF,0x39,0x39,0x39,0xFF,0x81,0x00,0x00,0x00,0xFF,0x01,0x00 +,0x00,0x00,0xFA,0x00,0x00,0x00,0x07,0xE0,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0x92,0x81,0x00,0x00,0x00,0xFF,0x0C,0x11,0x11,0x11,0xFF,0x5C,0x5C,0x5C +,0xFF,0x57,0x57,0x57,0xFF,0x51,0x51,0x51,0xFF,0x4C,0x4C,0x4C,0xFF,0x47,0x47 +,0x47,0xFF,0x41,0x41,0x41,0xFF,0x3C,0x3C,0x3C,0xFF,0x37,0x37,0x37,0xFF,0x31 +,0x31,0x31,0xFF,0x2C,0x2C,0x2C,0xFF,0x27,0x27,0x27,0xFF,0x21,0x21,0x21,0xFF +,0x84,0x1F,0x1F,0x1F,0xFF,0x00,0x07,0x07,0x07,0xFF,0x81,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xAC,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x1D +,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xD7,0x87,0xFF,0xFF,0xFF,0x00 +,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xF9,0x81,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xE9,0x8A,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x44,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xC0,0x89,0x00,0x00,0x00,0x00,0x89 +,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB6,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x50,0x8A,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xC2,0x82 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x26,0x87,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0xB8,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x52,0x89 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xE6,0x81,0x00,0x00,0x00,0xFF,0x00 +,0x0B,0x0B,0x0B,0xFF,0x84,0x1F,0x1F,0x1F,0xFF,0x0B,0x22,0x22,0x22,0xFF,0x27 +,0x27,0x27,0xFF,0x2C,0x2C,0x2C,0xFF,0x32,0x32,0x32,0xFF,0x37,0x37,0x37,0xFF +,0x3C,0x3C,0x3C,0xFF,0x42,0x42,0x42,0xFF,0x47,0x47,0x47,0xFF,0x4C,0x4C,0x4C +,0xFF,0x52,0x52,0x52,0xFF,0x57,0x57,0x57,0xFF,0x4A,0x4A,0x4A,0xFF,0x82,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x34,0xE0,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0xC4,0x81,0x00,0x00,0x00,0xFF,0x0B,0x24,0x24,0x24,0xFF,0x5A,0x5A +,0x5A,0xFF,0x55,0x55,0x55,0xFF,0x4F,0x4F,0x4F,0xFF,0x4A,0x4A,0x4A,0xFF,0x45 +,0x45,0x45,0xFF,0x3F,0x3F,0x3F,0xFF,0x3A,0x3A,0x3A,0xFF,0x35,0x35,0x35,0xFF +,0x2F,0x2F,0x2F,0xFF,0x2A,0x2A,0x2A,0xFF,0x25,0x25,0x25,0xFF,0x84,0x1F,0x1F +,0x1F,0xFF,0x00,0x1D,0x1D,0x1D,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x66,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x70,0x81,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xA7,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0x36,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB3,0x8A,0xFF,0xFF +,0xFF,0x00,0x00,0x00,0x00,0x00,0x58,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xB0,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x9A,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x73,0x8A,0xFF,0xFF +,0xFF,0x00,0x00,0x00,0x00,0x00,0x8D,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x5C,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x6D,0x81,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xB5,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0x94,0x82,0x00,0x00,0x00,0xFF,0x00,0x1A,0x1A,0x1A,0xFF,0x84,0x1F,0x1F +,0x1F,0xFF,0x0B,0x25,0x25,0x25,0xFF,0x2A,0x2A,0x2A,0xFF,0x30,0x30,0x30,0xFF +,0x35,0x35,0x35,0xFF,0x3A,0x3A,0x3A,0xFF,0x40,0x40,0x40,0xFF,0x45,0x45,0x45 +,0xFF,0x4A,0x4A,0x4A,0xFF,0x50,0x50,0x50,0xFF,0x55,0x55,0x55,0xFF,0x58,0x58 +,0x58,0xFF,0x02,0x02,0x02,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x66,0xDF,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0xF4 +,0x81,0x00,0x00,0x00,0xFF,0x0B,0x35,0x35,0x35,0xFF,0x58,0x58,0x58,0xFF,0x53 +,0x53,0x53,0xFF,0x4D,0x4D,0x4D,0xFF,0x48,0x48,0x48,0xFF,0x43,0x43,0x43,0xFF +,0x3D,0x3D,0x3D,0xFF,0x38,0x38,0x38,0xFF,0x33,0x33,0x33,0xFF,0x2D,0x2D,0x2D +,0xFF,0x28,0x28,0x28,0xFF,0x23,0x23,0x23,0xFF,0x84,0x1F,0x1F,0x1F,0xFF,0x00 +,0x12,0x12,0x12,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x20,0x89 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xD2,0x81,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x4E,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x6B,0x82 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x7E,0x8A,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0x81,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8F,0x89 +,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x9E,0x8A,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0x57,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x92,0x87 +,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xF8,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x1B,0x88,0xFF,0xFF,0xFF,0x00 +,0x01,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0xFA,0x81,0x00,0x00,0x00,0xFF,0x00 +,0x0C,0x0C,0x0C,0xFF,0x84,0x1F,0x1F,0x1F,0xFF,0x0B,0x23,0x23,0x23,0xFF,0x28 +,0x28,0x28,0xFF,0x2E,0x2E,0x2E,0xFF,0x33,0x33,0x33,0xFF,0x38,0x38,0x38,0xFF +,0x3E,0x3E,0x3E,0xFF,0x43,0x43,0x43,0xFF,0x48,0x48,0x48,0xFF,0x4E,0x4E,0x4E +,0xFF,0x53,0x53,0x53,0xFF,0x58,0x58,0x58,0xFF,0x12,0x12,0x12,0xFF,0x81,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x98,0xDF,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0x29,0x82,0x00,0x00,0x00,0xFF,0x0B,0x46,0x46,0x46,0xFF,0x56,0x56 +,0x56,0xFF,0x51,0x51,0x51,0xFF,0x4B,0x4B,0x4B,0xFF,0x46,0x46,0x46,0xFF,0x41 +,0x41,0x41,0xFF,0x3B,0x3B,0x3B,0xFF,0x36,0x36,0x36,0xFF,0x31,0x31,0x31,0xFF +,0x2B,0x2B,0x2B,0xFF,0x26,0x26,0x26,0xFF,0x21,0x21,0x21,0xFF,0x83,0x1F,0x1F +,0x1F,0xFF,0x01,0x1E,0x1E,0x1E,0xFF,0x04,0x04,0x04,0xFF,0x81,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0xCB,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0x35,0x81,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE7,0x00,0x00,0x00,0x04 +,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xA0,0x82,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x48,0x8A,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xAB +,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x65,0x89,0x00,0x00,0x00,0x00 +,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xC9,0x8A,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x22 +,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xC8,0x88,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0xA7,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x7B +,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x9C,0x82,0x00,0x00,0x00,0xFF +,0x00,0x1B,0x1B,0x1B,0xFF,0x83,0x1F,0x1F,0x1F,0xFF,0x0B,0x21,0x21,0x21,0xFF +,0x26,0x26,0x26,0xFF,0x2C,0x2C,0x2C,0xFF,0x31,0x31,0x31,0xFF,0x36,0x36,0x36 +,0xFF,0x3C,0x3C,0x3C,0xFF,0x41,0x41,0x41,0xFF,0x46,0x46,0x46,0xFF,0x4C,0x4C +,0x4C,0xFF,0x51,0x51,0x51,0xFF,0x56,0x56,0x56,0xFF,0x24,0x24,0x24,0xFF,0x81 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xCB,0xDF,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0x5B,0x81,0x00,0x00,0x00,0xFF,0x0B,0x01,0x01,0x01,0xFF,0x55 +,0x55,0x55,0xFF,0x54,0x54,0x54,0xFF,0x4F,0x4F,0x4F,0xFF,0x49,0x49,0x49,0xFF +,0x44,0x44,0x44,0xFF,0x3F,0x3F,0x3F,0xFF,0x39,0x39,0x39,0xFF,0x34,0x34,0x34 +,0xFF,0x2F,0x2F,0x2F,0xFF,0x29,0x29,0x29,0xFF,0x24,0x24,0x24,0xFF,0x84,0x1F +,0x1F,0x1F,0xFF,0x00,0x13,0x13,0x13,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x4E,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x97,0x81,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x88,0x88,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0xD6,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x13,0x8A,0xFF +,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xD6,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x3B,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x1E,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF2,0x00,0x00 +,0x00,0x01,0x8A,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xEB,0x81,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x07,0x87,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0x44,0x81,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00 +,0xDD,0x00,0x00,0x00,0x01,0x88,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x22 +,0x00,0x00,0x00,0xFB,0x81,0x00,0x00,0x00,0xFF,0x00,0x0C,0x0C,0x0C,0xFF,0x84 +,0x1F,0x1F,0x1F,0xFF,0x0A,0x24,0x24,0x24,0xFF,0x2A,0x2A,0x2A,0xFF,0x2F,0x2F +,0x2F,0xFF,0x34,0x34,0x34,0xFF,0x3A,0x3A,0x3A,0xFF,0x3F,0x3F,0x3F,0xFF,0x44 +,0x44,0x44,0xFF,0x4A,0x4A,0x4A,0xFF,0x4F,0x4F,0x4F,0xFF,0x54,0x54,0x54,0xFF +,0x35,0x35,0x35,0xFF,0x81,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF8,0x00 +,0x00,0x00,0x04,0xDE,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x8E,0x81,0x00 +,0x00,0x00,0xFF,0x0B,0x0F,0x0F,0x0F,0xFF,0x57,0x57,0x57,0xFF,0x52,0x52,0x52 +,0xFF,0x4D,0x4D,0x4D,0xFF,0x47,0x47,0x47,0xFF,0x42,0x42,0x42,0xFF,0x3D,0x3D +,0x3D,0xFF,0x37,0x37,0x37,0xFF,0x32,0x32,0x32,0xFF,0x2D,0x2D,0x2D,0xFF,0x27 +,0x27,0x27,0xFF,0x22,0x22,0x22,0xFF,0x83,0x1F,0x1F,0x1F,0xFF,0x01,0x1E,0x1E +,0x1E,0xFF,0x04,0x04,0x04,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0xCF,0x89,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0xF0 +,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x26,0x87,0xFF,0xFF,0xFF,0x00 +,0x01,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xFD,0x81,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xDD,0x8A,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x06,0x00 +,0x00,0x00,0xFB,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x12,0x89,0x00 +,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00 +,0x00,0xF3,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x1E,0x8A,0xFF,0xFF +,0xFF,0x00,0x00,0x00,0x00,0x00,0xB5,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x58,0x87,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00 +,0xDF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x42,0x89,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0xA0,0x81,0x00,0x00,0x00,0xFF,0x01,0x01,0x01,0x01 +,0xFF,0x18,0x18,0x18,0xFF,0x83,0x1F,0x1F,0x1F,0xFF,0x0A,0x22,0x22,0x22,0xFF +,0x28,0x28,0x28,0xFF,0x2D,0x2D,0x2D,0xFF,0x32,0x32,0x32,0xFF,0x38,0x38,0x38 +,0xFF,0x3D,0x3D,0x3D,0xFF,0x42,0x42,0x42,0xFF,0x48,0x48,0x48,0xFF,0x4D,0x4D +,0x4D,0xFF,0x52,0x52,0x52,0xFF,0x45,0x45,0x45,0xFF,0x82,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x2F,0xDE,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xC0 +,0x81,0x00,0x00,0x00,0xFF,0x0B,0x20,0x20,0x20,0xFF,0x55,0x55,0x55,0xFF,0x50 +,0x50,0x50,0xFF,0x4B,0x4B,0x4B,0xFF,0x45,0x45,0x45,0xFF,0x40,0x40,0x40,0xFF +,0x3B,0x3B,0x3B,0xFF,0x35,0x35,0x35,0xFF,0x30,0x30,0x30,0xFF,0x2B,0x2B,0x2B +,0xFF,0x25,0x25,0x25,0xFF,0x20,0x20,0x20,0xFF,0x83,0x1F,0x1F,0x1F,0xFF,0x00 +,0x13,0x13,0x13,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x52,0x89 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x5B,0x81,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xC2,0x88,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x71,0x82 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA0,0x8A,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0x2C,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE8,0xFF +,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x01,0xFF +,0xFF,0xFF,0x00,0x00,0x00,0x00,0xCB,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x55,0x8A,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x60,0x82,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xBB,0x88,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0x7E,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x89,0xFF,0xFF +,0xFF,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0xFC,0x81,0x00,0x00,0x00 +,0xFF,0x01,0x03,0x03,0x03,0xFF,0x1C,0x1C,0x1C,0xFF,0x82,0x1F,0x1F,0x1F,0xFF +,0x0B,0x20,0x20,0x20,0xFF,0x25,0x25,0x25,0xFF,0x2B,0x2B,0x2B,0xFF,0x30,0x30 +,0x30,0xFF,0x35,0x35,0x35,0xFF,0x3B,0x3B,0x3B,0xFF,0x40,0x40,0x40,0xFF,0x46 +,0x46,0x46,0xFF,0x4B,0x4B,0x4B,0xFF,0x50,0x50,0x50,0xFF,0x53,0x53,0x53,0xFF +,0x01,0x01,0x01,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x61,0xDD +,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xF1,0x81,0x00 +,0x00,0x00,0xFF,0x0A,0x31,0x31,0x31,0xFF,0x53,0x53,0x53,0xFF,0x4E,0x4E,0x4E +,0xFF,0x49,0x49,0x49,0xFF,0x43,0x43,0x43,0xFF,0x3E,0x3E,0x3E,0xFF,0x39,0x39 +,0x39,0xFF,0x33,0x33,0x33,0xFF,0x2E,0x2E,0x2E,0xFF,0x29,0x29,0x29,0xFF,0x23 +,0x23,0x23,0xFF,0x83,0x1F,0x1F,0x1F,0xFF,0x01,0x1C,0x1C,0x1C,0xFF,0x03,0x03 +,0x03,0xFF,0x81,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xD3,0x00,0x00,0x00 +,0x01,0x88,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0xD9 +,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x5F,0x88,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0xD4,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x41 +,0x8A,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x6B,0x83,0x00,0x00,0x00,0xFF +,0x01,0x00,0x00,0x00,0xBB,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89 +,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x8F,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x9D,0x8A,0xFF,0xFF,0xFF,0x00,0x01,0x00 +,0x00,0x00,0x0B,0x00,0x00,0x00,0xF2,0x81,0x00,0x00,0x00,0xFF,0x01,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x20,0x87,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00 +,0x1D,0x00,0x00,0x00,0xF9,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x66 +,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x81,0x82,0x00,0x00,0x00,0xFF +,0x01,0x06,0x06,0x06,0xFF,0x1E,0x1E,0x1E,0xFF,0x82,0x1F,0x1F,0x1F,0xFF,0x0A +,0x24,0x24,0x24,0xFF,0x29,0x29,0x29,0xFF,0x2E,0x2E,0x2E,0xFF,0x34,0x34,0x34 +,0xFF,0x39,0x39,0x39,0xFF,0x3E,0x3E,0x3E,0xFF,0x44,0x44,0x44,0xFF,0x49,0x49 +,0x49,0xFF,0x4E,0x4E,0x4E,0xFF,0x54,0x54,0x54,0xFF,0x10,0x10,0x10,0xFF,0x81 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x93,0xDD,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0x25,0x82,0x00,0x00,0x00,0xFF,0x0A,0x42,0x42,0x42,0xFF,0x51 +,0x51,0x51,0xFF,0x4C,0x4C,0x4C,0xFF,0x47,0x47,0x47,0xFF,0x41,0x41,0x41,0xFF +,0x3C,0x3C,0x3C,0xFF,0x37,0x37,0x37,0xFF,0x31,0x31,0x31,0xFF,0x2C,0x2C,0x2C +,0xFF,0x27,0x27,0x27,0xFF,0x21,0x21,0x21,0xFF,0x82,0x1F,0x1F,0x1F,0xFF,0x01 +,0x1E,0x1E,0x1E,0xFF,0x06,0x06,0x06,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x57,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x94,0x81,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE4,0x00,0x00,0x00,0x0A,0x87,0xFF,0xFF +,0xFF,0x00,0x00,0x00,0x00,0x00,0x39,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00 +,0x00,0xDD,0x00,0x00,0x00,0x01,0x8A,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0xB2,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x7A,0xFF,0xFF,0xFF,0x00 +,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x4A,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xE4,0x8B +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x9B,0x82,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x85,0x88,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x77,0x81 +,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF3,0x00,0x00,0x00,0x22,0x88,0xFF +,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xA9,0x82,0x00,0x00 +,0x00,0xFF,0x01,0x0A,0x0A,0x0A,0xFF,0x1E,0x1E,0x1E,0xFF,0x81,0x1F,0x1F,0x1F +,0xFF,0x0A,0x22,0x22,0x22,0xFF,0x27,0x27,0x27,0xFF,0x2C,0x2C,0x2C,0xFF,0x32 +,0x32,0x32,0xFF,0x37,0x37,0x37,0xFF,0x3C,0x3C,0x3C,0xFF,0x42,0x42,0x42,0xFF +,0x47,0x47,0x47,0xFF,0x4C,0x4C,0x4C,0xFF,0x52,0x52,0x52,0xFF,0x20,0x20,0x20 +,0xFF,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xC6,0xDD,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0x57,0x82,0x00,0x00,0x00,0xFF,0x09,0x50,0x50,0x50 +,0xFF,0x4F,0x4F,0x4F,0xFF,0x4A,0x4A,0x4A,0xFF,0x45,0x45,0x45,0xFF,0x3F,0x3F +,0x3F,0xFF,0x3A,0x3A,0x3A,0xFF,0x35,0x35,0x35,0xFF,0x2F,0x2F,0x2F,0xFF,0x2A +,0x2A,0x2A,0xFF,0x25,0x25,0x25,0xFF,0x83,0x1F,0x1F,0x1F,0xFF,0x00,0x0B,0x0B +,0x0B,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xAD,0x00,0x00,0x00 +,0x01,0x88,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0xFE +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x46,0x88,0xFF,0xFF +,0xFF,0x00,0x00,0x00,0x00,0x00,0xAA,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x7C,0x8A,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00 +,0xF3,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x35,0xFF,0xFF,0xFF,0x00 +,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x02,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x0B,0x00,0x00,0x00,0xF9,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x2C,0x8A,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x39,0x82,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF1,0x00,0x00,0x00,0x13,0x87,0xFF,0xFF +,0xFF,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0xC5,0x81,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xC2,0x00,0x00,0x00,0x02,0x88,0xFF,0xFF,0xFF,0x00 +,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0xCA,0x82,0x00,0x00,0x00,0xFF,0x01 +,0x05,0x05,0x05,0xFF,0x19,0x19,0x19,0xFF,0x81,0x1F,0x1F,0x1F,0xFF,0x09,0x25 +,0x25,0x25,0xFF,0x2A,0x2A,0x2A,0xFF,0x30,0x30,0x30,0xFF,0x35,0x35,0x35,0xFF +,0x3A,0x3A,0x3A,0xFF,0x40,0x40,0x40,0xFF,0x45,0x45,0x45,0xFF,0x4A,0x4A,0x4A +,0xFF,0x50,0x50,0x50,0xFF,0x31,0x31,0x31,0xFF,0x81,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xF5,0x00,0x00,0x00,0x03,0xDC,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0x8A,0x81,0x00,0x00,0x00,0xFF,0x0A,0x0C,0x0C,0x0C,0xFF,0x53,0x53 +,0x53,0xFF,0x4D,0x4D,0x4D,0xFF,0x48,0x48,0x48,0xFF,0x43,0x43,0x43,0xFF,0x3D +,0x3D,0x3D,0xFF,0x38,0x38,0x38,0xFF,0x33,0x33,0x33,0xFF,0x2D,0x2D,0x2D,0xFF +,0x28,0x28,0x28,0xFF,0x23,0x23,0x23,0xFF,0x82,0x1F,0x1F,0x1F,0xFF,0x00,0x0E +,0x0E,0x0E,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xCE,0x00,0x00 +,0x00,0x0A,0x88,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x11,0x00,0x00,0x00 +,0xE4,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x94,0x88,0xFF,0xFF,0xFF +,0x00,0x01,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0xFE,0x81,0x00,0x00,0x00,0xFF +,0x01,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x1D,0x8A,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0x40,0x83,0x00,0x00,0x00,0xFF,0x02,0x00,0x00,0x00,0xEE,0x00 +,0x00,0x00,0x02,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00 +,0x00,0x00,0x81,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xC0,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x73,0x8B,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0xC5,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8C,0x88,0xFF,0xFF +,0xFF,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0xF4,0x81,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x74,0x89,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00 +,0x19,0x00,0x00,0x00,0xE3,0x83,0x00,0x00,0x00,0xFF,0x0B,0x10,0x10,0x10,0xFF +,0x1E,0x1E,0x1E,0xFF,0x23,0x23,0x23,0xFF,0x28,0x28,0x28,0xFF,0x2E,0x2E,0x2E +,0xFF,0x33,0x33,0x33,0xFF,0x38,0x38,0x38,0xFF,0x3E,0x3E,0x3E,0xFF,0x43,0x43 +,0x43,0xFF,0x48,0x48,0x48,0xFF,0x4E,0x4E,0x4E,0xFF,0x40,0x40,0x40,0xFF,0x82 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x2A,0xDC,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0xBC,0x81,0x00,0x00,0x00,0xFF,0x0D,0x1D,0x1D,0x1D,0xFF,0x51 +,0x51,0x51,0xFF,0x4B,0x4B,0x4B,0xFF,0x46,0x46,0x46,0xFF,0x41,0x41,0x41,0xFF +,0x3B,0x3B,0x3B,0xFF,0x36,0x36,0x36,0xFF,0x31,0x31,0x31,0xFF,0x2B,0x2B,0x2B +,0xFF,0x26,0x26,0x26,0xFF,0x21,0x21,0x21,0xFF,0x1F,0x1F,0x1F,0xFF,0x1B,0x1B +,0x1B,0xFF,0x07,0x07,0x07,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00 +,0xE7,0x00,0x00,0x00,0x1D,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xA7 +,0x81,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xDA,0x00,0x00,0x00,0x0A,0x88 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xB6,0x82,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0xA0,0x8B,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x87,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xAC,0x81,0xFF,0xFF,0xFF,0x00,0x89 +,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x81,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0x7A,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xC3,0x8B +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x41,0x82,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xF7,0x00,0x00,0x00,0x1B,0x88,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0x69,0x81,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF8,0x00,0x00 +,0x00,0x32,0x89,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x27,0x00,0x00,0x00 +,0xCC,0x83,0x00,0x00,0x00,0xFF,0x0A,0x01,0x01,0x01,0xFF,0x0B,0x0B,0x0B,0xFF +,0x1A,0x1A,0x1A,0xFF,0x2A,0x2A,0x2A,0xFF,0x31,0x31,0x31,0xFF,0x36,0x36,0x36 +,0xFF,0x3C,0x3C,0x3C,0xFF,0x41,0x41,0x41,0xFF,0x46,0x46,0x46,0xFF,0x4B,0x4B +,0x4B,0xFF,0x45,0x45,0x45,0xFF,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x5C,0xDC,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xEE,0x81,0x00,0x00,0x00 +,0xFF,0x0C,0x2D,0x2D,0x2D,0xFF,0x4F,0x4F,0x4F,0xFF,0x49,0x49,0x49,0xFF,0x44 +,0x44,0x44,0xFF,0x3F,0x3F,0x3F,0xFF,0x39,0x39,0x39,0xFF,0x34,0x34,0x34,0xFF +,0x2F,0x2F,0x2F,0xFF,0x29,0x29,0x29,0xFF,0x24,0x24,0x24,0xFF,0x1E,0x1E,0x1E +,0xFF,0x12,0x12,0x12,0xFF,0x01,0x01,0x01,0xFF,0x82,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xF7,0x00,0x00,0x00,0x37,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0x6D,0x81,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFC,0x00,0x00 +,0x00,0x37,0x88,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x3C,0x82,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xF9,0x00,0x00,0x00,0x20,0x8A,0xFF,0xFF,0xFF +,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xDD,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x67,0x81,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00 +,0x89,0x00,0x00,0x00,0x00,0x81,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x32 +,0x84,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x28,0x8B,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0xBC,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA2 +,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xB9,0x81,0x00,0x00,0x00,0xFF +,0x01,0x00,0x00,0x00,0xF1,0x00,0x00,0x00,0x44,0x89,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xFB,0x85,0x00,0x00 +,0x00,0xFF,0x04,0x04,0x04,0x04,0xFF,0x0A,0x0A,0x0A,0xFF,0x0F,0x0F,0x0F,0xFF +,0x0B,0x0B,0x0B,0xFF,0x05,0x05,0x05,0xFF,0x84,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x8E,0xDB,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x21,0x82,0x00 +,0x00,0x00,0xFF,0x0A,0x2E,0x2E,0x2E,0xFF,0x43,0x43,0x43,0xFF,0x44,0x44,0x44 +,0xFF,0x42,0x42,0x42,0xFF,0x3D,0x3D,0x3D,0xFF,0x37,0x37,0x37,0xFF,0x32,0x32 +,0x32,0xFF,0x29,0x29,0x29,0xFF,0x1B,0x1B,0x1B,0xFF,0x0C,0x0C,0x0C,0xFF,0x01 +,0x01,0x01,0xFF,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xDB,0x00,0x00 +,0x00,0x38,0x88,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00 +,0x87,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x83,0x88,0xFF,0xFF,0xFF +,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xCD,0x82,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x93,0x8B,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x44 +,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x1B,0x81 +,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x82 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xD3,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x8D,0x8B,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x37,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x4E,0x88,0xFF,0xFF,0xFF,0x00,0x01 +,0x00,0x00,0x00,0x1B,0x00,0x00,0x00,0xE4,0x81,0x00,0x00,0x00,0xFF,0x01,0x00 +,0x00,0x00,0xFA,0x00,0x00,0x00,0x5E,0x8A,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00 +,0x00,0x34,0x00,0x00,0x00,0xCD,0x8E,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0xC0,0xDB,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x53,0x85,0x00,0x00,0x00 +,0xFF,0x03,0x04,0x04,0x04,0xFF,0x09,0x09,0x09,0xFF,0x06,0x06,0x06,0xFF,0x01 +,0x01,0x01,0xFF,0x86,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x97,0x00,0x00 +,0x00,0x0B,0x88,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00 +,0xA7,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xB3,0x00,0x00,0x00,0x05 +,0x88,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x81,0x82,0x00,0x00,0x00,0xFF +,0x01,0x00,0x00,0x00,0xF4,0x00,0x00,0x00,0x18,0x8B,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0xAA,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB4,0x82 +,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x82 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x6E,0x83,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xEC,0x00,0x00,0x00,0x07,0x8B,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0xA1,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE8,0x00,0x00 +,0x00,0x13,0x88,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x1B,0x00,0x00,0x00 +,0xD1,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x7C,0x8B,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x2C,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0xE0,0x8A +,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEF,0x00,0x00,0x00,0xC6,0xDB,0xFF +,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x85,0x8E,0x00,0x00,0x00,0xFF,0x01,0x00 +,0x00,0x00,0xD1,0x00,0x00,0x00,0x48,0x89,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00 +,0x00,0x12,0x00,0x00,0x00,0xC2,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00 +,0x96,0x00,0x00,0x00,0x03,0x88,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x35 +,0x00,0x00,0x00,0xFB,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x6B,0x8B +,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0xF9,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x4E,0x82,0xFF,0xFF,0xFF,0x00,0x89,0x00 +,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x82,0xFF,0xFF,0xFF,0x00,0x01,0x00 +,0x00,0x00,0x11,0x00,0x00,0x00,0xF7,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x58,0x8B,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x10,0x00,0x00,0x00 +,0xE4,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xAC,0x89,0xFF,0xFF,0xFF +,0x00,0x01,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0xBC,0x82,0x00,0x00,0x00,0xFF +,0x01,0x00,0x00,0x00,0x9B,0x00,0x00,0x00,0x04,0x8B,0xFF,0xFF,0xFF,0x00,0x05 +,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x53,0x00,0x00,0x00 +,0x70,0x00,0x00,0x00,0x8D,0x00,0x00,0x00,0xF7,0x82,0x00,0x00,0x00,0xFF,0x02 +,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x0A,0xDD,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0xD1,0x00,0x00,0x00,0xEB +,0x89,0x00,0x00,0x00,0xFF,0x02,0x00,0x00,0x00,0xDF,0x00,0x00,0x00,0x85,0x00 +,0x00,0x00,0x2B,0x8A,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x1D,0x00,0x00 +,0x00,0xD8,0x81,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x76,0x89,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0xDA +,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xBC,0x00,0x00,0x00,0x01,0x8B +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x75,0x83,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xE5,0x00,0x00,0x00,0x03,0x82,0xFF,0xFF,0xFF,0x00,0x89,0x00 +,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x83,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0xA3,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xC9,0x8C,0xFF +,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x47,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x81,0x89,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00 +,0x00,0xA2,0x81,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF1,0x00,0x00,0x00 +,0x26,0x90,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xD3,0x82,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x28,0xE2,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x8B,0x82,0x00,0x00,0x00,0xFF,0x04 +,0x00,0x00,0x00,0xA3,0x00,0x00,0x00,0x5F,0x00,0x00,0x00,0x42,0x00,0x00,0x00 +,0x25,0x00,0x00,0x00,0x01,0x8C,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00,0x0C +,0x00,0x00,0x00,0xCD,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xF8,0x00,0x00,0x00 +,0x58,0x89,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xBE +,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF1,0x00,0x00,0x00,0x1E,0x8B +,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0xE6,0x83,0x00 +,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x83,0x83,0xFF,0xFF,0xFF,0x00,0x89,0x00 +,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x83,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0x3D,0x84,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x51,0x8C,0xFF +,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x99,0x83,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x5F,0x8A,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x85,0x00,0x00 +,0x00,0xFA,0x00,0x00,0x00,0x44,0x91,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0xA4,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x63,0xE4,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0xA0,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x1E,0x91,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0xCD +,0x00,0x00,0x00,0x3E,0x8A,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x9F,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x61,0x8C,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0x7A,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFD,0x00 +,0x00,0x00,0x20,0x83,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00 +,0x00,0x00,0x00,0x84,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xC9,0x83,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xD5,0x00,0x00,0x00,0x02,0x8B,0xFF,0xFF +,0xFF,0x00,0x01,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0xC9,0x82,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xFA,0x00,0x00,0x00,0x42,0x8A,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0x24,0x92,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x68 +,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x9E,0xE4,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0xE1,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xE2 +,0x93,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x01,0x8A,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0x7F,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8D +,0x8C,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xF0,0x83 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA4,0x84,0xFF,0xFF,0xFF,0x00,0x89 +,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x84,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0x42,0x84,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x5F,0x8C +,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0xDD,0x82,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF4,0x00,0x00,0x00,0x48,0x9D,0xFF,0xFF +,0xFF,0x00,0x00,0x00,0x00,0x00,0x2C,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xDA,0xE3,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x21,0x82,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xA7,0x9D,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00 +,0x00,0x01,0x00,0x00,0x00,0x8E,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00 +,0xAC,0x00,0x00,0x00,0x02,0x8C,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x8D +,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFA,0x00,0x00,0x00,0x21,0x84 +,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x85 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xBA,0x83,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xDF,0x00,0x00,0x00,0x07,0x8C,0xFF,0xFF,0xFF,0x00,0x01,0x00 +,0x00,0x00,0x27,0x00,0x00,0x00,0xED,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00 +,0x00,0xFB,0x00,0x00,0x00,0x5E,0x9C,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00 +,0x01,0x00,0x00,0x00,0xEE,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x16 +,0xE2,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x62,0x82,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x6B,0x9C,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x06 +,0x00,0x00,0x00,0xA8,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xC6,0x00 +,0x00,0x00,0x08,0x8C,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x00 +,0x00,0xF8,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x94,0x85,0xFF,0xFF +,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x85,0xFF,0xFF +,0xFF,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0xFE,0x83,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x88,0x8D,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00 +,0x3D,0x00,0x00,0x00,0xF4,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFE +,0x00,0x00,0x00,0x77,0x9C,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xB4,0x82 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x51,0xE2,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0xA2,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x2F,0x9B +,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xC0,0x83,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xD2,0x00,0x00,0x00,0x15,0x8C,0xFF,0xFF +,0xFF,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xBE,0x83,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xF4,0x00,0x00,0x00,0x17,0x85,0xFF,0xFF,0xFF,0x00 +,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x86,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0xAA,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFD +,0x00,0x00,0x00,0x3C,0x8D,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x36,0x00 +,0x00,0x00,0xEB,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xAC,0x00,0x00 +,0x00,0x13,0x9A,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x77,0x82,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x8C,0xE2,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0xE3,0x81,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF1,0x00,0x00,0x00 +,0x02,0x9A,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x4B,0x00,0x00,0x00,0xE8 +,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xBF,0x00,0x00,0x00,0x0F,0x8D +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x72,0x84,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x84,0x86,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89 +,0x00,0x00,0x00,0x00,0x86,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x25,0x00 +,0x00,0x00,0xF7,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xDE,0x00,0x00 +,0x00,0x0D,0x8D,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00 +,0xDF,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE7,0x00,0x00,0x00,0x49 +,0x99,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x3B,0x82,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0xCE,0xE1,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x23 +,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB8,0x99,0xFF,0xFF,0xFF,0x00 +,0x01,0x00,0x00,0x00,0x0B,0x00,0x00,0x00,0x99,0x84,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xA8,0x00,0x00,0x00,0x07,0x8D,0xFF,0xFF,0xFF,0x00,0x01,0x00 +,0x00,0x00,0x2B,0x00,0x00,0x00,0xF8,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00 +,0x00,0xE0,0x00,0x00,0x00,0x0D,0x86,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00 +,0x00,0x89,0x00,0x00,0x00,0x00,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00 +,0x6F,0x84,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x9D,0x8E,0xFF,0xFF,0xFF +,0x00,0x01,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0xCF,0x84,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x7C,0x98,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x07 +,0x00,0x00,0x00,0xF8,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x31,0xE0 +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x80,0x82,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x7C,0x99,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x93,0x83 +,0x00,0x00,0x00,0xFF,0x02,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x8B,0x00,0x00 +,0x00,0x01,0x8D,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00 +,0xCF,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x3F +,0x87,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00 +,0x87,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xBC,0x84 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x5C,0x8E,0xFF,0xFF,0xFF,0x00,0x02 +,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x8F,0x00,0x00,0x00,0xFE,0x81,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xFB,0x00,0x00,0x00,0x37,0x99,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0xC2,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x98,0xDF,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0xEA +,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x34,0x99,0xFF,0xFF,0xFF,0x00 +,0x01,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xE7,0x81,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xE5,0x00,0x00,0x00,0x46,0x8F,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0x98,0x84,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8C,0x88,0xFF +,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x88,0xFF +,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0xEF,0x83,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xF9,0x00,0x00,0x00,0x40,0x8F,0xFF,0xFF,0xFF +,0x00,0x03,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0xE4,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x80,0x9A,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x68,0x82,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF3,0x00,0x00,0x00,0x0D,0xDE,0xFF,0xFF +,0xFF,0x00,0x00,0x00,0x00,0x00,0x65,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xCF,0x9B,0xFF,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x48,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0xA8,0x00,0x00,0x00,0x11,0x8F,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0x79,0x84,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xD3,0x00 +,0x00,0x00,0x07,0x88,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00 +,0x00,0x00,0x00,0x89,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x5B,0x84,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEF,0x00,0x00,0x00,0x2A,0x8F,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x04 +,0x9A,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0xF6,0x82 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x67,0xDD,0xFF,0xFF,0xFF,0x00,0x01 +,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xD7,0x82,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x6A,0x9C,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x34,0x90,0xFF +,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x5C,0x00,0x00,0x00,0xFE,0x83,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xF9,0x00,0x00,0x00,0x2F,0x89,0xFF,0xFF,0xFF +,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x8A,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0xA8,0x84,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00 +,0xE0,0x00,0x00,0x00,0x18,0xAD,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xA3 +,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xCF,0xDD,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0x4B,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF5 +,0x00,0x00,0x00,0x0F,0xAD,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x43,0x00 +,0x00,0x00,0xFA,0x84,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x6C,0x8A,0xFF +,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x8A,0xFF +,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0xC7,0x84,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xCD,0x00,0x00,0x00,0x10,0xAC,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x00,0x40,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 +,0x37,0xDC,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xBD,0x82,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x9F,0xAD,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00 +,0x3C,0x00,0x00,0x00,0xF2,0x84,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8A +,0x8B,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00 +,0x8B,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xD9,0x84 +,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xD5,0x00,0x00,0x00,0x1F,0xAB,0xFF +,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xDC,0x82,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x9E,0xDB,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0x30,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x3A,0xAC,0xFF,0xFF +,0xFF,0x00,0x01,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0xF7,0x84,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xA5,0x00,0x00,0x00,0x01,0x8B,0xFF,0xFF,0xFF,0x00 +,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x8C,0xFF,0xFF,0xFF,0x00 +,0x01,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0xE8,0x84,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xE7,0x00,0x00,0x00,0x33,0xAB,0xFF,0xFF,0xFF,0x00,0x00,0x00 +,0x00,0x00,0x7B,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF6,0x00,0x00 +,0x00,0x14,0xDA,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xA3,0x82,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xD4,0xAC,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00 +,0x00,0x6F,0x00,0x00,0x00,0xFD,0x84,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00 +,0xBD,0x00,0x00,0x00,0x06,0x8C,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00 +,0x89,0x00,0x00,0x00,0x00,0x8D,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x33 +,0x00,0x00,0x00,0xF4,0x84,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF4,0x00 +,0x00,0x00,0x4C,0xAA,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x1B,0x00,0x00 +,0x00,0xFC,0x82,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA1,0xD9,0xFF,0xFF +,0xFF,0x00,0x01,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xFB,0x82,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x6F,0xAA,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00 +,0x01,0x00,0x00,0x00,0x8D,0x85,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xD0 +,0x00,0x00,0x00,0x0E,0x8D,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89 +,0x00,0x00,0x00,0x00,0x8E,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x3E,0x00 +,0x00,0x00,0xEF,0x84,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFC,0x00,0x00 +,0x00,0x70,0xAA,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xB5,0x83,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0x45,0xD7,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00 +,0x00,0x0A,0x00,0x00,0x00,0xD9,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00 +,0xF7,0x00,0x00,0x00,0x12,0xA9,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x17 +,0x00,0x00,0x00,0xB4,0x85,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xC3,0x00 +,0x00,0x00,0x12,0x8E,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00 +,0x00,0x00,0x00,0x8F,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x2A,0x00,0x00 +,0x00,0xE1,0x85,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xB8,0x00,0x00,0x00 +,0x1A,0xA8,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x52,0x83,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xDE,0x00,0x00,0x00,0x0A,0xD6,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0x96,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xA4 +,0xA9,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xEB,0x85 +,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xAC,0x00,0x00,0x00,0x08,0x8F,0xFF +,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x90,0xFF +,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0xCE,0x85,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xED,0x00,0x00,0x00,0x57,0xA7,0xFF,0xFF,0xFF +,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xDD,0x83,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x8B,0xD5,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x4A +,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x23,0xA7 +,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0xA4,0x86,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x02,0x90,0xFF,0xFF +,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x91,0xFF,0xFF +,0xFF,0x00,0x01,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0xB8,0x86,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xA6,0x00,0x00,0x00,0x10,0xA6,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0x51,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFC +,0x00,0x00,0x00,0x32,0xD3,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x14,0x00 +,0x00,0x00,0xE7,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x82,0xA7,0xFF +,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x2B,0x00,0x00,0x00,0xE3,0x85,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x73,0x92,0xFF,0xFF,0xFF +,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x92,0xFF,0xFF,0xFF +,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x93,0x85,0x00,0x00,0x00,0xFF +,0x01,0x00,0x00,0x00,0xF4,0x00,0x00,0x00,0x23,0xA7,0xFF,0xFF,0xFF,0x00,0x00 +,0x00,0x00,0x00,0xBE,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xCE,0x00 +,0x00,0x00,0x04,0xD2,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xAE,0x83,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xDF,0x00,0x00,0x00,0x09,0xA7,0xFF,0xFF +,0xFF,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0xD8,0x84,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xE8,0x00,0x00,0x00,0x4C,0x93,0xFF,0xFF,0xFF,0x00 +,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x94,0xFF,0xFF,0xFF,0x00 +,0x01,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0xE3,0x83,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x68,0xA8,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x2E,0x00 +,0x00,0x00,0xFC,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x76,0xD1,0xFF +,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x61,0x84,0x00,0x00,0x00,0xFF,0x00,0x00 +,0x00,0x00,0x4F,0xA9,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x37,0x00,0x00 +,0x00,0xFC,0x82,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xAC,0x00,0x00,0x00 +,0x14,0x94,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00 +,0x00,0x95,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0xA3 +,0x81,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB7,0xAA,0xFF,0xFF,0xFF,0x00 +,0x00,0x00,0x00,0x00,0x98,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF6 +,0x00,0x00,0x00,0x30,0xCF,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x27,0x00 +,0x00,0x00,0xF2,0x83,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xB6,0xAB,0xFF +,0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0xEF,0x00,0x00,0x00,0x5B,0x96,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00 +,0x89,0x00,0x00,0x00,0x00,0x97,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x52 +,0x00,0x00,0x00,0xD9,0x00,0x00,0x00,0x1A,0xAA,0xFF,0xFF,0xFF,0x00,0x01,0x00 +,0x00,0x00,0x15,0x00,0x00,0x00,0xF0,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00 +,0x00,0xE5,0x00,0x00,0x00,0x1D,0xCD,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00 +,0x1E,0x00,0x00,0x00,0xE2,0x83,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xF8 +,0x00,0x00,0x00,0x24,0xAB,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x06,0x00 +,0x00,0x00,0x93,0x00,0x00,0x00,0x1B,0x97,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00 +,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x98,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 +,0x00,0x02,0xAC,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x72,0x84,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xD3,0x00,0x00,0x00,0x0E,0xCB,0xFF,0xFF,0xFF +,0x00,0x01,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0xDA,0x84,0x00,0x00,0x00,0xFF +,0x00,0x00,0x00,0x00,0x83,0xC7,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00 +,0x89,0x00,0x00,0x00,0x00,0xC6,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x05 +,0x00,0x00,0x00,0xD9,0x84,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xBB,0x00 +,0x00,0x00,0x06,0xC9,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x10,0x00,0x00 +,0x00,0xD0,0x84,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE0,0x00,0x00,0x00 +,0x09,0xC7,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00 +,0x00,0xC7,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x4C,0x85,0x00,0x00,0x00 +,0xFF,0x01,0x00,0x00,0x00,0xB9,0x00,0x00,0x00,0x0B,0xC7,0xFF,0xFF,0xFF,0x00 +,0x01,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0xCC,0x85,0x00,0x00,0x00,0xFF,0x00 +,0x00,0x00,0x00,0x51,0xC8,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89 +,0x00,0x00,0x00,0x00,0xC8,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xB4,0x85 +,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xC6,0x00,0x00,0x00,0x11,0xC5,0xFF +,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x2E,0x00,0x00,0x00,0xE2,0x85,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xA6,0xC9,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00 +,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0xC8,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00 +,0x00,0x14,0x00,0x00,0x00,0xE2,0x85,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00 +,0xD2,0x00,0x00,0x00,0x19,0xC3,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x4A +,0x00,0x00,0x00,0xF2,0x85,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xD1,0x00 +,0x00,0x00,0x0A,0xC9,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00 +,0x00,0x00,0x00,0xC9,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x38,0x00,0x00 +,0x00,0xFA,0x85,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE2,0x00,0x00,0x00 +,0x3A,0xC0,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x77 +,0x00,0x00,0x00,0xFC,0x85,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xEE,0x00 +,0x00,0x00,0x22,0xCA,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00 +,0x00,0x00,0x00,0xCA,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x6F,0x86,0x00 +,0x00,0x00,0xFF,0x02,0x00,0x00,0x00,0xFB,0x00,0x00,0x00,0x78,0x00,0x00,0x00 +,0x01,0xBD,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0xC5 +,0x86,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x48,0xCB +,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0xCB +,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xAB,0x87,0x00,0x00,0x00,0xFF,0x01 +,0x00,0x00,0x00,0xB9,0x00,0x00,0x00,0x16,0xBA,0xFF,0xFF,0xFF,0x00,0x02,0x00 +,0x00,0x00,0x01,0x00,0x00,0x00,0x6D,0x00,0x00,0x00,0xF5,0x87,0x00,0x00,0x00 +,0xFF,0x00,0x00,0x00,0x00,0x76,0xCC,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00 +,0x00,0x89,0x00,0x00,0x00,0x00,0xCB,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00 +,0x0E,0x00,0x00,0x00,0xCE,0x87,0x00,0x00,0x00,0xFF,0x02,0x00,0x00,0x00,0xE9 +,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x03,0xB7,0xFF,0xFF,0xFF,0x00,0x01,0x00 +,0x00,0x00,0x2D,0x00,0x00,0x00,0xBF,0x88,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0x84,0xCD,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00 +,0x00,0x00,0xCC,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x15,0x00,0x00,0x00 +,0xD8,0x88,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xD3,0x00,0x00,0x00,0x47 +,0xB4,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0xA5,0x00 +,0x00,0x00,0xFD,0x88,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8A,0xCE,0xFF +,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0xCD,0xFF +,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0xE2,0x89,0x00,0x00 +,0x00,0xFF,0x01,0x00,0x00,0x00,0xB7,0x00,0x00,0x00,0x31,0xB0,0xFF,0xFF,0xFF +,0x00,0x02,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0xFA,0x89 +,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x8F,0xCF,0xFF,0xFF,0xFF,0x00,0x89 +,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0xCE,0xFF,0xFF,0xFF,0x00,0x01 +,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0xEA,0x8A,0x00,0x00,0x00,0xFF,0x02,0x00 +,0x00,0x00,0xC3,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x04,0xAA,0xFF,0xFF,0xFF +,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0xA9,0x00 +,0x00,0x00,0xF9,0x8A,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x95,0xD0,0xFF +,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0xCF,0xFF +,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0xE7,0x8B,0x00,0x00 +,0x00,0xFF,0x02,0x00,0x00,0x00,0xE5,0x00,0x00,0x00,0x7D,0x00,0x00,0x00,0x18 +,0xA6,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x80,0x00 +,0x00,0x00,0xE1,0x8B,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFD,0x00,0x00 +,0x00,0x79,0xD1,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00 +,0x00,0x00,0xD0,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x1E,0x00,0x00,0x00 +,0xD2,0x8C,0x00,0x00,0x00,0xFF,0x04,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0xC8 +,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x02,0x9E,0xFF,0xFF +,0xFF,0x00,0x04,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x83 +,0x00,0x00,0x00,0xC7,0x00,0x00,0x00,0xFE,0x8C,0x00,0x00,0x00,0xFF,0x01,0x00 +,0x00,0x00,0xF1,0x00,0x00,0x00,0x4C,0xD2,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00 +,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0xD1,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00 +,0x00,0x0D,0x00,0x00,0x00,0xB7,0x8F,0x00,0x00,0x00,0xFF,0x04,0x00,0x00,0x00 +,0xEB,0x00,0x00,0x00,0xA4,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x38,0x00,0x00 +,0x00,0x0E,0x96,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00,0x15,0x00,0x00,0x00 +,0x3B,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xB9,0x00,0x00,0x00,0xF5,0x8F,0x00 +,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xDA,0x00,0x00,0x00,0x29,0xD3,0xFF,0xFF +,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0xD2,0xFF,0xFF +,0xFF,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x96,0x93,0x00,0x00,0x00 +,0xFF,0x16,0x00,0x00,0x00,0xE3,0x00,0x00,0x00,0xB9,0x00,0x00,0x00,0x8F,0x00 +,0x00,0x00,0x67,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x35 +,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x09,0xFF,0xFF,0xFF +,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0x16,0x00,0x00 +,0x00,0x21,0x00,0x00,0x00,0x2C,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x42,0x00 +,0x00,0x00,0x5B,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xA5,0x00,0x00,0x00,0xCA +,0x00,0x00,0x00,0xEF,0x93,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xB8,0x00 +,0x00,0x00,0x11,0xD4,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00 +,0x00,0x00,0x00,0xD4,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x61,0x00,0x00 +,0x00,0xF1,0x9B,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xFB,0x00,0x00,0x00 +,0xFE,0x9C,0x00,0x00,0x00,0xFF,0x02,0x00,0x00,0x00,0xEE,0x00,0x00,0x00,0x63 +,0x00,0x00,0x00,0x01,0xD5,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89 +,0x00,0x00,0x00,0x00,0xD5,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x1C,0x00 +,0x00,0x00,0xB8,0xB8,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xA9,0x00,0x00 +,0x00,0x17,0xD7,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00 +,0x00,0x00,0xD7,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x64,0x00,0x00,0x00 +,0xF1,0xB4,0x00,0x00,0x00,0xFF,0x01,0x00,0x00,0x00,0xE2,0x00,0x00,0x00,0x4C +,0xD9,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00 +,0xD8,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0xAB,0x00 +,0x00,0x00,0xFE,0xB0,0x00,0x00,0x00,0xFF,0x02,0x00,0x00,0x00,0xE9,0x00,0x00 +,0x00,0x78,0x00,0x00,0x00,0x0C,0xDA,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00 +,0x00,0x89,0x00,0x00,0x00,0x00,0xDA,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00 +,0x2C,0x00,0x00,0x00,0xAA,0x00,0x00,0x00,0xFE,0xAC,0x00,0x00,0x00,0xFF,0x02 +,0x00,0x00,0x00,0xE2,0x00,0x00,0x00,0x6D,0x00,0x00,0x00,0x09,0xDC,0xFF,0xFF +,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0xDC,0xFF,0xFF +,0xFF,0x00,0x02,0x00,0x00,0x00,0x2B,0x00,0x00,0x00,0xA8,0x00,0x00,0x00,0xFD +,0xA8,0x00,0x00,0x00,0xFF,0x02,0x00,0x00,0x00,0xD9,0x00,0x00,0x00,0x62,0x00 +,0x00,0x00,0x05,0xDE,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00 +,0x00,0x00,0x00,0xDE,0xFF,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x26,0x00,0x00 +,0x00,0x81,0x00,0x00,0x00,0xD8,0xA3,0x00,0x00,0x00,0xFF,0x03,0x00,0x00,0x00 +,0xDE,0x00,0x00,0x00,0x8B,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x01,0xE0,0xFF +,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0xE1,0xFF +,0xFF,0xFF,0x00,0x02,0x00,0x00,0x00,0x2F,0x00,0x00,0x00,0x86,0x00,0x00,0x00 +,0xDD,0x9D,0x00,0x00,0x00,0xFF,0x02,0x00,0x00,0x00,0xDB,0x00,0x00,0x00,0x87 +,0x00,0x00,0x00,0x33,0xE4,0xFF,0xFF,0xFF,0x00,0x89,0x00,0x00,0x00,0x00,0x89 +,0x00,0x00,0x00,0x00,0xE4,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x00,0x00,0x33,0x00 +,0x00,0x00,0x70,0x00,0x00,0x00,0xA2,0x00,0x00,0x00,0xD4,0x00,0x00,0x00,0xFC +,0x93,0x00,0x00,0x00,0xFF,0x04,0x00,0x00,0x00,0xE8,0x00,0x00,0x00,0xB7,0x00 +,0x00,0x00,0x86,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x24,0xE7,0xFF,0xFF,0xFF +,0x00,0x89,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0xE8,0xFF,0xFF,0xFF +,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x69,0x00 +,0x00,0x00,0x95,0x00,0x00,0x00,0xA7,0x00,0x00,0x00,0xB6,0x00,0x00,0x00,0xC4 +,0x00,0x00,0x00,0xD3,0x00,0x00,0x00,0xE2,0x00,0x00,0x00,0xF1,0x00,0x00,0x00 +,0xFD,0x00,0x00,0x00,0xF2,0x00,0x00,0x00,0xE1,0x00,0x00,0x00,0xD1,0x00,0x00 +,0x00,0xC0,0x00,0x00,0x00,0xAF,0x00,0x00,0x00,0x9F,0x00,0x00,0x00,0x8E,0x00 +,0x00,0x00,0x78,0x00,0x00,0x00,0x4A,0x00,0x00,0x00,0x19,0xEC,0xFF,0xFF,0xFF +,0x00,0x89,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00 +,0x00,0xFE,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00 +,0x00,0xFF,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x00,0x00,0x00,0x00,0x54,0x52,0x55,0x45,0x56,0x49,0x53,0x49,0x4F,0x4E,0x2D +,0x58,0x46,0x49,0x4C,0x45,0x2E,0x00}; +/* end binary data. size = 22402 bytes */ + diff --git a/3rdparty/libprojectm/KeyHandler.cpp b/3rdparty/libprojectm/KeyHandler.cpp new file mode 100755 index 000000000..7f664a944 --- /dev/null +++ b/3rdparty/libprojectm/KeyHandler.cpp @@ -0,0 +1,220 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2004 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ + +#include + +#include "Common.hpp" +#include "fatal.h" +#include "KeyHandler.hpp" +#include "event.h" +#include "BeatDetect.hpp" +#include "PresetChooser.hpp" +#include "Renderer.hpp" +#include "projectM.hpp" + +#include +#include "TimeKeeper.hpp" + + +class Preset; +interface_t current_interface = DEFAULT_INTERFACE; + +void selectRandom(const bool hardCut); +void selectNext(const bool hardCut); +void selectPrevious(const bool hardCut); + +void refreshConsole() { + + switch (current_interface) { + + case MENU_INTERFACE: + // unimplemented + break; + case SHELL_INTERFACE: + // unimplemented + break; + case EDITOR_INTERFACE: + // unimplemented + break; + case DEFAULT_INTERFACE: + break; + case BROWSER_INTERFACE: + // unimplemented + break; + default: + break; + } + +} + +void projectM::key_handler( projectMEvent event, + projectMKeycode keycode, projectMModifier modifier ) { + + switch( event ) { + + + case PROJECTM_KEYDOWN: + + //default_key_handler(); + switch (current_interface) + { + + case MENU_INTERFACE: +// menu_key_handler(this, event, keycode); + break; + case SHELL_INTERFACE: + //shell_key_handler(); + break; + case EDITOR_INTERFACE: +// editor_key_handler(event,keycode); + break; + case BROWSER_INTERFACE: +// browser_key_handler(event,keycode,modifier); + break; + case DEFAULT_INTERFACE: + default_key_handler(event,keycode); + break; + default: + default_key_handler(event,keycode); + break; + + } + break; + default: + break; + + } +} + +void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode) { + + switch( event ) { + + case PROJECTM_KEYDOWN: + + switch( keycode ) + { + case PROJECTM_K_UP: + beatDetect->beat_sensitivity += 0.25; + if (beatDetect->beat_sensitivity > 5.0) beatDetect->beat_sensitivity = 5.0; + break; + case PROJECTM_K_DOWN: + beatDetect->beat_sensitivity -= 0.25; + if (beatDetect->beat_sensitivity < 0) beatDetect->beat_sensitivity = 0; + break; + case PROJECTM_K_h: + renderer->showhelp = !renderer->showhelp; + renderer->showstats= false; + renderer->showfps=false; + case PROJECTM_K_F1: + renderer->showhelp = !renderer->showhelp; + renderer->showstats=false; + renderer->showfps=false; + break; + case PROJECTM_K_y: + this->setShuffleEnabled(!this->isShuffleEnabled()); + break; + + case PROJECTM_K_F5: + if (!renderer->showhelp) + renderer->showfps = !renderer->showfps; + break; + case PROJECTM_K_F4: + if (!renderer->showhelp) + renderer->showstats = !renderer->showstats; + break; + case PROJECTM_K_F3: { + renderer->showpreset = !renderer->showpreset; + break; + } + case PROJECTM_K_F2: + renderer->showtitle = !renderer->showtitle; + break; +#ifndef MACOS + case PROJECTM_K_F9: +#else + case PROJECTM_K_F8: +#endif + + renderer->studio = !renderer->studio; + break; + + case PROJECTM_K_ESCAPE: { +// exit( 1 ); + break; + } + case PROJECTM_K_f: + + break; + case PROJECTM_K_a: + renderer->correction = !renderer->correction; + break; + case PROJECTM_K_b: + break; + case PROJECTM_K_n: + selectNext(true); + break; + case PROJECTM_K_N: + selectNext(false); + break; + case PROJECTM_K_r: + selectRandom(true); + break; + case PROJECTM_K_R: + selectRandom(false); + break; + case PROJECTM_K_p: + selectPrevious(true); + break; + case PROJECTM_K_P: + selectPrevious(false); + break; + case PROJECTM_K_l: + renderer->noSwitch=!renderer->noSwitch; + break; + case PROJECTM_K_s: + renderer->studio = !renderer->studio; + case PROJECTM_K_i: + break; + case PROJECTM_K_z: + break; + case PROJECTM_K_0: +// nWaveMode=0; + break; + case PROJECTM_K_6: +// nWaveMode=6; + break; + case PROJECTM_K_7: +// nWaveMode=7; + break; + case PROJECTM_K_m: + break; + case PROJECTM_K_t: + break; + default: + break; + } + default: + break; + + } +} + diff --git a/3rdparty/libprojectm/KeyHandler.hpp b/3rdparty/libprojectm/KeyHandler.hpp new file mode 100755 index 000000000..b9a756326 --- /dev/null +++ b/3rdparty/libprojectm/KeyHandler.hpp @@ -0,0 +1,39 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id: console_interface.h,v 1.1.1.1 2005/12/23 18:05:03 psperl Exp $ + * + * $Log$ + */ + +#ifndef _KEY_HANDLER_HPP +#define _KEY_HANDLER_HPP + +#include "event.h" +class projectM; +void default_key_handler(projectM *PM, projectMEvent event, projectMKeycode keycode); +void refreshConsole(); +#if defined(__CPLUSPLUS) && !defined(MACOS) +extern "C" void key_handler(projectM *PM, projectMEvent event, projectMKeycode keycode, projectMModifier modifier ); +#else +extern void key_handler(projectM *PM, projectMEvent event, projectMKeycode keycode, projectMModifier modifier ); +#endif +#endif /** !_KEY_HANDLER_HPP */ diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/BuiltinFuncs.cpp b/3rdparty/libprojectm/MilkdropPresetFactory/BuiltinFuncs.cpp new file mode 100644 index 000000000..c533a7357 --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/BuiltinFuncs.cpp @@ -0,0 +1,157 @@ +// +// C++ Implementation: BuiltinFuncs +// +// Description: +// +// +// Author: Carmelo Piccione , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// + +/* Loads all builtin functions */ + + +/* Loads a builtin function */ +#include "BuiltinFuncs.hpp" +#include +#include +#include "fatal.h" + +std::map BuiltinFuncs::builtin_func_tree; + +int BuiltinFuncs::load_builtin_func(const std::string & name, float (*func_ptr)(float*), int num_args) { + + Func * func; + int retval; + + /* Create new function */ + func = new Func(name, func_ptr, num_args); + + if (func == NULL) + return PROJECTM_OUTOFMEM_ERROR; + + retval = insert_func( func ); + + return retval; + +} + +Func * BuiltinFuncs::find_func(const std::string & name) { + + std::map::iterator pos = builtin_func_tree.find(name); + + // Case: function not found, return null + if (pos == builtin_func_tree.end()) + return 0; + + // Case: function found, return a pointer to it + return pos->second; + +} + +int BuiltinFuncs::load_all_builtin_func() { + + if (load_builtin_func("int", FuncWrappers::int_wrapper, 1) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("abs", FuncWrappers::abs_wrapper, 1) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("sin", FuncWrappers::sin_wrapper, 1) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("cos", FuncWrappers::cos_wrapper, 1) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("tan", FuncWrappers::tan_wrapper, 1) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("asin", FuncWrappers::asin_wrapper, 1) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("acos", FuncWrappers::acos_wrapper, 1) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("atan", FuncWrappers::atan_wrapper, 1) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("sqr", FuncWrappers::sqr_wrapper, 1) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("sqrt", FuncWrappers::sqrt_wrapper, 1) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("pow", FuncWrappers::pow_wrapper, 2) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("exp", FuncWrappers::exp_wrapper, 1) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("log", FuncWrappers::log_wrapper, 1) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("log10", FuncWrappers::log10_wrapper, 1) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("sign", FuncWrappers::sign_wrapper, 1) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("min", FuncWrappers::min_wrapper, 2) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("max", FuncWrappers::max_wrapper, 2) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("sigmoid", FuncWrappers::sigmoid_wrapper, 2) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("atan2", FuncWrappers::atan2_wrapper, 2) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("rand", FuncWrappers::rand_wrapper, 1) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("band", FuncWrappers::band_wrapper, 2) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("bor", FuncWrappers::bor_wrapper, 2) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("bnot", FuncWrappers::bnot_wrapper, 1) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("if", FuncWrappers::if_wrapper, 3) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("equal", FuncWrappers::equal_wrapper, 2) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("above", FuncWrappers::above_wrapper, 2) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("below", FuncWrappers::below_wrapper, 2) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("nchoosek", FuncWrappers::nchoosek_wrapper, 2) < 0) + return PROJECTM_ERROR; + if (load_builtin_func("fact", FuncWrappers::fact_wrapper, 1) < 0) + return PROJECTM_ERROR; + + return PROJECTM_SUCCESS; +} + + +/* Initialize the builtin function database. + Should only be necessary once */ +int BuiltinFuncs::init_builtin_func_db() { + int retval; + + retval = load_all_builtin_func(); + return retval; +} + + + +/* Destroy the builtin function database. + Generally, do this on projectm exit */ +int BuiltinFuncs::destroy_builtin_func_db() { + +traverse >(builtin_func_tree); + +builtin_func_tree.clear(); + +return PROJECTM_SUCCESS; +} + +/* Insert a function into the database */ +int BuiltinFuncs::insert_func( Func *func ) { + + assert(func); + std::pair::iterator, bool> inserteePair = + builtin_func_tree.insert(std::make_pair(std::string(func->getName()), func)); + + if (!inserteePair.second) { + std::cerr << "Failed to insert builtin function \"" << func->getName() << "\" into collection! Bailing..." << std::endl; + abort(); + + } + + return PROJECTM_SUCCESS; +} + + diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/BuiltinFuncs.hpp b/3rdparty/libprojectm/MilkdropPresetFactory/BuiltinFuncs.hpp new file mode 100644 index 000000000..bdbe6435a --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/BuiltinFuncs.hpp @@ -0,0 +1,234 @@ +// +// C++ Interface: BuiltinFuncs +// +// Description: +// +// +// Author: Carmelo Piccione , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// + +#ifndef _BUILTIN_FUNCS_HPP +#define _BUILTIN_FUNCS_HPP + +#include "Common.hpp" +#include "Func.hpp" +#include +#include +#include + +#include "RandomNumberGenerators.hpp" + +/* Wrappers for all the builtin functions + The arg_list pointer is a list of floats. Its + size is equal to the number of arguments the parameter + takes */ +class FuncWrappers { + +/* Values to optimize the sigmoid function */ +static const int R = 32767; +static const int RR = 65534; + +public: + +static inline float int_wrapper(float * arg_list) { + +return floor(arg_list[0]); + +} + + +static inline float sqr_wrapper(float * arg_list) { + +return pow(2, arg_list[0]); +} + + +static inline float sign_wrapper(float * arg_list) { + +return -arg_list[0]; +} + +static inline float min_wrapper(float * arg_list) { + +if (arg_list[0] > arg_list[1]) +return arg_list[1]; + +return arg_list[0]; +} + +static inline float max_wrapper(float * arg_list) { + +if (arg_list[0] > arg_list[1]) +return arg_list[0]; + +return arg_list[1]; +} + +/* consult your AI book */ +static inline float sigmoid_wrapper(float * arg_list) { +return (RR / (1 + exp( -(((float)(arg_list[0])) * arg_list[1]) / R) - R)); +} + + +static inline float bor_wrapper(float * arg_list) { + +return (float)((int)arg_list[0] || (int)arg_list[1]); +} + +static inline float band_wrapper(float * arg_list) { +return (float)((int)arg_list[0] && (int)arg_list[1]); +} + +static inline float bnot_wrapper(float * arg_list) { +return (float)(!(int)arg_list[0]); +} + +static inline float if_wrapper(float * arg_list) { + +if ((int)arg_list[0] == 0) +return arg_list[2]; +return arg_list[1]; +} + + +static inline float rand_wrapper(float * arg_list) { +float l=1; + +// printf("RAND ARG:(%d)\n", (int)arg_list[0]); +if ((int)arg_list[0] > 0) + l = (float) RandomNumberGenerators::uniformInteger((int)arg_list[0]); + +return l; +} + +static inline float equal_wrapper(float * arg_list) { + return (arg_list[0] == arg_list[1]); +} + + +static inline float above_wrapper(float * arg_list) { + +return (arg_list[0] > arg_list[1]); +} + + +static inline float below_wrapper(float * arg_list) { + +return (arg_list[0] < arg_list[1]); +} + +static float sin_wrapper(float * arg_list) { + + assert(arg_list); +//return .5; +float d = sinf(*arg_list); +return d; +//return (sin (arg_list[0])); +} + + +static inline float cos_wrapper(float * arg_list) { +return (cos (arg_list[0])); +} + +static inline float tan_wrapper(float * arg_list) { +return (tan(arg_list[0])); +} + +static inline float asin_wrapper(float * arg_list) { +return (asin (arg_list[0])); +} + +static inline float acos_wrapper(float * arg_list) { +return (acos (arg_list[0])); +} + +static inline float atan_wrapper(float * arg_list) { +return (atan (arg_list[0])); +} + +static inline float atan2_wrapper(float * arg_list) { +return (atan2 (arg_list[0], arg_list[1])); +} + +static inline float pow_wrapper(float * arg_list) { +return (pow (arg_list[0], arg_list[1])); +} + +static inline float exp_wrapper(float * arg_list) { +return (exp(arg_list[0])); +} + +static inline float abs_wrapper(float * arg_list) { +return (fabs(arg_list[0])); +} + +static inline float log_wrapper(float* arg_list) { +return (log (arg_list[0])); +} + +static inline float log10_wrapper(float * arg_list) { +return (log10 (arg_list[0])); +} + +static inline float sqrt_wrapper(float * arg_list) { +return (sqrt (arg_list[0])); +} + + +static inline float nchoosek_wrapper(float * arg_list) { +unsigned long cnm = 1UL; +int i, f; +int n, m; + +n = (int)arg_list[0]; +m = (int)arg_list[1]; + +if (m*2 >n) m = n-m; +for (i=1 ; i <= m; n--, i++) +{ +if ((f=n) % i == 0) +f /= i; +else cnm /= i; +cnm *= f; +} +return (float)cnm; +} + + +static inline float fact_wrapper(float * arg_list) { + + +int result = 1; + +int n = (int)arg_list[0]; + +while (n > 1) { +result = result * n; +n--; +} +return (float)result; +} +}; + +#include +class BuiltinFuncs { + +public: + + static int init_builtin_func_db(); + static int destroy_builtin_func_db(); + static int load_all_builtin_func(); + static int load_builtin_func( const std::string & name, float (*func_ptr)(float*), int num_args ); + + static int insert_func( Func *func ); + static int remove_func( Func *func ); + static Func *find_func( const std::string & name ); +private: + static std::map builtin_func_tree; +}; + +#endif diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/BuiltinParams.cpp b/3rdparty/libprojectm/MilkdropPresetFactory/BuiltinParams.cpp new file mode 100644 index 000000000..e33149b51 --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/BuiltinParams.cpp @@ -0,0 +1,411 @@ + +#include "fatal.h" +#include "BuiltinParams.hpp" +#include +#include +#include +#include "InitCondUtils.hpp" +#include +#include +#include "Common.hpp" + +BuiltinParams::BuiltinParams() {} + +BuiltinParams::BuiltinParams(PresetInputs & presetInputs, PresetOutputs & presetOutputs) +{ + + presetInputs.Initialize(presetOutputs.gx, presetOutputs.gy); + + int ret; + if ((ret = init_builtin_param_db(presetInputs, presetOutputs)) != PROJECTM_SUCCESS) + { + std::cout << "failed to allocate builtin parameter database with error " << ret << std::endl;; + throw ret; + } + +} + +BuiltinParams::~BuiltinParams() +{ + destroy_builtin_param_db(); +} + +/* Loads a float parameter into the builtin database */ +int BuiltinParams::load_builtin_param_float(const std::string & name, void * engine_val, void * matrix, short int flags, + float init_val, float upper_bound, float lower_bound, const std::string & alt_name) +{ + + Param * param = NULL; + CValue iv, ub, lb; + + iv.float_val = init_val; + ub.float_val = upper_bound; + lb.float_val = lower_bound; + + /* Create new parameter of type float */ + if (BUILTIN_PARAMS_DEBUG == 2) + { + printf("load_builtin_param_float: (name \"%s\") (alt_name = \"%s\") ", name.c_str(), alt_name.c_str()); + fflush(stdout); + } + +std::string lowerName(name); +std::transform(lowerName.begin(), lowerName.end(), lowerName.begin(), tolower); + + if ((param = new Param(lowerName, P_TYPE_DOUBLE, flags, engine_val, matrix, iv, ub, lb)) == NULL) + { + return PROJECTM_OUTOFMEM_ERROR; + } + + if (BUILTIN_PARAMS_DEBUG == 2) + { + printf("created..."); + fflush(stdout); + } + + /* Insert the paremeter into the database */ + + if (insert_builtin_param( param ) < 0) + { + delete param; + return PROJECTM_ERROR; + } + + if (BUILTIN_PARAMS_DEBUG == 2) + { + printf("inserted..."); + fflush(stdout); + } + + /* If this parameter has an alternate name, insert it into the database as link */ + + if (alt_name != "") + { + std::string alt_lower_name(alt_name); + std::transform(alt_lower_name.begin(), alt_lower_name.end(), alt_lower_name.begin(), tolower); + insert_param_alt_name(param,alt_lower_name); + + if (BUILTIN_PARAMS_DEBUG == 2) + { + printf("alt_name inserted..."); + fflush(stdout); + } + + + } + + if (BUILTIN_PARAMS_DEBUG == 2) printf("finished\n"); + + /* Finished, return success */ + return PROJECTM_SUCCESS; +} + + + +/* Destroy the builtin parameter database. + Generally, do this on projectm exit */ +int BuiltinParams::destroy_builtin_param_db() +{ + + traverse >(builtin_param_tree); + return PROJECTM_SUCCESS; +} + + +/* Insert a parameter into the database with an alternate name */ +int BuiltinParams::insert_param_alt_name(Param * param, const std::string & alt_name) +{ + + assert(param); + + aliasMap.insert(std::make_pair(alt_name, param->name)); + + return PROJECTM_SUCCESS; +} + +Param * BuiltinParams::find_builtin_param(const std::string & name) +{ + + + + AliasMap::iterator pos = aliasMap.find(name); + Param * param = 0; + //std::cerr << "[BuiltinParams] find_builtin_param: name is " << name << std::endl; + if (pos == aliasMap.end()) + { + std::map::iterator builtinPos = builtin_param_tree.find(name); + + if (builtinPos != builtin_param_tree.end()) { + // std::cerr << "[BuiltinParams] find_builtin_param: found it directly." << std::endl; + param = builtinPos->second; + } + } + else + { + + std::map::iterator builtinPos = builtin_param_tree.find(pos->second); + + if (builtinPos != builtin_param_tree.end()) { + //std::cerr << "[BuiltinParams] find_builtin_param: found it indirectly." << std::endl; + param = builtinPos->second; + +} + } + return param; +} + + +/* Loads a integer parameter into the builtin database */ +int BuiltinParams::load_builtin_param_int(const std::string & name, void * engine_val, short int flags, + int init_val, int upper_bound, int lower_bound, const std::string &alt_name) +{ + + Param * param; + CValue iv, ub, lb; + + iv.int_val = init_val; + ub.int_val = upper_bound; + lb.int_val = lower_bound; + + // normalize to lower case as milkdrop scripts depend on this + std::string lowerName(name); + std::transform(lowerName.begin(), lowerName.end(), lowerName.begin(), tolower); + + param = new Param(lowerName, P_TYPE_INT, flags, engine_val, NULL, iv, ub, lb); + + if (param == NULL) + { + return PROJECTM_OUTOFMEM_ERROR; + } + + if (insert_builtin_param( param ) < 0) + { + delete param; + return PROJECTM_ERROR; + } + + if (alt_name != "") + { + std::string alt_lower_name(alt_name); + std::transform(alt_lower_name.begin(), alt_lower_name.end(), alt_lower_name.begin(), tolower); + insert_param_alt_name(param,alt_lower_name); + + } + + return PROJECTM_SUCCESS; + +} + +int BuiltinParams::load_builtin_param_string( const std::string & name, std::string * engine_val, short int flags) { + + /* Creates a new parameter of type string */ + Param * param = Param::new_param_string(name.c_str(), flags, engine_val); + + if (insert_builtin_param( param ) < 0) + { + delete param; + return PROJECTM_ERROR; + } + return PROJECTM_SUCCESS; +} + +/* Loads a boolean parameter */ +int BuiltinParams::load_builtin_param_bool(const std:: string & name, void * engine_val, short int flags, + int init_val, const std::string &alt_name) +{ + + Param * param; + CValue iv, ub, lb; + + iv.int_val = init_val; + ub.int_val = TRUE; + lb.int_val = false; + +std::string lowerName(name); +std::transform(lowerName.begin(), lowerName.end(), lowerName.begin(), tolower); + + param = new Param(lowerName, P_TYPE_BOOL, flags, engine_val, NULL, iv, ub, lb); + + if (param == NULL) + { + return PROJECTM_OUTOFMEM_ERROR; + } + + if (insert_builtin_param(param) < 0) + { + delete param; + return PROJECTM_ERROR; + } + + if (alt_name != "") + { + std::string alt_lower_name(alt_name); + std::transform(alt_lower_name.begin(), alt_lower_name.end(), alt_lower_name.begin(), tolower); + insert_param_alt_name(param,alt_lower_name); + } + + return PROJECTM_SUCCESS; + +} + +/* Inserts a parameter into the builtin database */ +int BuiltinParams::insert_builtin_param( Param *param ) +{ + std::pair::iterator, bool> inserteePos = builtin_param_tree.insert(std::make_pair(param->name, param)); + + return inserteePos.second; +} + + + +/* Initialize the builtin parameter database. + Should only be necessary once */ +int BuiltinParams::init_builtin_param_db(const PresetInputs & presetInputs, PresetOutputs & presetOutputs) +{ + + if (BUILTIN_PARAMS_DEBUG) + { + printf("init_builtin_param: loading database..."); + fflush(stdout); + } + + /* Loads all builtin parameters into the database */ + if (load_all_builtin_param(presetInputs, presetOutputs) < 0) + { + if (BUILTIN_PARAMS_DEBUG) printf("failed loading builtin parameters (FATAL)\n"); + return PROJECTM_ERROR; + } + + if (BUILTIN_PARAMS_DEBUG) printf("success!\n"); + + /* Finished, no errors */ + return PROJECTM_SUCCESS; +} + + + +/* Loads all builtin parameters, limits are also defined here */ +int BuiltinParams::load_all_builtin_param(const PresetInputs & presetInputs, PresetOutputs & presetOutputs) +{ + + load_builtin_param_float("frating", (void*)&presetOutputs.fRating, NULL, P_FLAG_NONE, 0.0 , 5.0, 0.0, ""); + load_builtin_param_float("fwavescale", (void*)&presetOutputs.wave.scale, NULL, P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, ""); + load_builtin_param_float("gamma", (void*)&presetOutputs.fGammaAdj, NULL, P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, 0, "fGammaAdj"); + load_builtin_param_float("echo_zoom", (void*)&presetOutputs.videoEcho.zoom, NULL, P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, 0, "fVideoEchoZoom"); + load_builtin_param_float("echo_alpha", (void*)&presetOutputs.videoEcho.a, NULL, P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, 0, "fvideoechoalpha"); + load_builtin_param_float("wave_a", (void*)&presetOutputs.wave.a, NULL, P_FLAG_NONE, 0.0, 1.0, 0, "fwavealpha"); + load_builtin_param_float("fwavesmoothing", (void*)&presetOutputs.wave.smoothing, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, ""); + load_builtin_param_float("fmodwavealphastart", (void*)&presetOutputs.wave.modOpacityStart, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, ""); + load_builtin_param_float("fmodwavealphaend", (void*)&presetOutputs.wave.modOpacityEnd, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, ""); + load_builtin_param_float("fWarpAnimSpeed", (void*)&presetOutputs.fWarpAnimSpeed, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, ""); + load_builtin_param_float("fWarpScale", (void*)&presetOutputs.fWarpScale, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, ""); + // load_builtin_param_float("warp", (void*)&presetOutputs.warp, warp_mesh, P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, 0, ""); + + load_builtin_param_float("fshader", (void*)&presetOutputs.fShader, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, ""); + load_builtin_param_float("decay", (void*)&presetOutputs.screenDecay, NULL, P_FLAG_NONE, 0.0, 1.0, 0, "fdecay"); + + load_builtin_param_int("echo_orient", (void*)&presetOutputs.videoEcho.orientation, P_FLAG_NONE, 0, 3, 0, "nVideoEchoOrientation"); + load_builtin_param_int("wave_mode", (void*)&presetOutputs.wave.mode, P_FLAG_NONE, 0, 7, 0, "nwavemode"); + + load_builtin_param_bool("wave_additive", (void*)&presetOutputs.wave.additive, P_FLAG_NONE, false, "bAdditiveWaves"); + load_builtin_param_bool("bmodwavealphabyvolume", (void*)&presetOutputs.wave.modulateAlphaByVolume, P_FLAG_NONE, false, ""); + load_builtin_param_bool("wave_brighten", (void*)&presetOutputs.wave.maximizeColors, P_FLAG_NONE, false, "bMaximizeWaveColor"); + load_builtin_param_bool("wrap", (void*)&presetOutputs.textureWrap, P_FLAG_NONE, false, "btexwrap"); + load_builtin_param_bool("darken_center", (void*)&presetOutputs.bDarkenCenter, P_FLAG_NONE, false, "bdarkencenter"); + load_builtin_param_bool("bredbluestereo", (void*)&presetOutputs.bRedBlueStereo, P_FLAG_NONE, false, ""); + load_builtin_param_bool("brighten", (void*)&presetOutputs.bBrighten, P_FLAG_NONE, false, "bbrighten"); + load_builtin_param_bool("darken", (void*)&presetOutputs.bDarken, P_FLAG_NONE, false, "bdarken"); + load_builtin_param_bool("solarize", (void*)&presetOutputs.bSolarize, P_FLAG_NONE, false, "bsolarize"); + load_builtin_param_bool("invert", (void*)&presetOutputs.bInvert, P_FLAG_NONE, false, "binvert"); + load_builtin_param_bool("bmotionvectorson", (void*)&presetOutputs.bMotionVectorsOn, P_FLAG_NONE, false, ""); + load_builtin_param_bool("wave_dots", (void*)&presetOutputs.wave.dots, P_FLAG_NONE, false, "bwavedots"); + load_builtin_param_bool("wave_thick", (void*)&presetOutputs.wave.thick, P_FLAG_NONE, false, "bwavethick"); + load_builtin_param_float("warp", (void*)&presetOutputs.warp, presetOutputs.warp_mesh, P_FLAG_PER_PIXEL |P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, ""); + load_builtin_param_float("zoom", (void*)&presetOutputs.zoom, presetOutputs.zoom_mesh, P_FLAG_PER_PIXEL |P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, ""); + load_builtin_param_float("rot", (void*)&presetOutputs.rot, presetOutputs.rot_mesh, P_FLAG_PER_PIXEL |P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, ""); + /// @note added huge bug fix here potentially by prevening zoomexp_mesh from being freed when presets dealloc + load_builtin_param_float("zoomexp", (void*)&presetOutputs.zoomexp, presetOutputs.zoomexp_mesh, P_FLAG_PER_PIXEL |P_FLAG_NONE , 0.0, MAX_DOUBLE_SIZE, 0, "fzoomexponent"); + + load_builtin_param_float("cx", (void*)&presetOutputs.cx, presetOutputs.cx_mesh, P_FLAG_PER_PIXEL | P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, ""); + load_builtin_param_float("cy", (void*)&presetOutputs.cy, presetOutputs.cy_mesh, P_FLAG_PER_PIXEL | P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, ""); + load_builtin_param_float("dx", (void*)&presetOutputs.dx, presetOutputs.dx_mesh, P_FLAG_PER_PIXEL | P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, ""); + load_builtin_param_float("dy", (void*)&presetOutputs.dy, presetOutputs.dy_mesh, P_FLAG_PER_PIXEL |P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, ""); + load_builtin_param_float("sx", (void*)&presetOutputs.sx, presetOutputs.sx_mesh, P_FLAG_PER_PIXEL |P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, ""); + load_builtin_param_float("sy", (void*)&presetOutputs.sy, presetOutputs.sy_mesh, P_FLAG_PER_PIXEL |P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, ""); + + + load_builtin_param_float("b1n", (void*)&presetOutputs.blur1n, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + load_builtin_param_float("b2n", (void*)&presetOutputs.blur2n, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + load_builtin_param_float("b3n", (void*)&presetOutputs.blur3n, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + load_builtin_param_float("b1x", (void*)&presetOutputs.blur1x, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + load_builtin_param_float("b2x", (void*)&presetOutputs.blur2x, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + load_builtin_param_float("b3x", (void*)&presetOutputs.blur3x, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + load_builtin_param_float("b1ed", (void*)&presetOutputs.blur1ed, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + + load_builtin_param_float("wave_r", (void*)&presetOutputs.wave.r, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + load_builtin_param_float("wave_g", (void*)&presetOutputs.wave.g, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + load_builtin_param_float("wave_b", (void*)&presetOutputs.wave.b, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + load_builtin_param_float("wave_x", (void*)&presetOutputs.wave.x, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + load_builtin_param_float("wave_y", (void*)&presetOutputs.wave.y, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + load_builtin_param_float("wave_mystery", (void*)&presetOutputs.wave.mystery, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, "fWaveParam"); + + load_builtin_param_float("ob_size", (void*)&presetOutputs.border.outer_size, NULL, P_FLAG_NONE, 0.0, 0.5, 0, ""); + load_builtin_param_float("ob_r", (void*)&presetOutputs.border.outer_r, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + load_builtin_param_float("ob_g", (void*)&presetOutputs.border.outer_g, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + load_builtin_param_float("ob_b", (void*)&presetOutputs.border.outer_b, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + load_builtin_param_float("ob_a", (void*)&presetOutputs.border.outer_a, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + + load_builtin_param_float("ib_size", (void*)&presetOutputs.border.inner_size, NULL,P_FLAG_NONE, 0.0, .5, 0.0, ""); + load_builtin_param_float("ib_r", (void*)&presetOutputs.border.inner_r, NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + load_builtin_param_float("ib_g", (void*)&presetOutputs.border.inner_g, NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + load_builtin_param_float("ib_b", (void*)&presetOutputs.border.inner_b, NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + load_builtin_param_float("ib_a", (void*)&presetOutputs.border.inner_a, NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + + load_builtin_param_float("mv_r", (void*)&presetOutputs.mv.r, NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + load_builtin_param_float("mv_g", (void*)&presetOutputs.mv.g, NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + load_builtin_param_float("mv_b", (void*)&presetOutputs.mv.b, NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + load_builtin_param_float("mv_x", (void*)&presetOutputs.mv.x_num, NULL,P_FLAG_NONE, 0.0, 64.0, 0.0, "nmotionvectorsx"); + load_builtin_param_float("mv_y", (void*)&presetOutputs.mv.y_num, NULL,P_FLAG_NONE, 0.0, 48.0, 0.0, "nmotionvectorsy"); + load_builtin_param_float("mv_l", (void*)&presetOutputs.mv.length, NULL,P_FLAG_NONE, 0.0, 5.0, 0.0, ""); + load_builtin_param_float("mv_dy", (void*)&presetOutputs.mv.x_offset, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, ""); + load_builtin_param_float("mv_dx", (void*)&presetOutputs.mv.y_offset, NULL,P_FLAG_NONE, 0.0, 1.0, -1.0, ""); + load_builtin_param_float("mv_a", (void*)&presetOutputs.mv.a, NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, ""); + + load_builtin_param_float("time", (void*)&presetInputs.time, NULL,P_FLAG_READONLY, 0.0, MAX_DOUBLE_SIZE, 0.0, ""); + load_builtin_param_float("bass", (void*)&presetInputs.bass, NULL,P_FLAG_READONLY, 0.0, MAX_DOUBLE_SIZE, 0.0, ""); + load_builtin_param_float("mid", (void*)&presetInputs.mid, NULL,P_FLAG_READONLY, 0.0, MAX_DOUBLE_SIZE, 0, ""); + + load_builtin_param_float("treb", (void*)&presetInputs.treb, NULL,P_FLAG_READONLY, 0.0, MAX_DOUBLE_SIZE, 0, ""); + + + load_builtin_param_float("bass_att", (void*)&presetInputs.bass_att, NULL,P_FLAG_READONLY, 0.0, MAX_DOUBLE_SIZE, 0, ""); + load_builtin_param_float("mid_att", (void*)&presetInputs.mid_att, NULL, P_FLAG_READONLY, 0.0, MAX_DOUBLE_SIZE, 0, ""); + load_builtin_param_float("treb_att", (void*)&presetInputs.treb_att, NULL, P_FLAG_READONLY, 0.0, MAX_DOUBLE_SIZE, 0, ""); + load_builtin_param_int("frame", (void*)&presetInputs.frame, P_FLAG_READONLY, 0, MAX_INT_SIZE, 0, ""); + load_builtin_param_float("progress", (void*)&presetInputs.progress, NULL,P_FLAG_READONLY, 0.0, 1, 0, ""); + load_builtin_param_int("fps", (void*)&presetInputs.fps, P_FLAG_READONLY, 15, MAX_INT_SIZE, 0, ""); + + load_builtin_param_float("x", (void*)&presetInputs.x_per_pixel, presetInputs.origx, P_FLAG_PER_PIXEL |P_FLAG_ALWAYS_MATRIX | P_FLAG_READONLY | P_FLAG_NONE, + 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, ""); + load_builtin_param_float("y", (void*)&presetInputs.y_per_pixel, presetInputs.origy, P_FLAG_PER_PIXEL |P_FLAG_ALWAYS_MATRIX |P_FLAG_READONLY | P_FLAG_NONE, + 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, ""); + load_builtin_param_float("ang", (void*)&presetInputs.ang_per_pixel, presetInputs.origtheta, P_FLAG_PER_PIXEL |P_FLAG_ALWAYS_MATRIX | P_FLAG_READONLY | P_FLAG_NONE, + 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, ""); + load_builtin_param_float("rad", (void*)&presetInputs.rad_per_pixel, presetInputs.origrad, P_FLAG_PER_PIXEL |P_FLAG_ALWAYS_MATRIX | P_FLAG_READONLY | P_FLAG_NONE, + 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, ""); + + for (unsigned int i = 0; i < NUM_Q_VARIABLES;i++) { + std::ostringstream os; + os << "q" << i; + load_builtin_param_float(os.str().c_str(), (void*)&presetOutputs.q[i], NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, ""); + + } + + /* variables added in 1.04 */ + load_builtin_param_int("meshx", (void*)&presetInputs.gx, P_FLAG_READONLY, 32, 96, 8, ""); + load_builtin_param_int("meshy", (void*)&presetInputs.gy, P_FLAG_READONLY, 24, 72, 6, ""); + + return PROJECTM_SUCCESS; + +} + diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/BuiltinParams.hpp b/3rdparty/libprojectm/MilkdropPresetFactory/BuiltinParams.hpp new file mode 100644 index 000000000..dbe60f10e --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/BuiltinParams.hpp @@ -0,0 +1,86 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ + + +/** BuiltinParams.hpp :: a class to encapsulate and centralize + * all projectm builtin parameter methods and state. Used primarily + * by preset class +**/ +#ifndef _BUILTIN_PARAMS_HPP +#define _BUILTIN_PARAMS_HPP + +#include +#include "PresetFrameIO.hpp" +#include "Param.hpp" +#include +#include + +class BuiltinParams { + +public: + typedef std::map AliasMap; + + /** Default constructor leaves database in an uninitialized state. */ + BuiltinParams(); + + /** Construct a new builtin parameter database with variables references given by + * the preset input and output structures */ + BuiltinParams(PresetInputs & presetInputs, PresetOutputs & presetOutputs); + + ~BuiltinParams(); + + /** Param database initalizer / destructor functions */ + int init_builtin_param_db(const PresetInputs & presetInputs, PresetOutputs & presetOutputs); + int load_all_builtin_param(const PresetInputs & presetInputs, PresetOutputs & presetOutputs); + int destroy_builtin_param_db(); + + int insert_param_alt_name( Param *param, const std::string& salt_name ); + Param *find_builtin_param( const std::string & name ); + int load_builtin_param_float( const std::string & name, void *engine_val, void *matrix, + short int flags, + float init_val, float upper_bound, + float lower_bound, const std::string & alt_name ); + int load_builtin_param_int( const std::string & name, void *engine_val, short int flags, + int init_val, int upper_bound, + int lower_bound, const std::string & alt_name ); + int load_builtin_param_bool( const std::string & name, void *engine_val, short int flags, + int init_val, const std::string & alt_name ); + + int load_builtin_param_string( const std::string & name, std::string * engine_val, short int flags); + + int insert_builtin_param( Param *param ); + + template + void apply(Fun & fun) { + traverse(builtin_param_tree, fun); + } + + +private: + static const bool BUILTIN_PARAMS_DEBUG = false; + + // Used to associate multiple string names to one parameter + AliasMap aliasMap; + + // Internal datastructure to store the parameters + std::map builtin_param_tree; +}; +#endif diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/CMakeLists.txt b/3rdparty/libprojectm/MilkdropPresetFactory/CMakeLists.txt new file mode 100644 index 000000000..5d07c525e --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/CMakeLists.txt @@ -0,0 +1,19 @@ +PROJECT(MilkdropPresetFactory) +cmake_minimum_required(VERSION 2.4.0) + + if(COMMAND cmake_policy) + cmake_policy(SET CMP0003 NEW) + endif(COMMAND cmake_policy) + +SET(MilkdropPresetFactory_SOURCES BuiltinFuncs.cpp Func.cpp MilkdropPreset.cpp Param.hpp PresetFrameIO.cpp CustomShape.cpp Eval.cpp MilkdropPresetFactory.cpp PerPixelEqn.cpp BuiltinParams.cpp InitCond.cpp Parser.cpp CustomWave.cpp Expr.cpp PerPointEqn.cpp Param.cpp PerFrameEqn.cpp IdlePreset.cpp) + +IF(NOT MSVC) + SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") +ENDIF(NOT MSVC) + +INCLUDE_DIRECTORIES(${projectM_SOURCE_DIR} ${Renderer_SOURCE_DIR}) +LINK_DIRECTORIES(${projectM_BINARY_DIR} ${Renderer_BINARY_DIR}) + +ADD_LIBRARY(MilkdropPresetFactory STATIC ${MilkdropPresetFactory_SOURCES}) +SET_TARGET_PROPERTIES(MilkdropPresetFactory PROPERTIES VERSION 2.00 SOVERSION 2) +TARGET_LINK_LIBRARIES(MilkdropPresetFactory Renderer) diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/CValue.hpp b/3rdparty/libprojectm/MilkdropPresetFactory/CValue.hpp new file mode 100755 index 000000000..7c2f5573d --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/CValue.hpp @@ -0,0 +1,38 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id$ + * + * Value + * + * $Log$ + */ + +#ifndef _CVALUE_H +#define _CVALUE_H + +typedef union CValue_t { + bool bool_val; + int int_val; + float float_val; + } CValue; + +#endif /** _CVALUE_H */ diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/CustomShape.cpp b/3rdparty/libprojectm/MilkdropPresetFactory/CustomShape.cpp new file mode 100755 index 000000000..4d2c28306 --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/CustomShape.cpp @@ -0,0 +1,255 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2004 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed i 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ + +#include +#include "Common.hpp" +#include "fatal.h" + +#include "CustomShape.hpp" +#include "Eval.hpp" +#include "Expr.hpp" +#include "InitCond.hpp" +#include "Param.hpp" +#include "PerFrameEqn.hpp" +#include "Preset.hpp" +#include +#include "ParamUtils.hpp" +#include "InitCondUtils.hpp" +#include "wipemalloc.h" + + + +CustomShape::CustomShape() : Shape() +{ + CustomShape(0); +}; + +CustomShape::CustomShape ( int id ) : Shape() +{ + + Param * param; + + this->id = id; + this->per_frame_count = 0; + + /* Start: Load custom shape parameters */ + param = Param::new_param_float ( "r", P_FLAG_NONE, &this->r, NULL, 1.0, 0.0, 0.5 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "g", P_FLAG_NONE, &this->g, NULL, 1.0, 0.0, .5 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "b", P_FLAG_NONE, &this->b, NULL, 1.0, 0.0, .5 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "a", P_FLAG_NONE, &this->a, NULL, 1.0, 0.0, .5 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "border_r", P_FLAG_NONE, &this->border_r, NULL, 1.0, 0.0, .5 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "border_g", P_FLAG_NONE, &this->border_g, NULL, 1.0, 0.0, .5 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "border_b", P_FLAG_NONE, &this->border_b, NULL, 1.0, 0.0, .5 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "border_a", P_FLAG_NONE, &this->border_a, NULL, 1.0, 0.0, .5 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "r2", P_FLAG_NONE, &this->r2, NULL, 1.0, 0.0, .5 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "g2", P_FLAG_NONE, &this->g2, NULL, 1.0, 0.0, .5 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "b2", P_FLAG_NONE, &this->b2, NULL, 1.0, 0.0, .5 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "a2", P_FLAG_NONE, &this->a2, NULL, 1.0, 0.0, .5 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "x", P_FLAG_NONE, &this->x, NULL, 1.0, 0.0, .5 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "y", P_FLAG_NONE, &this->y, NULL, 1.0, 0.0, .5 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_bool ( "thickoutline", P_FLAG_NONE, &this->thickOutline, 1, 0, 0 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_bool ( "enabled", P_FLAG_NONE, &this->enabled, 1, 0, 0 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_int ( "sides", P_FLAG_NONE, &this->sides, 100, 3, 3 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_bool ( "additive", P_FLAG_NONE, &this->additive, 1, 0, 0 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_bool ( "textured", P_FLAG_NONE, &this->textured, 1, 0, 0 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "rad", P_FLAG_NONE, &this->radius, NULL, MAX_DOUBLE_SIZE, 0, 0.0 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "ang", P_FLAG_NONE, &this->ang, NULL, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, 0.0 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "tex_zoom", P_FLAG_NONE, &this->tex_zoom, NULL, MAX_DOUBLE_SIZE, .00000000001, 0.0 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "tex_ang", P_FLAG_NONE, &this->tex_ang, NULL, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, 0.0 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + + param = Param::new_param_float ( "t1", P_FLAG_TVAR, &this->t1, NULL, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, 0.0 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "t2", P_FLAG_TVAR, &this->t2, NULL, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, 0.0 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "t3", P_FLAG_TVAR, &this->t3, NULL, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, 0.0 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "t4", P_FLAG_TVAR, &this->t4, NULL, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, 0.0 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "t5", P_FLAG_TVAR, &this->t5, NULL, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, 0.0 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "t6", P_FLAG_TVAR, &this->t6, NULL, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, 0.0 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "t7", P_FLAG_TVAR, &this->t7, NULL, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, 0.0 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + param = Param::new_param_float ( "t8", P_FLAG_TVAR, &this->t8, NULL, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, 0.0 ); + if ( !ParamUtils::insert( param, &this->param_tree ) ) + { + abort(); + } + + for (unsigned int i = 1; i <= NUM_Q_VARIABLES;i++) { + std::ostringstream os; + os << "q" << i; + param = Param::new_param_float ( os.str().c_str(), P_FLAG_QVAR, &this->q[i], NULL, MAX_DOUBLE_SIZE, + -MAX_DOUBLE_SIZE, 0.0 ); + if ( ParamUtils::insert ( param, &this->param_tree ) < 0 ) + { + abort(); + } + } + + param = Param::new_param_string ( "imageurl", P_FLAG_NONE, &this->imageUrl); + if ( !ParamUtils::insert( param, &this->text_properties_tree ) ) + { + abort(); + } + +} + +/* Frees a custom shape form object */ +CustomShape::~CustomShape() +{ + + traverseVector > ( per_frame_eqn_tree ); + traverse > ( init_cond_tree ); + traverse > ( param_tree ); + traverse > ( per_frame_init_eqn_tree ); + traverse > ( text_properties_tree ); + +} + +void CustomShape::loadUnspecInitConds() +{ + + InitCondUtils::LoadUnspecInitCond fun ( this->init_cond_tree, this->per_frame_init_eqn_tree ); + traverse ( param_tree, fun ); +} + +void CustomShape::evalInitConds() +{ + // NOTE: This is verified to be same behavior as trunk + for ( std::map::iterator pos = per_frame_init_eqn_tree.begin(); + pos != per_frame_init_eqn_tree.end();++pos ) + pos->second->evaluate(); +} diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/CustomShape.hpp b/3rdparty/libprojectm/MilkdropPresetFactory/CustomShape.hpp new file mode 100755 index 000000000..eb9a8e8c7 --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/CustomShape.hpp @@ -0,0 +1,90 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id$ + * + * Encapsulation of a custom shape + * + * $Log$ + */ + +#ifndef _CUSTOM_SHAPE_H +#define _CUSTOM_SHAPE_H + +#define CUSTOM_SHAPE_DEBUG 0 +#include +#include "Param.hpp" +#include "PerFrameEqn.hpp" +#include "InitCond.hpp" +#include "Renderer/Renderable.hpp" +#include + +class Preset; + + +class CustomShape : public Shape { +public: + /* Numerical id */ + int id; + int per_frame_count; + + /* Parameter tree associated with this custom shape */ + std::map param_tree; + + /* Engine variables */ + + bool enabled; + + /* stupid t variables */ + float t1; + float t2; + float t3; + float t4; + float t5; + float t6; + float t7; + float t8; + + /* stupider q variables */ + float q[NUM_Q_VARIABLES]; + + // Data structure to hold per frame / per frame init equations + std::map init_cond_tree; + std::vector per_frame_eqn_tree; + std::map per_frame_init_eqn_tree; + + std::map text_properties_tree; + + + /// Allocate a new custom shape, including param associations, per point equations, and initial values. + /// \param id an integer id to associate with this custom wave. Future line parsing uses this as a reference key. + CustomShape( int id ); + CustomShape(); + ~CustomShape(); + + void loadUnspecInitConds(); + void evalInitConds(); + + }; + + +#endif /** !_CUSTOM_SHAPE_H */ + diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/CustomWave.cpp b/3rdparty/libprojectm/MilkdropPresetFactory/CustomWave.cpp new file mode 100755 index 000000000..935cea745 --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/CustomWave.cpp @@ -0,0 +1,539 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2004 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ + +#include +#include +#include + +#include + +#include "Common.hpp" +#include "fatal.h" + +#include "CustomWave.hpp" +#include "Eval.hpp" +#include "Expr.hpp" +#include "InitCond.hpp" +#include "Param.hpp" +#include "PerFrameEqn.hpp" +#include "PerPointEqn.hpp" +#include "Preset.hpp" +#include +#include "ParamUtils.hpp" +#include "InitCondUtils.hpp" +#include "wipemalloc.h" +#define MAX_SAMPLE_SIZE 4096 + + +CustomWave::CustomWave(int _id) : Waveform(512), + id(_id), + per_frame_count(0), + r(0), + g(0), + b(0), + a(0) +{ + + Param * param; + + /// @bug deprecate the use of wipemalloc + this->r_mesh = (float*)wipemalloc(MAX_SAMPLE_SIZE*sizeof(float)); + this->g_mesh = (float*)wipemalloc(MAX_SAMPLE_SIZE*sizeof(float)); + this->b_mesh = (float*)wipemalloc(MAX_SAMPLE_SIZE*sizeof(float)); + this->a_mesh = (float*)wipemalloc(MAX_SAMPLE_SIZE*sizeof(float)); + this->x_mesh = (float*)wipemalloc(MAX_SAMPLE_SIZE*sizeof(float)); + this->y_mesh = (float*)wipemalloc(MAX_SAMPLE_SIZE*sizeof(float)); + this->value1 = (float*) wipemalloc(MAX_SAMPLE_SIZE*sizeof(float)); + this->value2 = (float*)wipemalloc(MAX_SAMPLE_SIZE*sizeof(float)); + this->sample_mesh = (float*)wipemalloc(MAX_SAMPLE_SIZE*sizeof(float)); + + /* Start: Load custom wave parameters */ + + if ((param = Param::new_param_float("r", P_FLAG_NONE | P_FLAG_PER_POINT, &this->r, this->r_mesh, 1.0, 0.0, .5)) == NULL) + { + ; + /// @bug make exception + abort(); + } + + if (ParamUtils::insert(param, ¶m_tree) < 0) + { + /// @bug make exception + abort(); + } + + if ((param = Param::new_param_float("g", P_FLAG_NONE | P_FLAG_PER_POINT, &this->g, this->g_mesh, 1.0, 0.0, .5)) == NULL) + { + ; + /// @bug make exception + abort(); + } + + if (ParamUtils::insert(param, ¶m_tree) < 0) + { + ; + /// @bug make exception + abort(); + } + + if ((param = Param::new_param_float("b", P_FLAG_NONE | P_FLAG_PER_POINT, &this->b, this->b_mesh, 1.0, 0.0, .5)) == NULL) + { + ; + /// @bug make exception + abort(); + + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + ; + /// @bug make exception + abort(); + } + + if ((param = Param::new_param_float("a", P_FLAG_NONE | P_FLAG_PER_POINT, &this->a, this->a_mesh, 1.0, 0.0, .5)) == NULL) + { + ; + /// @bug make exception + abort(); + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + ; + /// @bug make exception + abort(); + } + + if ((param = Param::new_param_float("x", P_FLAG_NONE | P_FLAG_PER_POINT, &this->x, this->x_mesh, 1.0, 0.0, .5)) == NULL) + { + ; + /// @bug make exception + abort(); + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + ; + /// @bug make exception + abort(); + } + + if ((param = Param::new_param_float("y", P_FLAG_NONE | P_FLAG_PER_POINT, &this->y, this->y_mesh, 1.0, 0.0, .5)) == NULL) + { + ; + /// @bug make exception + abort(); + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + ; + + /// @bug make exception + abort(); + + } + + if ((param = Param::new_param_bool("enabled", P_FLAG_NONE, &this->enabled, 1, 0, 0)) == NULL) + { + ; + /// @bug make exception + abort(); + + + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + ; + + /// @bug make exception + abort(); + + } + + if ((param = Param::new_param_int("sep", P_FLAG_NONE, &this->sep, 100, -100, 0)) == NULL) + { + ; + /// @bug make exception + abort(); + + + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + ; + /// @bug make exception + abort(); + + + } + + if ((param = Param::new_param_bool("bspectrum", P_FLAG_NONE, &this->spectrum, 1, 0, 0)) == NULL) + { + /// @bug make exception + abort(); + + + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + /// @bug make exception + abort(); + + } + + if ((param = Param::new_param_bool("bdrawthick", P_FLAG_NONE, &this->thick, 1, 0, 0)) == NULL) + { + /// @bug make exception + abort(); + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + /// @bug make exception + abort(); + + } + + if ((param = Param::new_param_bool("busedots", P_FLAG_NONE, &this->dots, 1, 0, 0)) == NULL) + { + + /// @bug make exception + abort(); + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + ; + abort(); + } + + if ((param = Param::new_param_bool("badditive", P_FLAG_NONE, &this->additive, 1, 0, 0)) == NULL) + { + ; + abort(); + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + ; + abort(); + } + + if ((param = Param::new_param_int("samples", P_FLAG_NONE, &this->samples, 2048, 1, 512)) == NULL) + { + ; + abort(); + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + ; + abort(); + } + + if ((param = Param::new_param_float("sample", P_FLAG_READONLY | P_FLAG_NONE | P_FLAG_ALWAYS_MATRIX | P_FLAG_PER_POINT, + &this->sample, this->sample_mesh, 1.0, 0.0, 0.0)) == NULL) + { + ; + abort(); + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + abort(); + } + + if ((param = Param::new_param_float("value1", P_FLAG_READONLY | P_FLAG_NONE | P_FLAG_ALWAYS_MATRIX | P_FLAG_PER_POINT, &this->v1, this->value1, 1.0, -1.0, 0.0)) == NULL) + { + abort(); + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + abort(); + } + + if ((param = Param::new_param_float("value2", P_FLAG_READONLY | P_FLAG_NONE | P_FLAG_ALWAYS_MATRIX | P_FLAG_PER_POINT, &this->v2, this->value2, 1.0, -1.0, 0.0)) == NULL) + { + abort(); + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + ; + abort(); + } + + if ((param = Param::new_param_float("smoothing", P_FLAG_NONE, &this->smoothing, NULL, 1.0, 0.0, 0.0)) == NULL) + { + ; + abort(); + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + ; + abort(); + } + + if ((param = Param::new_param_float("scaling", P_FLAG_NONE, &this->scaling, NULL, MAX_DOUBLE_SIZE, 0.0, 1.0)) == NULL) + { + ; + abort(); + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + ; + abort(); + } + + if ((param = Param::new_param_float("t1", P_FLAG_PER_POINT | P_FLAG_TVAR, &this->t1, NULL, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, 0.0)) == NULL) + { + ; + abort(); + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + ; + abort(); + } + + if ((param = Param::new_param_float("t2", P_FLAG_PER_POINT |P_FLAG_TVAR, &this->t2, NULL, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, 0.0)) == NULL) + { + ; + abort(); + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + abort(); + } + + if ((param = Param::new_param_float("t3", P_FLAG_PER_POINT |P_FLAG_TVAR, &this->t3, NULL, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, 0.0)) == NULL) + { + abort(); + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + + abort(); + } + if ((param = Param::new_param_float("t4", P_FLAG_PER_POINT |P_FLAG_TVAR, &this->t4, NULL, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, 0.0)) == NULL) + { + + abort(); + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + abort(); + } + if ((param = Param::new_param_float("t5", P_FLAG_TVAR, &this->t5, NULL, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, 0.0)) == NULL) + { + abort(); + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + abort(); + } + + if ((param = Param::new_param_float("t6", P_FLAG_TVAR | P_FLAG_PER_POINT, &this->t6, NULL, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, 0.0)) == NULL) + { + abort(); + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + + abort(); + } + if ((param = Param::new_param_float("t7", P_FLAG_TVAR | P_FLAG_PER_POINT, &this->t7, NULL, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, 0.0)) == NULL) + { + + abort(); + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + ; + abort(); + } + + if ((param = Param::new_param_float("t8", P_FLAG_TVAR | P_FLAG_PER_POINT, &this->t8, NULL, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, 0.0)) == NULL) + { + ; + abort(); + } + + if (ParamUtils::insert(param, &this->param_tree) < 0) + { + ; + abort(); + } + + for (unsigned int i = 1; i <= NUM_Q_VARIABLES;i++) { + std::ostringstream os; + os << "q" << i; + param = Param::new_param_float ( os.str().c_str(), P_FLAG_QVAR, &this->q[i], NULL, MAX_DOUBLE_SIZE, + -MAX_DOUBLE_SIZE, 0.0 ); + if ( ParamUtils::insert ( param, &this->param_tree ) < 0 ) + { + abort(); + } + } + + /* End of parameter loading. Note that the read only parameters associated + with custom waves (ie, sample) are variables stored in PresetFrameIO.hpp, + and not specific to the custom wave datastructure. */ + +} + +CustomWave::~CustomWave() +{ + + + for (std::vector::iterator pos = per_point_eqn_tree.begin(); pos != per_point_eqn_tree.end(); ++pos) + delete(*pos); + + for (std::vector::iterator pos = per_frame_eqn_tree.begin(); pos != per_frame_eqn_tree.end(); ++pos) + delete(*pos); + + for (std::map::iterator pos = init_cond_tree.begin(); pos != init_cond_tree.end(); ++pos) + delete(pos->second); + + for (std::map::iterator pos = per_frame_init_eqn_tree.begin(); pos != per_frame_init_eqn_tree.end(); ++pos) + delete(pos->second); + + for (std::map::iterator pos = param_tree.begin(); pos != param_tree.end(); ++pos) + delete(pos->second); + + free(r_mesh); + free(g_mesh); + free(b_mesh); + free(a_mesh); + free(x_mesh); + free(y_mesh); + free(value1); + free(value2); + free(sample_mesh); + +} + + + + +// Comments: index is not passed, so we assume monotonic increment by 1 is ok here +int CustomWave::add_per_point_eqn(char * name, GenExpr * gen_expr) +{ + + PerPointEqn * per_point_eqn; + int index; + Param * param = NULL; + + /* Argument checks */ + if (gen_expr == NULL) + return PROJECTM_FAILURE; + if (name == NULL) + return PROJECTM_FAILURE; + + if (CUSTOM_WAVE_DEBUG) printf("add_per_point_eqn: per pixel equation (name = \"%s\")\n", name); + + /* Search for the parameter so we know what matrix the per pixel equation is referencing */ + + if ((param = ParamUtils::find(name,¶m_tree)) == NULL) + { + if (CUSTOM_WAVE_DEBUG) printf("add_per_point_eqn: failed to allocate a new parameter!\n"); + return PROJECTM_FAILURE; + + } + + /* Get largest index in the tree */ + index = per_point_eqn_tree.size(); + + /* Create the per point equation given the index, parameter, and general expression */ + if ((per_point_eqn = new PerPointEqn(index, param, gen_expr, samples)) == NULL) + return PROJECTM_FAILURE; + if (CUSTOM_WAVE_DEBUG) + printf("add_per_point_eqn: created new equation (index = %d) (name = \"%s\")\n", per_point_eqn->index, per_point_eqn->param->name.c_str()); + + /* Insert the per pixel equation into the preset per pixel database */ + + per_point_eqn_tree.push_back(per_point_eqn); + + /* Done */ + return PROJECTM_SUCCESS; +} + + +void CustomWave::evalInitConds() +{ + + for (std::map::iterator pos = per_frame_init_eqn_tree.begin(); pos != per_frame_init_eqn_tree.end(); ++pos) + { + assert(pos->second); + pos->second->evaluate(); + } + +} + +ColoredPoint CustomWave::PerPoint(ColoredPoint p, const WaveformContext context) +{ + r_mesh[context.sample_int] = r; + g_mesh[context.sample_int] = g; + b_mesh[context.sample_int] = b; + a_mesh[context.sample_int] = a; + x_mesh[context.sample_int] = x; + y_mesh[context.sample_int] = y; + sample = context.sample; + sample_mesh[context.sample_int] = context.sample; + v1 = context.left; + v2 = context.right; + + for (std::vector::iterator pos = per_point_eqn_tree.begin(); pos != per_point_eqn_tree.end();++pos) + (*pos)->evaluate(context.sample_int); + + p.a = a_mesh[context.sample_int]; + p.r = r_mesh[context.sample_int]; + p.g = g_mesh[context.sample_int]; + p.b = b_mesh[context.sample_int]; + p.x = x_mesh[context.sample_int]; + p.y = y_mesh[context.sample_int]; + + return p; +} + + +void CustomWave::loadUnspecInitConds() +{ + + InitCondUtils::LoadUnspecInitCond fun(this->init_cond_tree, this->per_frame_init_eqn_tree); + traverse(param_tree, fun); +} + diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/CustomWave.hpp b/3rdparty/libprojectm/MilkdropPresetFactory/CustomWave.hpp new file mode 100755 index 000000000..a951fedeb --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/CustomWave.hpp @@ -0,0 +1,128 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id$ + * + * Encapsulation of a custom wave + * + * $Log$ + */ + +#ifndef _CUSTOM_WAVE_H +#define _CUSTOM_WAVE_H + +#define CUSTOM_WAVE_DEBUG 0 + +class CustomWave; +class GenExpr; +class PerPointEqn; +class Preset; + +#include + +#include "Common.hpp" +#include "Param.hpp" +#include "PerFrameEqn.hpp" +#include "Renderer/Waveform.hpp" + +#include + +class CustomWave : public Waveform +{ +public: + + /** Empty constructor leaves wave in undefined state **/ + //CustomWave() {} + + /** Initializes a custom wave id given the integer id */ + CustomWave(int id); + + /** Destructor is necessary so we can free the per point matrices **/ + ~CustomWave(); + + ColoredPoint PerPoint(ColoredPoint p, const WaveformContext context); + + /* Numerical id */ + int id; + int per_frame_count; + + /* Parameter tree associated with this custom wave */ + std::map param_tree; + + /* Engine variables */ + float x; /* x position for per point equations */ + float y; /* y position for per point equations */ + float r; /* red color value */ + float g; /* green color value */ + float b; /* blue color value */ + float a; /* alpha color value */ + float * x_mesh; + float * y_mesh; + float * r_mesh; + float * b_mesh; + float * g_mesh; + float * a_mesh; + float * value1; + float * value2; + float * sample_mesh; + + bool enabled; /* if true then wave is visible, hidden otherwise */ + + float sample; + + /* stupid t variables */ + float t1; + float t2; + float t3; + float t4; + float t5; + float t6; + float t7; + float t8; + + + /* stupider q variables */ + float q[NUM_Q_VARIABLES]; + + float v1,v2; + + /* Data structures to hold per frame and per point equations */ + std::map init_cond_tree; + std::vector per_frame_eqn_tree; + std::vector per_point_eqn_tree; + std::map per_frame_init_eqn_tree; + + /* Denotes the index of the last character for each string buffer */ + int per_point_eqn_string_index; + int per_frame_eqn_string_index; + int per_frame_init_eqn_string_index; + + int add_per_point_eqn(char * name, GenExpr * gen_expr); + void evalCustomWaveInitConditions(Preset *preset); + + + void loadUnspecInitConds(); + + void evalInitConds(); + +}; + +#endif /** !_CUSTOM_WAVE_H */ diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/Eval.cpp b/3rdparty/libprojectm/MilkdropPresetFactory/Eval.cpp new file mode 100755 index 000000000..1810f7441 --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/Eval.cpp @@ -0,0 +1,91 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2004 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/* Evaluation Code */ + +#include +#include + +#include "Common.hpp" +#include "fatal.h" + +#include "Eval.hpp" +#include "Expr.hpp" +#include "Param.hpp" +#include "Func.hpp" +#include "wipemalloc.h" + +#include "BuiltinFuncs.hpp" + +InfixOp *Eval::infix_add = NULL; +InfixOp *Eval::infix_minus = NULL; +InfixOp *Eval::infix_div = NULL; +InfixOp *Eval::infix_mult = NULL; +InfixOp *Eval::infix_or = NULL; +InfixOp *Eval::infix_and = NULL; +InfixOp *Eval::infix_mod = NULL; +InfixOp *Eval::infix_negative = NULL; +InfixOp *Eval::infix_positive = NULL; + +/* Initializes all infix operators */ +int Eval::init_infix_ops() { + + Eval::infix_add = new InfixOp(INFIX_ADD, 4); + Eval::infix_minus = new InfixOp(INFIX_MINUS, 3); + Eval::infix_div = new InfixOp(INFIX_DIV, 2); + Eval::infix_or = new InfixOp(INFIX_OR, 5); + Eval::infix_and = new InfixOp(INFIX_AND,4); + Eval::infix_mod = new InfixOp(INFIX_MOD, 1); + Eval::infix_mult = new InfixOp(INFIX_MULT, 2); + + /* Prefix operators */ + Eval::infix_positive = new InfixOp(INFIX_ADD, 0); + Eval::infix_negative = new InfixOp(INFIX_MINUS, 0); + + return PROJECTM_SUCCESS; +} + +/* Destroys the infix operator list. This should + be done on program exit */ +int Eval::destroy_infix_ops() +{ + + delete(Eval::infix_add); + delete(Eval::infix_minus); + delete(Eval::infix_div); + delete(Eval::infix_or); + delete(Eval::infix_and); + delete(Eval::infix_mod); + delete(Eval::infix_mult); + delete(Eval::infix_positive); + delete(Eval::infix_negative); + + Eval::infix_add = NULL; + Eval::infix_minus = NULL; + Eval::infix_div = NULL; + Eval::infix_or = NULL; + Eval::infix_and = NULL; + Eval::infix_mod = NULL; + Eval::infix_mult = NULL; + Eval::infix_positive = NULL; + Eval::infix_negative = NULL; + + return PROJECTM_SUCCESS; +} diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/Eval.hpp b/3rdparty/libprojectm/MilkdropPresetFactory/Eval.hpp new file mode 100755 index 000000000..51bd22f7b --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/Eval.hpp @@ -0,0 +1,94 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id$ + * + * Expression evaluators + * + * $Log$ + */ + +/* Eval.hpp: evaluation functions of expressions */ + +#ifndef __EVAL_H +#define __EVAL_H + +#include "fatal.h" +//#include "projectM.hpp" +#include "Func.hpp" +#include "Param.hpp" + +#define EVAL_DEBUG 0 +//#define EVAL_DEBUG_DOUBLE 2 + +#define VAL_T 1 +#define PREFUN_T 3 +#define TREE_T 4 +#define NONE_T 0 + +#define CONSTANT_TERM_T 0 +#define PARAM_TERM_T 1 + +#define INFIX_ADD 0 +#define INFIX_MINUS 1 +#define INFIX_MOD 2 +#define INFIX_DIV 3 +#define INFIX_MULT 4 +#define INFIX_OR 5 +#define INFIX_AND 6 + +class DLLEXPORT InfixOp; + +class Eval { +public: + static InfixOp *infix_add, + *infix_minus, + *infix_div, + *infix_mult, + *infix_or, + *infix_and, + *infix_mod, + *infix_negative, + *infix_positive; + + float eval_gen_expr(GenExpr * gen_expr); + inline GenExpr * opt_gen_expr(GenExpr * gen_expr, int ** param_list); + + GenExpr * const_to_expr(float val); + GenExpr * param_to_expr(Param * param); + GenExpr * prefun_to_expr(float (*func_ptr)(), GenExpr ** expr_list, int num_args); + + static TreeExpr * new_tree_expr(InfixOp * infix_op, GenExpr * gen_expr, TreeExpr * left, TreeExpr * right); + static GenExpr * new_gen_expr(int type, void * item); + static ValExpr * new_val_expr(int type, Term *term); + + static InfixOp * new_infix_op(int type, int precedence); + static int init_infix_ops(); + static int destroy_infix_ops(); + void reset_engine_vars(); + + GenExpr * clone_gen_expr(GenExpr * gen_expr); + TreeExpr * clone_tree_expr(TreeExpr * tree_expr); + ValExpr * clone_val_expr(ValExpr * val_expr); + PrefunExpr * clone_prefun_expr(PrefunExpr * prefun_expr); + }; + +#endif /** !_EVAL_H */ diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/Expr.cpp b/3rdparty/libprojectm/MilkdropPresetFactory/Expr.cpp new file mode 100755 index 000000000..58142ad35 --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/Expr.cpp @@ -0,0 +1,375 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2004 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ + +#include "wipemalloc.h" + +#include "Expr.hpp" +#include + +#include +#include "Eval.hpp" + +float GenExpr::eval_gen_expr ( int mesh_i, int mesh_j ) +{ + float l; + + assert ( item ); + switch ( this->type ) + { + case VAL_T: + return ( ( ValExpr* ) item )->eval_val_expr ( mesh_i, mesh_j ); + case PREFUN_T: + l = ( ( PrefunExpr * ) item )->eval_prefun_expr ( mesh_i, mesh_j ); + //if (EVAL_DEBUG) DWRITE( "eval_gen_expr: prefix function return value: %f\n", l); + return l; + case TREE_T: + return ( ( TreeExpr* ) ( item ) )->eval_tree_expr ( mesh_i, mesh_j ); + default: + return EVAL_ERROR; + } + +} + +/* Evaluates functions in prefix form */ +float PrefunExpr::eval_prefun_expr ( int mesh_i, int mesh_j ) +{ + + + assert ( func_ptr ); + + float * arg_list = new float[this->num_args]; + + assert(arg_list); + + //printf("numargs %d", num_args); + + /* Evaluate each argument before calling the function itself */ + for ( int i = 0; i < num_args; i++ ) + { + arg_list[i] = expr_list[i]->eval_gen_expr ( mesh_i, mesh_j ); + //printf("numargs %x", arg_list[i]); + + + } + /* Now we call the function, passing a list of + floats as its argument */ + + const float value = ( func_ptr ) ( arg_list ); + + delete[](arg_list); + return value; +} + + +/* Evaluates a value expression */ +float ValExpr::eval_val_expr ( int mesh_i, int mesh_j ) +{ + + + /* Value is a constant, return the float value */ + if ( type == CONSTANT_TERM_T ) + { + return ( term.constant ); + } + + /* Value is variable, dereference it */ + if ( type == PARAM_TERM_T ) + { + switch ( term.param->type ) + { + + case P_TYPE_BOOL: + + + return ( float ) ( * ( ( bool* ) ( term.param->engine_val ) ) ); + case P_TYPE_INT: + + + return ( float ) ( * ( ( int* ) ( term.param->engine_val ) ) ); + case P_TYPE_DOUBLE: + + + if ( term.param->matrix_flag | ( term.param->flags & P_FLAG_ALWAYS_MATRIX ) ) + { + + /* Sanity check the matrix is there... */ + assert ( term.param->matrix != NULL ); + + /// @slow boolean check could be expensive in this critical (and common) step of evaluation + if ( mesh_i >= 0 ) + { + if ( mesh_j >= 0 ) + { + return ( ( ( float** ) term.param->matrix ) [mesh_i][mesh_j] ); + } + else + { + return ( ( ( float* ) term.param->matrix ) [mesh_i] ); + } + } + //assert(mesh_i >=0); + } + //std::cout << term.param->name << ": " << (*((float*)term.param->engine_val)) << std::endl; + return * ( ( float* ) ( term.param->engine_val ) ); + default: + return EVAL_ERROR; + } + } + /* Unknown type, return failure */ + return PROJECTM_FAILURE; +} + +/* Evaluates an expression tree */ +float TreeExpr::eval_tree_expr ( int mesh_i, int mesh_j ) +{ + + float left_arg, right_arg; + + /* A leaf node, evaluate the general expression. If the expression is null as well, return zero */ + if ( infix_op == NULL ) + { + if ( gen_expr == NULL ) + return 0; + else + return gen_expr->eval_gen_expr ( mesh_i, mesh_j ); + } + + /* Otherwise, this node is an infix operator. Evaluate + accordingly */ + + assert(left); + left_arg = left->eval_tree_expr ( mesh_i, mesh_j ); + + assert(right); + right_arg = right->eval_tree_expr ( mesh_i, mesh_j ); + + + switch ( infix_op->type ) + { + case INFIX_ADD: + return ( left_arg + right_arg ); + case INFIX_MINUS: + return ( left_arg - right_arg ); + case INFIX_MULT: + return ( left_arg * right_arg ); + case INFIX_MOD: + if ( ( int ) right_arg == 0 ) + { + return PROJECTM_DIV_BY_ZERO; + } + return ( ( int ) left_arg % ( int ) right_arg ); + case INFIX_OR: + return ( ( int ) left_arg | ( int ) right_arg ); + case INFIX_AND: + return ( ( int ) left_arg & ( int ) right_arg ); + case INFIX_DIV: + if ( right_arg == 0 ) + { + return MAX_DOUBLE_SIZE; + } + return ( left_arg / right_arg ); + default: + return EVAL_ERROR; + } + + return EVAL_ERROR; +} + +/* Converts a float value to a general expression */ +GenExpr * GenExpr::const_to_expr ( float val ) +{ + + GenExpr * gen_expr; + ValExpr * val_expr; + Term term; + + term.constant = val; + + if ( ( val_expr = new ValExpr ( CONSTANT_TERM_T, &term ) ) == NULL ) + return NULL; + + gen_expr = new GenExpr ( VAL_T, ( void* ) val_expr ); + + if ( gen_expr == NULL ) + { + delete val_expr; + } + + return gen_expr; +} + +/* Converts a regular parameter to an expression */ +GenExpr * GenExpr::param_to_expr ( Param * param ) +{ + + GenExpr * gen_expr = NULL; + ValExpr * val_expr = NULL; + Term term; + + if ( param == NULL ) + return NULL; + + /* This code is still a work in progress. We need + to figure out if the initial condition is used for + each per frame equation or not. I am guessing that + it isn't, and it is thusly implemented this way */ + + /* Current guess of true behavior (08/01/03) note from carm + First try to use the per_pixel_expr (with cloning) + If it is null however, use the engine variable instead. */ + + /* 08/20/03 : Presets are now objects, as well as per pixel equations. This ends up + making the parser handle the case where parameters are essentially per pixel equation + substitutions */ + + + term.param = param; + if ( ( val_expr = new ValExpr ( PARAM_TERM_T, &term ) ) == NULL ) + return NULL; + + if ( ( gen_expr = new GenExpr ( VAL_T, ( void* ) val_expr ) ) == NULL ) + { + delete val_expr; + return NULL; + } + return gen_expr; +} + +/* Converts a prefix function to an expression */ +GenExpr * GenExpr::prefun_to_expr ( float ( *func_ptr ) ( void * ), GenExpr ** expr_list, int num_args ) +{ + + GenExpr * gen_expr; + PrefunExpr * prefun_expr; + + prefun_expr = new PrefunExpr(); + + if ( prefun_expr == NULL ) + return NULL; + + prefun_expr->num_args = num_args; + prefun_expr->func_ptr = ( float ( * ) ( void* ) ) func_ptr; + prefun_expr->expr_list = expr_list; + + gen_expr = new GenExpr ( PREFUN_T, ( void* ) prefun_expr ); + + if ( gen_expr == NULL ) + delete prefun_expr; + + return gen_expr; +} + +/* Creates a new tree expression */ +TreeExpr::TreeExpr ( InfixOp * _infix_op, GenExpr * _gen_expr, TreeExpr * _left, TreeExpr * _right ) : + infix_op ( _infix_op ), gen_expr ( _gen_expr ), + left ( _left ), right ( _right ) {} + + +/* Creates a new value expression */ +ValExpr::ValExpr ( int _type, Term * _term ) :type ( _type ) +{ + + + //val_expr->type = _type; + term.constant = _term->constant; + term.param = _term->param; + + //return val_expr; +} + +/* Creates a new general expression */ + +GenExpr::GenExpr ( int _type, void * _item ) :type ( _type ), item ( _item ) {} + +/* Frees a general expression */ +GenExpr::~GenExpr() +{ + + switch ( type ) + { + case VAL_T: + delete ( ( ValExpr* ) item ); + break; + case PREFUN_T: + delete ( ( PrefunExpr* ) item ); + break; + case TREE_T: + delete ( ( TreeExpr* ) item ); + break; + } +} + +/* Frees a function in prefix notation */ +PrefunExpr::~PrefunExpr() +{ + + int i; + + /* Free every element in expression list */ + for ( i = 0 ; i < num_args; i++ ) + { + delete expr_list[i]; + } + free ( expr_list ); +} + +/* Frees values of type VARIABLE and CONSTANT */ +ValExpr::~ValExpr() +{} + +/* Frees a tree expression */ +TreeExpr::~TreeExpr() +{ + + /* free left tree */ + if ( left != NULL ) + { + delete left; + } + + /* free general expression object */ + if ( gen_expr != NULL ) + { + delete gen_expr; + } + + /* Note that infix operators are always + stored in memory unless the program + exits, so we don't remove them here */ + + /* free right tree */ + if ( right != NULL ) + { + delete right; + } +} + +/* Initializes an infix operator */ +InfixOp::InfixOp ( int type, int precedence ) +{ + + this->type = type; + this->precedence = precedence; +} + + + +PrefunExpr::PrefunExpr() {} diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/Expr.hpp b/3rdparty/libprojectm/MilkdropPresetFactory/Expr.hpp new file mode 100755 index 000000000..b732531af --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/Expr.hpp @@ -0,0 +1,122 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id$ + * + * Expression + * + * $Log$ + */ + +#ifndef _EXPR_H +#define _EXPR_H + +#include "dlldefs.h" +#include "CValue.hpp" + +class Param; + +#define CONST_STACK_ELEMENT 0 +#define EXPR_STACK_ELEMENT 1 + +#define EVAL_ERROR -1 + +/* Infix Operator Function */ +class InfixOp +{ +public: + int type; + int precedence; + + InfixOp( int type, int precedence ); +}; + +/** Term */ +class Term +{ +public: + float constant; /* static variable */ + Param *param; /* pointer to a changing variable */ + + Term() { this->constant = 0; this->param = 0; } +}; + +/* General Expression Type */ +class GenExpr +{ +public: + int type; + void * item; + + ~GenExpr(); + + GenExpr( int type, void *item ); + float eval_gen_expr(int mesh_i, int mesh_j); + + static GenExpr *const_to_expr( float val ); + static GenExpr *param_to_expr( Param *param ); + static GenExpr *prefun_to_expr( float (*func_ptr)(void *), GenExpr **expr_list, int num_args ); +}; + +/* Value expression, contains a term union */ +class ValExpr +{ +public: + int type; + Term term; + + ~ValExpr(); + ValExpr( int type, Term *term ); + + float eval_val_expr(int mesh_i, int mesh_j); +}; + +/* A binary expression tree ordered by operator precedence */ +class TreeExpr +{ +public: + InfixOp * infix_op; /* null if leaf */ + GenExpr * gen_expr; + TreeExpr *left, *right; + + ~TreeExpr(); + TreeExpr( InfixOp *infix_op, GenExpr *gen_expr, + TreeExpr *left, TreeExpr *right ); + + float eval_tree_expr(int mesh_i, int mesh_j); +}; + +/* A function expression in prefix form */ +class PrefunExpr +{ +public: + float (*func_ptr)(void*); + int num_args; + GenExpr **expr_list; + PrefunExpr(); + ~PrefunExpr(); + + /* Evaluates functions in prefix form */ + float eval_prefun_expr(int mesh_i, int mesh_j); + +}; + +#endif /** _EXPR_H */ diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/Func.cpp b/3rdparty/libprojectm/MilkdropPresetFactory/Func.cpp new file mode 100755 index 000000000..71a9b293a --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/Func.cpp @@ -0,0 +1,37 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2004 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/* Function management */ + +#include +#include +#include + +#include "Common.hpp" +#include "fatal.h" + +#include "Func.hpp" +#include + +Func::Func (const std::string & _name, float (*_func_ptr)(float*), int _num_args): + name(_name), func_ptr(_func_ptr), num_args(_num_args) {} + +/* Frees a function type, real complicated... */ +Func::~Func() {} diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/Func.hpp b/3rdparty/libprojectm/MilkdropPresetFactory/Func.hpp new file mode 100755 index 000000000..ae571b75a --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/Func.hpp @@ -0,0 +1,63 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id$ + * + * Function + * + * $Log$ + */ + +#ifndef _FUNC_H +#define _FUNC_H + +#include "Common.hpp" +#include + +/* Function Type */ +class DLLEXPORT Func { +public: + + /// Create a new function wrapper object + /// \param name a name to uniquely identify the function. + /// \param func_ptr a pointer to a function of floating point arguments + /// \param num_args the number of floating point arguments this function requires + Func(const std::string & name, float (*func_ptr)(float*), int num_args ); + + /* Public Prototypes */ + ~Func(); + + inline const std::string & getName() const { + return name; + } + + inline int getNumArgs() const { + return num_args; + } + + float (*func_ptr)(float*); +private: + std::string name; + int num_args; + +}; + +#endif /** !_FUNC_H */ diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/IdlePreset.cpp b/3rdparty/libprojectm/MilkdropPresetFactory/IdlePreset.cpp new file mode 100644 index 000000000..5a48532ee --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/IdlePreset.cpp @@ -0,0 +1,209 @@ +#include "IdlePreset.hpp" +#include +#include +#include "MilkdropPreset.hpp" +const std::string IdlePresets::IDLE_PRESET_NAME + ("Geiss & Sperl - Feedback (projectM idle HDR mix).milk"); + +std::string IdlePresets::presetText() { + +std::ostringstream out; + +out << "[preset00]\n" << +"fRating=2.000000\n" << +"fGammaAdj=1.700000\n" << +"fDecay=0.940000\n" << +"fVideoEchoZoom=1.000000\n" << +"fVideoEchoAlpha=0.000000\n" << +"nVideoEchoOrientation=0\n" << +"nWaveMode=0\n" << +"bAdditiveWaves=1\n" << +"bWaveDots=0\n" << +"bWaveThick=0\n" << +"bModWaveAlphaByVolume=0\n" << +"bMaximizeWaveColor=0\n" << +"bTexWrap=1\n" << +"bDarkenCenter=0\n" << +"bRedBlueStereo=0\n" << +"bBrighten=0\n" << +"bDarken=0\n" << +"bSolarize=0\n" << +"bInvert=0\n" << +"fWaveAlpha=0.001000\n" << +"fWaveScale=0.010000\n" << +"fWaveSmoothing=0.630000\n" << +"fWaveParam=-1.000000\n" << +"fModWaveAlphaStart=0.710000\n" << +"fModWaveAlphaEnd=1.300000\n" << +"fWarpAnimSpeed=1.000000\n" << +"fWarpScale=1.331000\n" << +"fZoomExponent=1.000000\n" << +"fShader=0.000000\n" << +"zoom=13.290894\n" << +"rot=-0.020000\n" << +"cx=0.500000\n" << +"cy=0.500000\n" << +"dx=-0.280000\n" << +"dy=-0.320000\n" << +"warp=0.010000\n" << +"sx=1.000000\n" << +"sy=1.000000\n" << +"wave_r=0.650000\n" << +"wave_g=0.650000\n" << +"wave_b=0.650000\n" << +"wave_x=0.500000\n" << +"wave_y=0.500000\n" << +"ob_size=0.000000\n" << +"ob_r=0.010000\n" << +"ob_g=0.000000\n" << +"ob_b=0.000000\n" << +"ob_a=1.000000\n" << +"ib_size=0.000000\n" << +"ib_r=0.950000\n" << +"ib_g=0.850000\n" << +"ib_b=0.650000\n" << +"ib_a=1.000000\n" << +"nMotionVectorsX=64.000000\n" << +"nMotionVectorsY=0.000000\n" << +"mv_dx=0.000000\n" << +"mv_dy=0.000000\n" << +"mv_l=0.900000\n" << +"mv_r=1.000000\n" << +"mv_g=1.000000\n" << +"mv_b=1.000000\n" << +"mv_a=0.000000\n" << +"shapecode_3_enabled=1\n" << +"shapecode_3_sides=20\n" << +"shapecode_3_additive=0\n" << +"shapecode_3_thickOutline=0\n" << +"shapecode_3_textured=1\n" << +"shapecode_3_ImageURL=M.tga\n" << +"shapecode_3_x=0.68\n" << +"shapecode_3_y=0.5\n" << +"shapecode_3_rad=0.41222\n" << +"shapecode_3_ang=0\n" << +"shapecode_3_tex_ang=0\n" << +"shapecode_3_tex_zoom=0.71\n" << +"shapecode_3_r=1\n" << +"shapecode_3_g=1\n" << +"shapecode_3_b=1\n" << +"shapecode_3_a=1\n" << +"shapecode_3_r2=1\n" << +"shapecode_3_g2=1\n" << +"shapecode_3_b2=1\n" << +"shapecode_3_a2=1\n" << +"shapecode_3_border_r=0\n" << +"shapecode_3_border_g=0\n" << +"shapecode_3_border_b=0\n" << +"shapecode_3_border_a=0\n" << +"shape_3_per_frame1=x = x + q1;\n" << +"shape_3_per_frame2=y = y + q2;\n" << +"shape_3_per_frame3=r =0.5 + 0.5*sin(q8*0.613 + 1);\n" << +"shape_3_per_frame4=g = 0.5 + 0.5*sin(q8*0.763 + 2);\n" << +"shape_3_per_frame5=b = 0.5 + 0.5*sin(q8*0.771 + 5);\n" << +"shape_3_per_frame6=r2 = 0.5 + 0.5*sin(q8*0.635 + 4);\n" << +"shape_3_per_frame7=g2 = 0.5 + 0.5*sin(q8*0.616+ 1);\n" << +"shape_3_per_frame8=b2 = 0.5 + 0.5*sin(q8*0.538 + 3);\n" << +"shapecode_4_enabled=1\n" << +"shapecode_4_sides=4\n" << +"shapecode_4_additive=0\n" << +"shapecode_4_thickOutline=0\n" << +"shapecode_4_textured=1\n" << +"shapecode_4_ImageURL=headphones.tga\n" << +"shapecode_4_x=0.68\n" << +"shapecode_4_y=0.58\n" << +"shapecode_4_rad=0.6\n" << +"shapecode_4_ang=0\n" << +"shapecode_4_tex_ang=0\n" << +"shapecode_4_tex_zoom=0.71\n" << +"shapecode_4_r=1\n" << +"shapecode_4_g=1\n" << +"shapecode_4_b=1\n" << +"shapecode_4_a=1\n" << +"shapecode_4_r2=1\n" << +"shapecode_4_g2=1\n" << +"shapecode_4_b2=1\n" << +"shapecode_4_a2=1\n" << +"shapecode_4_border_r=0\n" << +"shapecode_4_border_g=0\n" << +"shapecode_4_border_b=0\n" << +"shapecode_4_border_a=0\n" << +"shape_4_per_frame1=x = x + q1;\n" << +"shape_4_per_frame2=y = y + q2;\n" << +"shape_4_per_frame3=rad = rad + bass * 0.1;\n" << +"shape_4_per_frame4=a = q3;\n" << +"shape_4_per_frame5=a2 = q3;\n" << +"shapecode_6_enabled=1\n" << +"shapecode_6_sides=4\n" << +"shapecode_6_additive=0\n" << +"shapecode_6_thickOutline=0\n" << +"shapecode_6_textured=1\n" << +"shapecode_6_ImageURL=project.tga\n" << +"shapecode_6_x=0.38\n" << +"shapecode_6_y=0.435\n" << +"shapecode_6_rad=0.8\n" << +"shapecode_6_ang=0\n" << +"shapecode_6_tex_ang=0\n" << +"shapecode_6_tex_zoom=0.71\n" << +"shapecode_6_r=1\n" << +"shapecode_6_g=1\n" << +"shapecode_6_b=1\n" << +"shapecode_6_a=1\n" << +"shapecode_6_r2=1\n" << +"shapecode_6_g2=1\n" << +"shapecode_6_b2=1\n" << +"shapecode_6_a2=1\n" << +"shapecode_6_border_r=0\n" << +"shapecode_6_border_g=0\n" << +"shapecode_6_border_b=0\n" << +"shapecode_6_border_a=0\n" << +"shape_6_per_frame1=x = x + q1;\n" << +"shape_6_per_frame2=y = y + q2;\n" << +"shape_6_per_frame3=a = q3;\n" << +"shape_6_per_frame4=a2 = q3;\n" << +"per_frame_1=ob_r = 0.5 + 0.4*sin(time*1.324);\n" << +"per_frame_2=ob_g = 0.5 + 0.4*cos(time*1.371);\n" << +"per_frame_3=ob_b = 0.5+0.4*sin(2.332*time);\n" << +"per_frame_4=ib_r = 0.5 + 0.25*sin(time*1.424);\n" << +"per_frame_5=ib_g = 0.25 + 0.25*cos(time*1.871);\n" << +"per_frame_6=ib_b = 1-ob_b;\n" << +"per_frame_7=volume = 0.15*(bass+bass_att+treb+treb_att+mid+mid_att);\n" << +"per_frame_8=xamptarg = if(equal(frame%15,0),min(0.5*volume*bass_att,0.5),xamptarg);\n" << +"per_frame_9=xamp = xamp + 0.5*(xamptarg-xamp);\n" << +"per_frame_10=xdir = if(above(abs(xpos),xamp),-sign(xpos),if(below(abs(xspeed),0.1),2*above(xpos,0)-1,xdir));\n" << +"per_frame_11=xaccel = xdir*xamp - xpos - xspeed*0.055*below(abs(xpos),xamp);\n" << +"per_frame_12=xspeed = xspeed + xdir*xamp - xpos - xspeed*0.055*below(abs(xpos),xamp);\n" << +"per_frame_13=xpos = xpos + 0.001*xspeed;\n" << +"per_frame_14=dx = xpos*0.05;\n" << +"per_frame_15=yamptarg = if(equal(frame%15,0),min(0.3*volume*treb_att,0.5),yamptarg);\n" << +"per_frame_16=yamp = yamp + 0.5*(yamptarg-yamp);\n" << +"per_frame_17=ydir = if(above(abs(ypos),yamp),-sign(ypos),if(below(abs(yspeed),0.1),2*above(ypos,0)-1,ydir));\n" << +"per_frame_18=yaccel = ydir*yamp - ypos - yspeed*0.055*below(abs(ypos),yamp);\n" << +"per_frame_19=yspeed = yspeed + ydir*yamp - ypos - yspeed*0.055*below(abs(ypos),yamp);\n" << +"per_frame_20=ypos = ypos + 0.001*yspeed;\n" << +"per_frame_21=dy = ypos*0.05;\n" << +"per_frame_22=wave_a = 0;\n" << +"per_frame_23=q8 = oldq8 + 0.0003*(pow(1+1.2*bass+0.4*bass_att+0.1*treb+0.1*treb_att+0.1*mid+0.1*mid_att,6)/fps);\n" << +"per_frame_24=oldq8 = q8;\n" << +"per_frame_25=q7 = 0.003*(pow(1+1.2*bass+0.4*bass_att+0.1*treb+0.1*treb_att+0.1*mid+0.1*mid_att,6)/fps);\n" << +"per_frame_26=rot = 0.4 + 1.5*sin(time*0.273) + 0.4*sin(time*0.379+3);\n" << +"per_frame_27=q1 = 0.05*sin(time*1.14);\n" << +"per_frame_28=q2 = 0.03*sin(time*0.93+2);\n" << +"per_frame_29=q3 = if(above(frame,60),1, frame/60.0);\n" << +"per_frame_30=oldq8 = if(above(oldq8,1000),0,oldq8);\n" << +"per_pixel_1=zoom =( log(sqrt(2)-rad) -0.24)*1;\n"; + +return out.str(); + +} + +std::auto_ptr IdlePresets::allocate(const std::string & name, PresetOutputs & presetOutputs) +{ + + if (name == IDLE_PRESET_NAME) { + std::istringstream in(presetText()); + return std::auto_ptr(new MilkdropPreset(in, IDLE_PRESET_NAME, presetOutputs)); + } + else + return std::auto_ptr(0); +} diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/IdlePreset.hpp b/3rdparty/libprojectm/MilkdropPresetFactory/IdlePreset.hpp new file mode 100644 index 000000000..3231d4340 --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/IdlePreset.hpp @@ -0,0 +1,20 @@ +#ifndef IDLE_PRESET_HPP +#define IDLE_PRESET_HPP +#include +#include + +class PresetOutputs; +class Preset; +/// A preset that does not depend on the file system to be loaded. This allows projectM to render +/// something (ie. self indulgent project advertising) even when no valid preset directory is found. +class IdlePresets { + + public: + /// Allocate a new idle preset instance + /// \returns a newly allocated auto pointer of an idle preset instance + static std::auto_ptr allocate(const std::string & path, PresetOutputs & outputs); + private: + static std::string presetText(); + static const std::string IDLE_PRESET_NAME; +}; +#endif diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/InitCond.cpp b/3rdparty/libprojectm/MilkdropPresetFactory/InitCond.cpp new file mode 100755 index 000000000..2dae471f0 --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/InitCond.cpp @@ -0,0 +1,147 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2004 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/* Library functions to manipulate initial condition values */ + +#include +#include +#include + +#include "Common.hpp" +#include "fatal.h" + +#include "Expr.hpp" +#include "InitCond.hpp" +#include "Param.hpp" +#include + +#include "wipemalloc.h" +#include +#include + +char InitCond::init_cond_string_buffer[STRING_BUFFER_SIZE]; +int InitCond::init_cond_string_buffer_index = 0; + +/* Creates a new initial condition */ +InitCond::InitCond( Param * _param, CValue _init_val ):param(_param), init_val(_init_val) { + + + // std::cerr << "InitCond::InitCond: " << this->param->name << std::endl; + + assert(param); + assert(param->engine_val); +} + +/* Frees initial condition structure */ +InitCond::~InitCond() {} + +void InitCond::evaluate() +{ + evaluate(false); +} + +/* Evaluate an initial conditon */ +void InitCond::evaluate(bool evalUser) { + + + + assert(this); + assert(param); + +if (param->flags & P_FLAG_USERDEF && !evalUser) + return; + + /* Set matrix flag to zero. This ensures + its constant value will be used rather than a matrix value + */ +param->matrix_flag = false; + + /* Parameter is of boolean type, either true/false */ + + if (param->type == P_TYPE_BOOL) { + + // printf( "init_cond: %s = %d (TYPE BOOL)\n", param->name.c_str(), init_val.bool_val); + //std::cerr << "[InitCond] param is a boolean of with name " + // << param->name << std::endl; + + assert(param->engine_val); + + *((bool*)param->engine_val) = init_val.bool_val; + + return; + } + + /* Parameter is an integer type, just like C */ + + if ( param->type == P_TYPE_INT) { + assert(param->engine_val); + *((int*)param->engine_val) = init_val.int_val; + return; + } + + /* Parameter is of a float type, just like C */ + + if (param->type == P_TYPE_DOUBLE) { + assert(param->engine_val); + *((float*)param->engine_val) = init_val.float_val; + return; + } + + /* Unknown type of parameter */ + return; +} + +/* WIP */ +void InitCond::init_cond_to_string() { + + int string_length; + char string[MAX_TOKEN_SIZE]; + + /* Create a string "param_name=val" */ + switch (param->type) { + + case P_TYPE_BOOL: + sprintf(string, "%s=%d\n", param->name.c_str(), init_val.bool_val); + break; + case P_TYPE_INT: + sprintf(string, "%s=%d\n", param->name.c_str(), init_val.int_val); + break; + case P_TYPE_DOUBLE: + sprintf(string, "%s=%f\n", param->name.c_str(), init_val.float_val); + break; + default: + return; + } + + /* Compute the length of the string */ + string_length = strlen(string); + + /* Buffer overflow check */ + if ((init_cond_string_buffer_index + string_length + 1) > (STRING_BUFFER_SIZE - 1)) + return; + + /* Copy the string into the initial condition string buffer */ + strncpy(init_cond_string_buffer + init_cond_string_buffer_index, string, string_length); + + /* Increment the string buffer, offset by one for the null terminator, which will be + overwritten by the next call to this function */ + init_cond_string_buffer_index+= string_length + 1; +} + diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/InitCond.hpp b/3rdparty/libprojectm/MilkdropPresetFactory/InitCond.hpp new file mode 100755 index 000000000..a4b124bdf --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/InitCond.hpp @@ -0,0 +1,60 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id$ + * + * Initial condition + * + * $Log$ + */ + +#ifndef _INIT_COND_HPP +#define _INIT_COND_HPP + + +//#define INIT_COND_DEBUG 2 +#define INIT_COND_DEBUG 0 + +#include "Param.hpp" + +class InitCond; +class Param; +#include + +class InitCond { +public: + Param *param; + CValue init_val; + + static char init_cond_string_buffer[STRING_BUFFER_SIZE]; + static int init_cond_string_buffer_index; + + InitCond( Param * param, CValue init_val); + ~InitCond(); + void evaluate(); //Wrapper around following declaration + void evaluate(bool evalUser); + + void init_cond_to_string(); + void write_init(); + }; + + +#endif /** !_INIT_COND_H */ diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/InitCondUtils.hpp b/3rdparty/libprojectm/MilkdropPresetFactory/InitCondUtils.hpp new file mode 100644 index 000000000..218619946 --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/InitCondUtils.hpp @@ -0,0 +1,79 @@ +#ifndef _INIT_COND_UTILS_HPP +#define _INIT_COND_UTILS_HPP +#include +#include "InitCond.hpp" +#include +#include + +namespace InitCondUtils { +class LoadUnspecInitCond { + public: + + LoadUnspecInitCond(std::map & initCondTree, std::map & perFrameInitEqnTree): + m_initCondTree(initCondTree), m_perFrameInitEqnTree(perFrameInitEqnTree) {} + + void operator()(Param * param); + + private: + std::map & m_initCondTree; + std::map & m_perFrameInitEqnTree; +}; + + +inline void LoadUnspecInitCond::operator() (Param * param) { + + InitCond * init_cond = 0; + CValue init_val; + + assert(param); + assert(param->engine_val); + + + /* Don't count these parameters as initial conditions */ + if (param->flags & P_FLAG_READONLY) + return; + if (param->flags & P_FLAG_QVAR) + return; +// if (param->flags & P_FLAG_TVAR) + // return; + if (param->flags & P_FLAG_USERDEF) + return; + + /* If initial condition was not defined by the preset file, force a default one + with the following code */ + + if (m_initCondTree.find(param->name) == m_initCondTree.end()) { + + /* Make sure initial condition does not exist in the set of per frame initial equations */ + if (m_perFrameInitEqnTree.find(param->name) != m_perFrameInitEqnTree.end()) + return; + + // Set an initial vialue via correct union member + if (param->type == P_TYPE_BOOL) + init_val.bool_val = param->default_init_val.bool_val; + else if (param->type == P_TYPE_INT) + init_val.int_val = param->default_init_val.int_val; + + else if (param->type == P_TYPE_DOUBLE) { + init_val.float_val = param->default_init_val.float_val; + } + + //printf("%s\n", param->name); + /* Create new initial condition */ + //std::cerr << "[InitCondUtils] creating an unspecified initial condition of name " << param->name << std::endl; + if ((init_cond = new InitCond(param, init_val)) == NULL) { + abort(); + } + + /* Insert the initial condition into this presets tree */ + std::pair::iterator, bool> inserteePair = + m_initCondTree.insert(std::make_pair(init_cond->param->name, init_cond)); + assert(inserteePair.second); + assert(inserteePair.first->second); + } else + assert(m_initCondTree.find(param->name)->second); + + +} +} +#endif diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/MilkdropPreset.cpp b/3rdparty/libprojectm/MilkdropPresetFactory/MilkdropPreset.cpp new file mode 100755 index 000000000..98e188bb5 --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/MilkdropPreset.cpp @@ -0,0 +1,554 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2004 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ + +#include +#include +#include + +#ifdef WIN32 +#include "win32-dirent.h" +#else +#include +#endif /** WIN32 */ +#include + +#include "MilkdropPreset.hpp" +#include "Parser.hpp" +#include "ParamUtils.hpp" +#include "InitCondUtils.hpp" +#include "fatal.h" +#include +#include + +#include "PresetFrameIO.hpp" + +MilkdropPreset::MilkdropPreset(std::istream & in, const std::string & presetName, PresetOutputs & presetOutputs): + Preset(presetName), + builtinParams(_presetInputs, presetOutputs), + _presetOutputs(presetOutputs) +{ + initialize(in); + +} + +MilkdropPreset::MilkdropPreset(const std::string & absoluteFilePath, const std::string & presetName, PresetOutputs & presetOutputs): + Preset(presetName), + builtinParams(_presetInputs, presetOutputs), + _absoluteFilePath(absoluteFilePath), + _presetOutputs(presetOutputs), + _filename(parseFilename(absoluteFilePath)) +{ + + initialize(absoluteFilePath); + +} +MilkdropPreset::~MilkdropPreset() +{ + + traverse >(init_cond_tree); + + traverse >(per_frame_init_eqn_tree); + + traverse >(per_pixel_eqn_tree); + + traverseVector >(per_frame_eqn_tree); + + traverse >(user_param_tree); + + /// Testing deletion of render items by the preset. would be nice if it worked, + /// and seems to be working if you use a mutex on the preset switching. +/* + std::cout << "begin freeing of waves / shapes" << std::endl; + + for (PresetOutputs::cwave_container::iterator pos = customWaves.begin(); + pos != customWaves.end(); ++pos ) { + for (PresetOutputs::cwave_container::iterator pos2 = presetOutputs().customWaves.begin(); + pos2 != presetOutputs().customWaves.end(); ++pos2 ) { + if ((*pos2)->id == (*pos)->id) + presetOutputs().customWaves.erase(pos2); + } + delete(*pos); + } + + for (PresetOutputs::cshape_container::iterator pos = customShapes.begin(); + pos != customShapes.end(); ++pos ) { + + for (PresetOutputs::cshape_container::iterator pos2 = presetOutputs().customShapes.begin(); +1aaa339f10vmlkd pos2 != presetOutputs().customShapes.end(); ++pos2 ) { + if ((*pos2)->id == (*pos)->id) + presetOutputs().customShapes.erase(pos2); + } + delete(*pos); + } + + std::cout << "end freeing of waves / shapes" << std::endl; + */ + +} + +/* Adds a per pixel equation according to its string name. This + will be used only by the parser */ + +int MilkdropPreset::add_per_pixel_eqn(char * name, GenExpr * gen_expr) +{ + + PerPixelEqn * per_pixel_eqn = NULL; + int index; + Param * param = NULL; + + assert(gen_expr); + assert(name); + + if (PER_PIXEL_EQN_DEBUG) printf("add_per_pixel_eqn: per pixel equation (name = \"%s\")\n", name); + + /* Search for the parameter so we know what matrix the per pixel equation is referencing */ + + param = ParamUtils::find(name, &this->builtinParams, &this->user_param_tree); + if ( !param ) + { + if (PER_PIXEL_EQN_DEBUG) printf("add_per_pixel_eqn: failed to allocate a new parameter!\n"); + return PROJECTM_FAILURE; + } + + index = per_pixel_eqn_tree.size(); + + /* Create the per pixel equation given the index, parameter, and general expression */ + if ((per_pixel_eqn = new PerPixelEqn(index, param, gen_expr)) == NULL) + { + if (PER_PIXEL_EQN_DEBUG) printf("add_per_pixel_eqn: failed to create new per pixel equation!\n"); + return PROJECTM_FAILURE; + } + + + + /* Insert the per pixel equation into the preset per pixel database */ + std::pair::iterator, bool> inserteeOption = per_pixel_eqn_tree.insert + (std::make_pair(per_pixel_eqn->index, per_pixel_eqn)); + + if (!inserteeOption.second) + { + printf("failed to add per pixel eqn!\n"); + delete(per_pixel_eqn); + return PROJECTM_FAILURE; + } + + /* Done */ + return PROJECTM_SUCCESS; +} + +void MilkdropPreset::evalCustomShapeInitConditions() +{ + + for (PresetOutputs::cshape_container::iterator pos = customShapes.begin(); pos != customShapes.end(); ++pos) { + assert(*pos); + (*pos)->evalInitConds(); + } +} + + +void MilkdropPreset::evalCustomWaveInitConditions() +{ + + for (PresetOutputs::cwave_container::iterator pos = customWaves.begin(); pos != customWaves.end(); ++pos) { + assert(*pos); + (*pos)->evalInitConds(); +} +} + + +void MilkdropPreset::evalCustomWavePerFrameEquations() +{ + + for (PresetOutputs::cwave_container::iterator pos = customWaves.begin(); pos != customWaves.end(); ++pos) + { + + std::map & init_cond_tree = (*pos)->init_cond_tree; + for (std::map::iterator _pos = init_cond_tree.begin(); _pos != init_cond_tree.end(); ++_pos) + { + assert(_pos->second); + _pos->second->evaluate(); + } + + std::vector & per_frame_eqn_tree = (*pos)->per_frame_eqn_tree; + for (std::vector::iterator _pos = per_frame_eqn_tree.begin(); _pos != per_frame_eqn_tree.end(); ++_pos) + { + (*_pos)->evaluate(); + } + } + +} + +void MilkdropPreset::evalCustomShapePerFrameEquations() +{ + + for (PresetOutputs::cshape_container::iterator pos = customShapes.begin(); pos != customShapes.end(); ++pos) + { + + std::map & init_cond_tree = (*pos)->init_cond_tree; + for (std::map::iterator _pos = init_cond_tree.begin(); _pos != init_cond_tree.end(); ++_pos) + { + assert(_pos->second); + _pos->second->evaluate(); + } + + std::vector & per_frame_eqn_tree = (*pos)->per_frame_eqn_tree; + for (std::vector::iterator _pos = per_frame_eqn_tree.begin(); _pos != per_frame_eqn_tree.end(); ++_pos) + { + (*_pos)->evaluate(); + } + } + +} + +void MilkdropPreset::evalPerFrameInitEquations() +{ + + for (std::map::iterator pos = per_frame_init_eqn_tree.begin(); pos != per_frame_init_eqn_tree.end(); ++pos) + { + assert(pos->second); + pos->second->evaluate(); + } + +} + +void MilkdropPreset::evalPerFrameEquations() +{ + + for (std::map::iterator pos = init_cond_tree.begin(); pos != init_cond_tree.end(); ++pos) + { + assert(pos->second); + pos->second->evaluate(); + } + + for (std::vector::iterator pos = per_frame_eqn_tree.begin(); pos != per_frame_eqn_tree.end(); ++pos) + { + (*pos)->evaluate(); + } + +} + +void MilkdropPreset::preloadInitialize() { + + /// @note commented this out because it should be unnecessary + // Clear equation trees + //init_cond_tree.clear(); + //user_param_tree.clear(); + //per_frame_eqn_tree.clear(); + //per_pixel_eqn_tree.clear(); + //per_frame_init_eqn_tree.clear(); + + +} + +void MilkdropPreset::postloadInitialize() { + + /* It's kind of ugly to reset these values here. Should definitely be placed in the parser somewhere */ + this->per_frame_eqn_count = 0; + this->per_frame_init_eqn_count = 0; + + this->loadBuiltinParamsUnspecInitConds(); + this->loadCustomWaveUnspecInitConds(); + this->loadCustomShapeUnspecInitConds(); + + +/// @bug are you handling all the q variables conditions? in particular, the un-init case? +//m_presetOutputs.q1 = 0; +//m_presetOutputs.q2 = 0; +//m_presetOutputs.q3 = 0; +//m_presetOutputs.q4 = 0; +//m_presetOutputs.q5 = 0; +//m_presetOutputs.q6 = 0; +//m_presetOutputs.q7 = 0; +//m_presetOutputs.q8 = 0; + +} + +void MilkdropPreset::Render(const BeatDetect &music, const PipelineContext &context) +{ + _presetInputs.update(music, context); + + evaluateFrame(); + pipeline().Render(music, context); + +} + +void MilkdropPreset::initialize(const std::string & pathname) +{ + int retval; + + preloadInitialize(); + +if (MILKDROP_PRESET_DEBUG) + std::cerr << "[Preset] loading file \"" << pathname << "\"..." << std::endl; + + if ((retval = loadPresetFile(pathname)) < 0) + { +if (MILKDROP_PRESET_DEBUG) + std::cerr << "[Preset] failed to load file \"" << + pathname << "\"!" << std::endl; + + /// @bug how should we handle this problem? a well define exception? + throw retval; + } + + postloadInitialize(); +} + +void MilkdropPreset::initialize(std::istream & in) +{ + int retval; + + preloadInitialize(); + + if ((retval = readIn(in)) < 0) + { + + if (MILKDROP_PRESET_DEBUG) + std::cerr << "[Preset] failed to load from stream " << std::endl; + + /// @bug how should we handle this problem? a well define exception? + throw retval; + } + + postloadInitialize(); +} + +void MilkdropPreset::loadBuiltinParamsUnspecInitConds() { + + InitCondUtils::LoadUnspecInitCond loadUnspecInitCond(this->init_cond_tree, this->per_frame_init_eqn_tree); + + this->builtinParams.apply(loadUnspecInitCond); + traverse(user_param_tree, loadUnspecInitCond); + +} + +void MilkdropPreset::loadCustomWaveUnspecInitConds() +{ + + for (PresetOutputs::cwave_container::iterator pos = customWaves.begin(); pos != customWaves.end(); ++pos) + { + assert(*pos); + (*pos)->loadUnspecInitConds(); + } + +} + +void MilkdropPreset::loadCustomShapeUnspecInitConds() +{ + + for (PresetOutputs::cshape_container::iterator pos = customShapes.begin(); + pos != customShapes.end(); ++pos) + { + assert(*pos); + (*pos)->loadUnspecInitConds(); + } +} + + +void MilkdropPreset::evaluateFrame() +{ + + // Evaluate all equation objects according to milkdrop flow diagram + + evalPerFrameInitEquations(); + evalPerFrameEquations(); + + // Important step to ensure custom shapes and waves don't stamp on the q variable values + // calculated by the per frame (init) and per pixel equations. + transfer_q_variables(customWaves); + transfer_q_variables(customShapes); + + initialize_PerPixelMeshes(); + + evalPerPixelEqns(); + + evalCustomWaveInitConditions(); + evalCustomWavePerFrameEquations(); + + evalCustomShapeInitConditions(); + evalCustomShapePerFrameEquations(); + + // Setup pointers of the custom waves and shapes to the preset outputs instance + /// @slow an extra O(N) per frame, could do this during eval + _presetOutputs.customWaves = PresetOutputs::cwave_container(customWaves); + _presetOutputs.customShapes = PresetOutputs::cshape_container(customShapes); + +} + +void MilkdropPreset::initialize_PerPixelMeshes() +{ + + int x,y; + for (x=0;x::iterator pos = per_pixel_eqn_tree.begin(); + pos != per_pixel_eqn_tree.end(); ++pos) + pos->second->evaluate(mesh_x, mesh_y); + +} + +int MilkdropPreset::readIn(std::istream & fs) { + + line_mode_t line_mode; + presetOutputs().compositeShader.programSource.clear(); + presetOutputs().warpShader.programSource.clear(); + + /* Parse any comments */ + if (Parser::parse_top_comment(fs) < 0) + { + if (MILKDROP_PRESET_DEBUG) + std::cerr << "[Preset::readIn] no left bracket found..." << std::endl; + return PROJECTM_FAILURE; + } + + /* Parse the preset name and a left bracket */ + char tmp_name[MAX_TOKEN_SIZE]; + + if (Parser::parse_preset_name(fs, tmp_name) < 0) + { + std::cerr << "[Preset::readIn] loading of preset name failed" << std::endl; + return PROJECTM_ERROR; + } + + /// @note We ignore the preset name because [preset00] is just not so useful + + // Loop through each line in file, trying to succesfully parse the file. + // If a line does not parse correctly, keep trucking along to next line. + int retval; + while ((retval = Parser::parse_line(fs, this)) != EOF) + { + if (retval == PROJECTM_PARSE_ERROR) + { + line_mode = UNSET_LINE_MODE; + // std::cerr << "[Preset::readIn()] parse error in file \"" << this->absoluteFilePath() << "\"" << std::endl; + } + } + +// std::cerr << "loadPresetFile: finished line parsing successfully" << std::endl; + + /* Now the preset has been loaded. + Evaluation calls can be made at appropiate + times in the frame loop */ + +return PROJECTM_SUCCESS; +} + +/* loadPresetFile: private function that loads a specific preset denoted + by the given pathname */ +int MilkdropPreset::loadPresetFile(const std::string & pathname) +{ + + + /* Open the file corresponding to pathname */ + std::ifstream fs(pathname.c_str()); + if (!fs || fs.eof()) { + if (MILKDROP_PRESET_DEBUG) + std::cerr << "loadPresetFile: loading of file \"" << pathname << "\" failed!\n"; + return PROJECTM_ERROR; + } + + return readIn(fs); + +} + +const std::string & MilkdropPreset::name() const { + + return name().empty() ? filename() : name(); +} + diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/MilkdropPreset.hpp b/3rdparty/libprojectm/MilkdropPresetFactory/MilkdropPreset.hpp new file mode 100644 index 000000000..89fc7f89a --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/MilkdropPreset.hpp @@ -0,0 +1,231 @@ + +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id$ + * + * MilkdropPreset + * + * $Log$ + */ + +#ifndef _MilkdropPreset_HPP +#define _MilkdropPreset_HPP + +#include "Common.hpp" +#include +#include +#include + +#define MILKDROP_PRESET_DEBUG 0 /* 0 for no debugging, 1 for normal, 2 for insane */ + +#include "CustomShape.hpp" +#include "CustomWave.hpp" +#include "Expr.hpp" +#include "PerPixelEqn.hpp" +#include "PerFrameEqn.hpp" +#include "BuiltinParams.hpp" +#include "PresetFrameIO.hpp" +#include "InitCond.hpp" +#include "Preset.hpp" + +class CustomWave; +class CustomShape; +class InitCond; + + +class MilkdropPreset : public Preset +{ + +public: + + + /// Load a MilkdropPreset by filename with input and output buffers specified. + /// \param absoluteFilePath the absolute file path of a MilkdropPreset to load from the file system + /// \param MilkdropPresetName a descriptive name for the MilkdropPreset. Usually just the file name + /// \param MilkdropPresetInputs a reference to read only projectM engine variables + /// \param MilkdropPresetOutputs initialized and filled with data parsed from a MilkdropPreset + MilkdropPreset(const std::string & absoluteFilePath, const std::string & milkdropPresetName, PresetOutputs & presetOutputs); + + /// Load a MilkdropPreset from an input stream with input and output buffers specified. + /// \param in an already initialized input stream to read the MilkdropPreset file from + /// \param MilkdropPresetName a descriptive name for the MilkdropPreset. Usually just the file name + /// \param MilkdropPresetInputs a reference to read only projectM engine variables + /// \param MilkdropPresetOutputs initialized and filled with data parsed from a MilkdropPreset + MilkdropPreset(std::istream & in, const std::string & milkdropPresetName, PresetOutputs & presetOutputs); + + ~MilkdropPreset(); + + /// All "builtin" parameters for this MilkdropPreset. Anything *but* user defined parameters and + /// custom waves / shapes objects go here. + /// @bug encapsulate + BuiltinParams builtinParams; + + + /// Used by parser to find/create custom waves and shapes. May be refactored + template + static CustomObject * find_custom_object(int id, std::vector & customObjects); + + + int per_pixel_eqn_string_index; + int per_frame_eqn_string_index; + int per_frame_init_eqn_string_index; + + int per_frame_eqn_count, + per_frame_init_eqn_count; + + + /// Used by parser + /// @bug refactor + int add_per_pixel_eqn( char *name, GenExpr *gen_expr ); + + /// Accessor method to retrieve the absolute file path of the loaded MilkdropPreset + /// \returns a file path string + std::string absoluteFilePath() const + { + return _absoluteFilePath; + } + + + /// Accessor method for the MilkdropPreset outputs instance associated with this MilkdropPreset + /// \returns A MilkdropPreset output instance with values computed from most recent evaluateFrame() + PresetOutputs & presetOutputs() const + { + + return _presetOutputs; + } + + const PresetInputs & presetInputs() const + { + + return _presetInputs; + } + + +// @bug encapsulate + + PresetOutputs::cwave_container customWaves; + PresetOutputs::cshape_container customShapes; + + /// @bug encapsulate + /* Data structures that contain equation and initial condition information */ + std::vector per_frame_eqn_tree; /* per frame equations */ + std::map per_pixel_eqn_tree; /* per pixel equation tree */ + std::map per_frame_init_eqn_tree; /* per frame initial equations */ + std::map init_cond_tree; /* initial conditions */ + std::map user_param_tree; /* user parameter splay tree */ + + + PresetOutputs & pipeline() { return _presetOutputs; } + + void Render(const BeatDetect &music, const PipelineContext &context); + const std::string & name() const; + const std::string & filename() const { return _filename; } +private: + std::string _filename; + PresetInputs _presetInputs; + /// Evaluates the MilkdropPreset for a frame given the current values of MilkdropPreset inputs / outputs + /// All calculated values are stored in the associated MilkdropPreset outputs instance + void evaluateFrame(); + + // The absolute file path of the MilkdropPreset + std::string _absoluteFilePath; + + // The absolute path of the MilkdropPreset + std::string _absolutePath; + + void initialize(const std::string & pathname); + void initialize(std::istream & in); + + int loadPresetFile(const std::string & pathname); + + void loadBuiltinParamsUnspecInitConds(); + void loadCustomWaveUnspecInitConds(); + void loadCustomShapeUnspecInitConds(); + + void evalCustomWavePerFrameEquations(); + void evalCustomShapePerFrameEquations(); + void evalPerFrameInitEquations(); + void evalCustomWaveInitConditions(); + void evalCustomShapeInitConditions(); + void evalPerPixelEqns(); + void evalPerFrameEquations(); + void initialize_PerPixelMeshes(); + int readIn(std::istream & fs); + + void preloadInitialize(); + void postloadInitialize(); + + PresetOutputs & _presetOutputs; + +template +void transfer_q_variables(std::vector & customObjects); +}; + + +template +void MilkdropPreset::transfer_q_variables(std::vector & customObjects) +{ + CustomObject * custom_object; + + for (typename std::vector::iterator pos = customObjects.begin(); pos != customObjects.end();++pos) { + + custom_object = *pos; + for (unsigned int i = 0; i < NUM_Q_VARIABLES; i++) + custom_object->q[i] = _presetOutputs.q[i]; + } + + +} + +template +CustomObject * MilkdropPreset::find_custom_object(int id, std::vector & customObjects) +{ + + CustomObject * custom_object = NULL; + + + for (typename std::vector::iterator pos = customObjects.begin(); pos != customObjects.end();++pos) { + if ((*pos)->id == id) { + custom_object = *pos; + break; + } + } + + if (custom_object == NULL) + { + + if ((custom_object = new CustomObject(id)) == NULL) + { + return NULL; + } + + customObjects.push_back(custom_object); + + } + + assert(custom_object); + return custom_object; +} + + + +#endif /** !_MilkdropPreset_HPP */ diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/MilkdropPresetFactory.cpp b/3rdparty/libprojectm/MilkdropPresetFactory/MilkdropPresetFactory.cpp new file mode 100644 index 000000000..67af5349f --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/MilkdropPresetFactory.cpp @@ -0,0 +1,227 @@ +// +// C++ Implementation: MilkdropPresetFactory +// +// Description: +// +// +// Author: Carmelo Piccione , (C) 2008 +// +// Copyright: See COPYING file that comes with this distribution +// +// +// +#include "MilkdropPresetFactory.hpp" +#include "MilkdropPreset.hpp" +#include "BuiltinFuncs.hpp" +#include "Eval.hpp" +#include "IdlePreset.hpp" +#include "PresetFrameIO.hpp" + +MilkdropPresetFactory::MilkdropPresetFactory(int gx, int gy): _usePresetOutputs(false) +{ + /* Initializes the builtin function database */ + BuiltinFuncs::init_builtin_func_db(); + + /* Initializes all infix operators */ + Eval::init_infix_ops(); + + _presetOutputs = createPresetOutputs(gx,gy); + _presetOutputs2 = createPresetOutputs(gx, gy); +} + +MilkdropPresetFactory::~MilkdropPresetFactory() { + + std::cerr << "[~MilkdropPresetFactory] destroy infix ops" << std::endl; + Eval::destroy_infix_ops(); + std::cerr << "[~MilkdropPresetFactory] destroy builtin func" << std::endl; + BuiltinFuncs::destroy_builtin_func_db(); + std::cerr << "[~MilkdropPresetFactory] delete preset out puts" << std::endl; + delete(_presetOutputs); + delete(_presetOutputs2); + std::cerr << "[~MilkdropPresetFactory] done" << std::endl; + +} + +/* Reinitializes the engine variables to a default (conservative and sane) value */ +void resetPresetOutputs(PresetOutputs *presetOutputs) +{ + + presetOutputs->zoom=1.0; + presetOutputs->zoomexp = 1.0; + presetOutputs->rot= 0.0; + presetOutputs->warp= 0.0; + + presetOutputs->sx= 1.0; + presetOutputs->sy= 1.0; + presetOutputs->dx= 0.0; + presetOutputs->dy= 0.0; + presetOutputs->cx= 0.5; + presetOutputs->cy= 0.5; + + presetOutputs->screenDecay=.98; + + presetOutputs->wave.r= 1.0; + presetOutputs->wave.g= 0.2; + presetOutputs->wave.b= 0.0; + presetOutputs->wave.x= 0.5; + presetOutputs->wave.y= 0.5; + presetOutputs->wave.mystery= 0.0; + + presetOutputs->border.outer_size= 0.0; + presetOutputs->border.outer_r= 0.0; + presetOutputs->border.outer_g= 0.0; + presetOutputs->border.outer_b= 0.0; + presetOutputs->border.outer_a= 0.0; + + presetOutputs->border.inner_size = 0.0; + presetOutputs->border.inner_r = 0.0; + presetOutputs->border.inner_g = 0.0; + presetOutputs->border.inner_b = 0.0; + presetOutputs->border.inner_a = 0.0; + + presetOutputs->mv.a = 0.0; + presetOutputs->mv.r = 0.0; + presetOutputs->mv.g = 0.0; + presetOutputs->mv.b = 0.0; + presetOutputs->mv.length = 1.0; + presetOutputs->mv.x_num = 16.0; + presetOutputs->mv.y_num = 12.0; + presetOutputs->mv.x_offset = 0.02; + presetOutputs->mv.y_offset = 0.02; + + + /* PER_FRAME CONSTANTS END */ + presetOutputs->fRating = 0; + presetOutputs->fGammaAdj = 1.0; + presetOutputs->videoEcho.zoom = 1.0; + presetOutputs->videoEcho.a = 0; + presetOutputs->videoEcho.orientation = Normal; + + presetOutputs->wave.additive = false; + presetOutputs->wave.dots = false; + presetOutputs->wave.thick = false; + presetOutputs->wave.modulateAlphaByVolume = 0; + presetOutputs->wave.maximizeColors = 0; + presetOutputs->textureWrap = 0; + presetOutputs->bDarkenCenter = 0; + presetOutputs->bRedBlueStereo = 0; + presetOutputs->bBrighten = 0; + presetOutputs->bDarken = 0; + presetOutputs->bSolarize = 0; + presetOutputs->bInvert = 0; + presetOutputs->bMotionVectorsOn = 1; + + presetOutputs->wave.a =1.0; + presetOutputs->wave.scale = 1.0; + presetOutputs->wave.smoothing = 0; + presetOutputs->wave.mystery = 0; + presetOutputs->wave.modOpacityEnd = 0; + presetOutputs->wave.modOpacityStart = 0; + presetOutputs->fWarpAnimSpeed = 0; + presetOutputs->fWarpScale = 0; + presetOutputs->fShader = 0; + + /* PER_PIXEL CONSTANT END */ + /* Q VARIABLES START */ + + for (int i = 0;i< 32;i++) + presetOutputs->q[i] = 0; + +// for ( std::vector::iterator pos = presetOutputs->customWaves.begin(); +// pos != presetOutputs->customWaves.end(); ++pos ) +// if ( *pos != 0 ) delete ( *pos ); + +// for ( std::vector::iterator pos = presetOutputs->customShapes.begin(); +// pos != presetOutputs->customShapes.end(); ++pos ) +// if ( *pos != 0 ) delete ( *pos ); + + presetOutputs->customWaves.clear(); + presetOutputs->customShapes.clear(); + + /* Q VARIABLES END */ + +} + + +/* Reinitializes the engine variables to a default (conservative and sane) value */ +void MilkdropPresetFactory::reset() +{ + + resetPresetOutputs(_presetOutputs); + resetPresetOutputs(_presetOutputs2); +} + +PresetOutputs* MilkdropPresetFactory::createPresetOutputs(int gx, int gy) +{ + + PresetOutputs *presetOutputs = new PresetOutputs(); + + presetOutputs->Initialize(gx,gy); + + /* PER FRAME CONSTANTS BEGIN */ + presetOutputs->zoom=1.0; + presetOutputs->zoomexp = 1.0; + presetOutputs->rot= 0.0; + presetOutputs->warp= 0.0; + + presetOutputs->sx= 1.0; + presetOutputs->sy= 1.0; + presetOutputs->dx= 0.0; + presetOutputs->dy= 0.0; + presetOutputs->cx= 0.5; + presetOutputs->cy= 0.5; + + presetOutputs->screenDecay=.98; + + +//_presetInputs.meshx = 0; +//_presetInputs.meshy = 0; + + + /* PER_FRAME CONSTANTS END */ + presetOutputs->fRating = 0; + presetOutputs->fGammaAdj = 1.0; + presetOutputs->videoEcho.zoom = 1.0; + presetOutputs->videoEcho.a = 0; + presetOutputs->videoEcho.orientation = Normal; + + presetOutputs->textureWrap = 0; + presetOutputs->bDarkenCenter = 0; + presetOutputs->bRedBlueStereo = 0; + presetOutputs->bBrighten = 0; + presetOutputs->bDarken = 0; + presetOutputs->bSolarize = 0; + presetOutputs->bInvert = 0; + presetOutputs->bMotionVectorsOn = 1; + + presetOutputs->fWarpAnimSpeed = 0; + presetOutputs->fWarpScale = 0; + presetOutputs->fShader = 0; + + /* PER_PIXEL CONSTANTS BEGIN */ + + /* PER_PIXEL CONSTANT END */ + + /* Q AND T VARIABLES START */ + + for (int i = 0;iq[i] = 0; + + /* Q AND T VARIABLES END */ + return presetOutputs; +} + + +std::auto_ptr MilkdropPresetFactory::allocate(const std::string & url, const std::string & name, const std::string & author) { + + PresetOutputs *presetOutputs = _usePresetOutputs ? _presetOutputs : _presetOutputs2; + + _usePresetOutputs = !_usePresetOutputs; + resetPresetOutputs(presetOutputs); + + std::string path; + if (PresetFactory::protocol(url, path) == PresetFactory::IDLE_PRESET_PROTOCOL) { + return IdlePresets::allocate(path, *presetOutputs); + } else + return std::auto_ptr(new MilkdropPreset(url, name, *presetOutputs)); +} diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/MilkdropPresetFactory.hpp b/3rdparty/libprojectm/MilkdropPresetFactory/MilkdropPresetFactory.hpp new file mode 100644 index 000000000..2a5a46afb --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/MilkdropPresetFactory.hpp @@ -0,0 +1,43 @@ +// +// C++ Interface: MilkdropPresetFactory +// +// Description: +// +// +// Author: Carmelo Piccione , (C) 2008 +// +// Copyright: See COPYING file that comes with this distribution +// +// + +#ifndef __MILKDROP_PRESET_FACTORY_HPP +#define __MILKDROP_PRESET_FACTORY_HPP + +#include +#include "../PresetFactory.hpp" +class DLLEXPORT PresetOutputs; +class DLLEXPORT PresetInputs; + +class MilkdropPresetFactory : public PresetFactory { + +public: + + MilkdropPresetFactory(int gx, int gy); + + virtual ~MilkdropPresetFactory(); + + std::auto_ptr allocate(const std::string & url, const std::string & name = std::string(), + const std::string & author = std::string()); + + std::string supportedExtensions() const { return "milk prjm"; } + +private: + static PresetOutputs* createPresetOutputs(int gx, int gy); + void reset(); + PresetOutputs * _presetOutputs; + PresetOutputs * _presetOutputs2; + bool _usePresetOutputs; + //PresetInputs _presetInputs; +}; + +#endif diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/Param.cpp b/3rdparty/libprojectm/MilkdropPresetFactory/Param.cpp new file mode 100755 index 000000000..ca21e8ffc --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/Param.cpp @@ -0,0 +1,199 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2004 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ + +/* Basic Parameter Functions */ + +#include +#include +#include +#include + +#include "fatal.h" +#include "Common.hpp" + +#include "CustomShape.hpp" +#include "Eval.hpp" +#include "Expr.hpp" +#include "InitCond.hpp" +#include "Param.hpp" +#include "Preset.hpp" +#include +#include +#include + +/** Constructor */ +Param::Param( std::string _name, short int _type, short int _flags, void * _engine_val, void * _matrix, + CValue _default_init_val, CValue _upper_bound, CValue _lower_bound): + name(_name), + type(_type), + flags (_flags), + matrix_flag (0), + engine_val(_engine_val), + matrix (_matrix), + default_init_val (_default_init_val), + upper_bound (_upper_bound), + lower_bound (_lower_bound) + { + +} + + +/* Creates a user defined parameter */ +Param::Param(std::string _name) : + name(_name), + type(P_TYPE_DOUBLE), + flags(P_FLAG_USERDEF), + matrix_flag(0), + matrix(0) + { + + engine_val = new float(); + + default_init_val.float_val = DEFAULT_DOUBLE_IV; + upper_bound.float_val = DEFAULT_DOUBLE_UB; + lower_bound.float_val = DEFAULT_DOUBLE_LB; + + /// @note may have fixed a recent bug. testing + *((float*)engine_val) = default_init_val.float_val; + + +} + +/* Free's a parameter type */ +Param::~Param() { + + // I hate this, but will let it be for now + if (flags & P_FLAG_USERDEF) { + delete((double*)engine_val); + } + + if (PARAM_DEBUG) printf("~Param: freeing \"%s\".\n", name.c_str()); +} + + +/* Returns nonzero if the string is valid parameter name */ +bool Param::is_valid_param_string( const char * string ) { + + if (string == NULL) + return false; + + /* This ensures the first character is non numeric */ + if ( ((*string) >= 48) && ((*string) <= 57)) + return false; + + /* These probably should never happen */ + if (*string == '.') + return false; + + if (*string == '+') + return false; + + if (*string == '-') + return false; + + /* Could also add checks for other symbols. May do later */ + + return true; + +} + + + +/* Loads a float parameter into the builtin database */ +Param * Param::new_param_float(const char * name, short int flags, void * engine_val, void * matrix, + float upper_bound, float lower_bound, float init_val) { + + Param * param; + CValue iv, ub, lb; + assert(engine_val); + + iv.float_val = init_val; + ub.float_val = upper_bound; + lb.float_val = lower_bound; + + if ((param = new Param(name, P_TYPE_DOUBLE, flags, engine_val, matrix,iv, ub, lb)) == NULL) + return NULL; + + + /* Finished, return success */ + return param; +} + +/* Creates a new parameter of type int */ +Param * Param::new_param_int(const char * name, short int flags, void * engine_val, + int upper_bound, int lower_bound, int init_val) { + + Param * param; + CValue iv, ub, lb; + assert(engine_val); + + iv.int_val = init_val; + ub.int_val = upper_bound; + lb.int_val = lower_bound; + + if ((param = new Param(name, P_TYPE_INT, flags, engine_val, NULL, iv, ub, lb)) == NULL) + return NULL; + + + /* Finished, return success */ + return param; +} + +/* Creates a new parameter of type bool */ +Param * Param::new_param_bool(const char * name, short int flags, void * engine_val, + bool upper_bound, bool lower_bound, bool init_val) { + + Param * param; + CValue iv, ub, lb; + assert(engine_val); + + iv.bool_val = init_val; + ub.bool_val = upper_bound; + lb.bool_val = lower_bound; + + if ((param = new Param(name, P_TYPE_BOOL, flags, engine_val, NULL, iv, ub, lb)) == NULL) + return NULL; + + + /* Finished, return success */ + return param; +} + +/* Creates a new parameter of type string */ +Param * Param::new_param_string(const char * name, short int flags, void * engine_val) { + + Param * param; + CValue iv, ub, lb; + assert(engine_val); + + iv.bool_val = 0; + ub.bool_val = 0; + lb.bool_val = 0; + + if ((param = new Param(name, P_TYPE_STRING, flags, engine_val, NULL, iv, ub, lb)) == NULL) + return NULL; + + + /* Finished, return success */ + return param; +} + + diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/Param.hpp b/3rdparty/libprojectm/MilkdropPresetFactory/Param.hpp new file mode 100755 index 000000000..1f6bcf272 --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/Param.hpp @@ -0,0 +1,151 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id$ + * + * Parameter used within a preset + * + * $Log$ + */ + +#ifndef _PARAM_H +#define _PARAM_H + +/* Debug level, zero for none */ +#define PARAM_DEBUG 0 + +#define P_CREATE 1 +#define P_NONE 0 + +#define P_TYPE_BOOL 0 +#define P_TYPE_INT 1 +#define P_TYPE_DOUBLE 2 +#define P_TYPE_STRING 3 + +#define P_FLAG_NONE 0 +#define P_FLAG_READONLY 1 +#define P_FLAG_USERDEF (1 << 1) +#define P_FLAG_QVAR (1 << 2) +#define P_FLAG_TVAR (1 << 3) +#define P_FLAG_ALWAYS_MATRIX (1 << 4) +#define P_FLAG_PER_PIXEL (1 << 6) +#define P_FLAG_PER_POINT (1 << 7) + + +#include "Expr.hpp" +#include "Common.hpp" +#include +#include +class InitCond; +class Param; +class Preset; +//#include + +/* Parameter Type */ +class Param { +public: + std::string name; /* name of the parameter, not necessary but useful neverthless */ + short int type; /* parameter number type (int, bool, or float) */ + short int flags; /* read, write, user defined, etc */ + short int matrix_flag; /* for optimization purposes */ + void * engine_val; /* pointer to the engine variable */ + void * matrix; /* per pixel / per point matrix for this variable */ + CValue default_init_val; /* a default initial condition value */ + CValue upper_bound; /* this parameter's upper bound */ + CValue lower_bound; /* this parameter's lower bound */ + + /// Create a new parameter + Param(std::string name, short int type, short int flags, + void * eqn_val, void *matrix, + CValue default_init_val, CValue upper_bound, + CValue lower_bound); + + ~Param(); + + /// Create a user defined floating point parameter + Param( std::string name ); + + static bool is_valid_param_string( const char *string ); + void set_param( float val ); + + static Param *new_param_float( const char *name, short int flags, void *engine_val, + void *matrix, float upper_bound, + float lower_bound, + float init_val ); + static Param *new_param_double(const char *name, short int flags, void *engine_val, + void *matrix, double upper_bound, + double lower_bound, + double init_val ); + static Param * new_param_int(const char * name, short int flags, void * engine_val, + int upper_bound, int lower_bound, int init_val ); + static Param * new_param_bool(const char * name, short int flags, void * engine_val, + bool upper_bound, bool lower_bound, bool init_val ); + static Param * new_param_string(const char * name, short int flags, void * engine_val); + +}; + + +/* Sets the parameter engine value to value val. + clipping occurs if necessary */ +inline void Param::set_param( float val) { + + switch (type) { + + case P_TYPE_BOOL: + if (val < 0) + *((bool*)engine_val) = false; + else if (val > 0) + *((bool*)engine_val) = true; + else + *((bool*)engine_val) = false; + break; + case P_TYPE_INT: + /* Make sure value is an integer */ + val = floor(val); + if (val < lower_bound.int_val) + *((int*)engine_val) = lower_bound.int_val; + else if (val > upper_bound.int_val) + *((int*)engine_val) = upper_bound.int_val; + else + *((int*)engine_val) = (int)val; + break; + case P_TYPE_DOUBLE: + /* Make sure value is an integer */ + + + if (val < lower_bound.float_val) + *((float*)engine_val) = lower_bound.float_val; + else if (val > upper_bound.float_val) + *((float*)engine_val) = upper_bound.float_val; + else + *((float*)engine_val) = val; + break; + default: + //abort(); + break; + + } + + return; +} + +#endif /** !_PARAM_TYPES_H */ + diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/ParamUtils.hpp b/3rdparty/libprojectm/MilkdropPresetFactory/ParamUtils.hpp new file mode 100644 index 000000000..dd94ff73a --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/ParamUtils.hpp @@ -0,0 +1,86 @@ +/** ParamUtils.hpp: + * A collection of utility functions to make using parameter types easier. + * In reality, this stuff belongs elsewhere, but one step at a time + */ +#ifndef _PARAM_UTILS_HPP +#define _PARAM_UTILS_HPP + +#include "Param.hpp" +#include +#include +#include "BuiltinParams.hpp" + +class ParamUtils +{ +public: + static bool insert(Param * param, std::map * paramTree) + { + + assert(param); + assert(paramTree); + + + return ((paramTree->insert(std::make_pair(param->name,param))).second); + + } + + static const int AUTO_CREATE = 1; + static const int NO_CREATE = 0; + + template + static Param * find(std::string name, std::map * paramTree) + { + + assert(paramTree); + + Param * param; + + /* First look in the suggested database */ + std::map::iterator pos = paramTree->find(name); + + + if ((FLAGS == AUTO_CREATE) && ((pos == paramTree->end()))) + { + /* Check if string is valid */ + if (!Param::is_valid_param_string(name.c_str())) + return NULL; + + /* Now, create the user defined parameter given the passed name */ + if ((param = new Param(name)) == NULL) + return NULL; + + /* Finally, insert the new parameter into this preset's parameter tree */ + std::pair::iterator, bool> insertRetPair = + paramTree->insert(std::make_pair(param->name, param)); + + assert(insertRetPair.second); + + } else if (pos != paramTree->end()) + param = pos->second; + else + param = NULL; + + /* Return the found (or created) parameter. Note that this could be null */ + return param; + + + } + + + static Param * find(const std::string & name, BuiltinParams * builtinParams, std::map * insertionTree) + { + + Param * param; + + // Check first db + if ((param = builtinParams->find_builtin_param(name)) != 0) + return param; + + // Check second db, create if necessary + return find(name, insertionTree); + + } + +}; + +#endif diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/Parser.cpp b/3rdparty/libprojectm/MilkdropPresetFactory/Parser.cpp new file mode 100755 index 000000000..d410028ee --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/Parser.cpp @@ -0,0 +1,2595 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2004 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU +* License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/* parser.c */ + +#include +#include +#include +#include +#include + +#include "Common.hpp" +#include "fatal.h" + +#include "CustomWave.hpp" +#include "CustomShape.hpp" +#include "Expr.hpp" +#include "Eval.hpp" +#include "Func.hpp" +#include "InitCond.hpp" +#include "Param.hpp" +#include "Parser.hpp" +#include "PerFrameEqn.hpp" +#include "PerPixelEqn.hpp" +#include +#include "ParamUtils.hpp" + +#include "wipemalloc.h" +#include +#include +#include "BuiltinFuncs.hpp" + +/* Grabs the next token from the file. The second argument points + to the raw string */ + +line_mode_t Parser::line_mode; +CustomWave *Parser::current_wave; +CustomShape *Parser::current_shape; +int Parser::string_line_buffer_index; +char Parser::string_line_buffer[STRING_LINE_SIZE]; +unsigned int Parser::line_count; +int Parser::per_frame_eqn_count; +int Parser::per_frame_init_eqn_count; +int Parser::last_custom_wave_id; +int Parser::last_custom_shape_id; +char Parser::last_eqn_type[MAX_TOKEN_SIZE]; +int Parser::last_token_size; + +std::string Parser::lastLinePrefix(""); + +bool Parser::tokenWrapAroundEnabled(false); + +token_t Parser::parseToken(std::istream & fs, char * string) +{ + + char c; + int i; + + if (string != NULL) + memset(string, 0, MAX_TOKEN_SIZE); + + + /* Loop until a delimiter is found, or the maximum string size is found */ + for (i = 0; i < MAX_TOKEN_SIZE;i++) + { + //c = fgetc(fs); + if (!fs || fs.eof()) + c = EOF; + else + c = fs.get(); + + last_token_size++; + /* If the string line buffer is full, quit */ + if (string_line_buffer_index == (STRING_LINE_SIZE - 1)) + return tStringBufferFilled; + + /* Otherwise add this character to the string line buffer */ + string_line_buffer[string_line_buffer_index++] = tolower(c); + /* Now interpret the character */ + switch (c) + { + case '+': + return tPlus; + case '-': + return tMinus; + case '%': + return tMod; + case '/': + + /* check for line comment here */ + if (!fs || fs.eof()) + c = EOF; + else + c = fs.get(); + if (c == '/') + { + while (true) + { + if (!fs || fs.eof()) + c = EOF; + else + c = fs.get(); + if (c == EOF) + { + line_mode = UNSET_LINE_MODE; + return tEOF; + } + if (c == '\n') + { + line_mode = UNSET_LINE_MODE; + return tEOL; + } + } + + } + + /* Otherwise, just a regular division operator */ + fs.unget(); + return tDiv; + case '*': + return tMult; + case '|': + return tOr; + case '&': + return tAnd; + case '(': + return tLPr; + case ')': + return tRPr; + case '[': + return tLBr; + case ']': + return tRBr; + case '=': + return tEq; + case '\n': + line_count++; + /// @note important hack implemented here to handle "wrap around tokens" + // In particular: "per_frame_1=x=t+1.\nper_frame_2=37 + 5;" implies + // "per_frame_1=x=t+1.37 + 5;". Thus, we have a global flag to determine + // if "token wrap mode" is enabled. If so, we consider a token *continuing* + // to the next line, but only attaching to the token buffer anything following + // the first equals sign on that line. + // + // We can safely assume the next line must be part of the token if we allow the + // semi colon to be a guaranteed delimiter in the grammar for all equation-based lines. + // This IS NO LONGER assumed here. Instead, we check if the next line prefix + // matches with the previous line prefix. If it passes a simple comparison, we wrap around. + + if (tokenWrapAroundEnabled) + { + std::ostringstream buffer; + + if (PARSE_DEBUG) std::cerr << "token wrap! line " << line_count << std::endl; + while (c != '=') + { + + if (!fs || fs.eof()) + { + line_count = 1; + line_mode = UNSET_LINE_MODE; + if (PARSE_DEBUG) std::cerr << "token wrap: end of file" << std::endl; + return tEOF; + } + + else { + c = fs.get(); + if ( c != '=') + buffer << c; + } + + } + if (PARSE_DEBUG) std::cerr << "parseToken: parsed away equal sign, line prefix is \"" << buffer.str() + << "\"" << std::endl; + --i; + + if (!wrapsToNextLine(buffer.str())) { + tokenWrapAroundEnabled = false; + int buf_size = (int)buffer.str().length(); + // <= to also remove equal sign parsing from stream + for (int k = 0; k <= buf_size; k++) { + if (fs) + fs.unget(); + else + abort(); + } + return tEOL; + } + + + break; + } + + + line_mode = UNSET_LINE_MODE; + return tEOL; + case ',': + return tComma; + case ';': + tokenWrapAroundEnabled = false; + if (PARSE_DEBUG) std::cerr << "token wrap around = false (LINE " << line_count << ")" << std::endl; + return tSemiColon; + case ' ': /* space, skip the character */ + i--; + break; + case EOF: + line_count = 1; + line_mode = UNSET_LINE_MODE; + return tEOF; + + case '\r': + i--; + break; + default: + + string[i] = tolower(c); + //string[i+1] = 0; + //std::cerr << "string is \n\"" << string << "\"" << std::endl; + } + + + } + + /* String reached maximum length, return special token error */ + return tStringTooLong; + +} + +/* Parse input in the form of "exp, exp, exp, ...)" + Returns a general expression list */ + +GenExpr **Parser::parse_prefix_args(std::istream & fs, int num_args, MilkdropPreset * preset) +{ + + int i, j; + GenExpr ** expr_list; /* List of arguments to function */ + GenExpr * gen_expr; + + /* Malloc the expression list */ + expr_list = (GenExpr**)wipemalloc(sizeof(GenExpr*)*num_args); + + /* Malloc failed */ + if (expr_list == NULL) + return NULL; + + + i = 0; + + while (i < num_args) + { + //if (PARSE_DEBUG) printf("parse_prefix_args: parsing argument %d...\n", i+1); + /* Parse the ith expression in the list */ + if ((gen_expr = parse_gen_expr(fs, NULL, preset)) == NULL) + { + //if (PARSE_DEBUG) printf("parse_prefix_args: failed to get parameter # %d for function (LINE %d)\n", i+1, line_count); + for (j = 0; j < i; j++) + delete expr_list[j]; + free(expr_list); + expr_list = NULL; + return NULL; + } + /* Assign entry in expression list */ + expr_list[i++] = gen_expr; + } + + //if (PARSE_DEBUG) printf("parse_prefix_args: finished parsing %d arguments (LINE %d)\n", num_args, line_count); + /* Finally, return the resulting expression list */ + return expr_list; +} + +/* Parses a comment at the top of the file. Stops when left bracket is found */ +int Parser::parse_top_comment(std::istream & fs) +{ + + char string[MAX_TOKEN_SIZE]; + token_t token; + + /* Process tokens until left bracket is found */ + while ((token = parseToken(fs, string)) != tLBr) + { + if (token == tEOF) + return PROJECTM_PARSE_ERROR; + } + + /* Done, return success */ + return PROJECTM_SUCCESS; +} + +/* Right Bracket is parsed by this function. + puts a new string into name */ +int Parser::parse_preset_name(std::istream & fs, char * name) +{ + + token_t token; + + if (name == NULL) + return PROJECTM_FAILURE; + + if ((token = parseToken(fs, name)) != tRBr) + return PROJECTM_PARSE_ERROR; + + return PROJECTM_SUCCESS; +} + + +/* Parses per pixel equations */ +int Parser::parse_per_pixel_eqn(std::istream & fs, MilkdropPreset * preset, char * init_string) +{ + + + char string[MAX_TOKEN_SIZE]; + GenExpr * gen_expr; + + + if (init_string != 0) + { + strncpy(string, init_string, strlen(init_string)); + } + else + { + + if (parseToken(fs, string) != tEq) + { /* parse per pixel operator name */ + return PROJECTM_PARSE_ERROR; + } + } + + /* Parse right side of equation as an expression */ + if ((gen_expr = parse_gen_expr(fs, NULL, preset)) == NULL) + { + return PROJECTM_PARSE_ERROR; + } + + /* Add the per pixel equation */ + if (preset->add_per_pixel_eqn(string, gen_expr) < 0) + { + if (PARSE_DEBUG) + { + + } + delete gen_expr; + return PROJECTM_PARSE_ERROR; + } + + return PROJECTM_SUCCESS; +} + +/* Parses an equation line, this function is way too big, should add some helper functions */ +int Parser::parse_line(std::istream & fs, MilkdropPreset * preset) +{ + + char eqn_string[MAX_TOKEN_SIZE]; + token_t token; + InitCond * init_cond; + PerFrameEqn * per_frame_eqn; + + /* Clear the string line buffer */ + memset(string_line_buffer, 0, STRING_LINE_SIZE); + string_line_buffer_index = 0; + + tokenWrapAroundEnabled = false; + + token = parseToken( fs, eqn_string ); + switch (token ) + { + + /* Invalid Cases */ + case tRBr: + case tLPr: + case tRPr: + case tComma: + case tLBr: + case tPlus: + case tMinus: + case tMod: + case tMult: + case tOr: + case tAnd: + case tDiv: + + if (PARSE_DEBUG) std::cerr << "parse_line: invalid token found at start of line (LINE " + << line_count << ")" << std::endl; + + /* Invalid token found, return a parse error */ + return PROJECTM_PARSE_ERROR; + + + case tEOL: /* Empty line */ + line_mode = UNSET_LINE_MODE; + return PROJECTM_SUCCESS; + + case tEOF: /* End of File */ + line_mode = UNSET_LINE_MODE; + line_count = 1; + tokenWrapAroundEnabled = false; + return EOF; + + case tSemiColon: /* Indicates end of expression */ + tokenWrapAroundEnabled = false; + return PROJECTM_SUCCESS; + + /* Valid Case, either an initial condition or equation should follow */ + case tEq: + lastLinePrefix = std::string(eqn_string); + if (PARSE_DEBUG) std::cout << "last line prefix = \"" << eqn_string << "\"" << std::endl; + // std::cerr << "parse_line: tEQ case, fs.peek()=\'" << fs.peek() << "\'" << std::endl; + if (!fs) + return PROJECTM_PARSE_ERROR; + +// char z = fs.get(); + char tmpChar; + if ((tmpChar = fs.get()) == '\n') { + tokenWrapAroundEnabled = false; + return PROJECTM_PARSE_ERROR; + } else if (tmpChar == '\r') { + tokenWrapAroundEnabled = false; + return PROJECTM_PARSE_ERROR; + } else + fs.unget(); + + + + /* CASE: WARP CODE */ + if (!strncmp(eqn_string, WARP_STRING, WARP_STRING_LENGTH)) + { + //std::cout << "parsing warp string block\n" << std::endl; + parse_string_block(fs, &preset->presetOutputs().warpShader.programSource); + return PROJECTM_SUCCESS; + } + + + /* CASE: COMPOSITE CODE */ + if (!strncmp(eqn_string, COMPOSITE_STRING, COMPOSITE_STRING_LENGTH)) + { + //std::cout << "parsing composite string block\n" << std::endl; + parse_string_block(fs, &preset->presetOutputs().compositeShader.programSource); + return PROJECTM_SUCCESS; + } + + /* CASE: PER FRAME INIT EQUATION */ + if (!strncmp(eqn_string, PER_FRAME_INIT_STRING, PER_FRAME_INIT_STRING_LENGTH)) + { + tokenWrapAroundEnabled = true; + //if (PARSE_DEBUG) printf("parse_line: per frame init equation found...(LINE %d)\n", line_count); + + /* Parse the per frame equation */ + if ((init_cond = parse_per_frame_init_eqn(fs, preset, NULL)) == NULL) + { + //if (PARSE_DEBUG) printf("parse_line: per frame init equation parsing failed (LINE %d)\n", line_count); + tokenWrapAroundEnabled = false; + return PROJECTM_PARSE_ERROR; + } + + /* Insert the equation in the per frame equation tree */ + preset->per_frame_init_eqn_tree.insert(std::make_pair(init_cond->param->name, init_cond)); + + line_mode = PER_FRAME_INIT_LINE_MODE; + return PROJECTM_SUCCESS; + } + + /* Per frame equation case */ + if (!strncmp(eqn_string, PER_FRAME_STRING, PER_FRAME_STRING_LENGTH)) + { + tokenWrapAroundEnabled = true; + /* Sometimes per frame equations are implicitly defined without the + per_frame_ prefix. This informs the parser that one could follow */ + line_mode = PER_FRAME_LINE_MODE; + + //if (PARSE_DEBUG) printf("parse_line: per frame equation found...(LINE %d)\n", line_count); + + /* Parse the per frame equation */ + if ((per_frame_eqn = parse_per_frame_eqn(fs, ++per_frame_eqn_count, preset)) == NULL) + { + if (PARSE_DEBUG) printf("parse_line: per frame equation parsing failed (LINE %d)\n", line_count); + tokenWrapAroundEnabled = false; + return PROJECTM_PARSE_ERROR; + } + + /* Insert the equation in the per frame equation tree */ + preset->per_frame_eqn_tree.push_back(per_frame_eqn); + + return PROJECTM_SUCCESS; + + } + + /* Wavecode initial condition case */ + if (!strncmp(eqn_string, WAVECODE_STRING, WAVECODE_STRING_LENGTH)) + { + + line_mode = CUSTOM_WAVE_WAVECODE_LINE_MODE; + + return parse_wavecode(eqn_string, fs, preset); + } + + /* Custom Wave Prefix */ + if ((!strncmp(eqn_string, WAVE_STRING, WAVE_STRING_LENGTH)) && + ((eqn_string[5] >= 48) && (eqn_string[5] <= 57))) + { + tokenWrapAroundEnabled = true; + // if (PARSE_DEBUG) printf("parse_line wave prefix found: \"%s\"\n", eqn_string); + + return parse_wave(eqn_string, fs, preset); + + } + + + /* Shapecode initial condition case */ + if (!strncmp(eqn_string, SHAPECODE_STRING, SHAPECODE_STRING_LENGTH)) + { + + line_mode = CUSTOM_SHAPE_SHAPECODE_LINE_MODE; + + if (PARSE_DEBUG) printf("parse_line: shapecode prefix found: \"%s\"\n", eqn_string); + + return parse_shapecode(eqn_string, fs, preset); + } + + /* Custom Shape Prefix */ + if ((!strncmp(eqn_string, SHAPE_STRING, SHAPE_STRING_LENGTH)) && + ((eqn_string[6] >= 48) && (eqn_string[6] <= 57))) + { + tokenWrapAroundEnabled = true; + if (PARSE_DEBUG) printf("parse_line shape prefix found: \"%s\"\n", eqn_string); + return parse_shape(eqn_string, fs, preset); + + } + + /* Per pixel equation case */ + if (!strncmp(eqn_string, PER_PIXEL_STRING, PER_PIXEL_STRING_LENGTH)) + { + tokenWrapAroundEnabled = true; + + line_mode = PER_PIXEL_LINE_MODE; + + if (parse_per_pixel_eqn(fs, preset, 0) < 0) + { + tokenWrapAroundEnabled = false; + return PROJECTM_PARSE_ERROR; + } + + + if (PARSE_DEBUG) printf("parse_line: finished parsing per pixel equation (LINE %d)\n", line_count); + return PROJECTM_SUCCESS; + } + + /* Sometimes equations are written implicitly in milkdrop files, in the form + + per_frame_1 = p1 = eqn1; p2 = eqn2; p3 = eqn3;..; + + which is analagous to: + + per_frame_1 = p1 = eqn1; per_frame_2 = p2 = eqn2; per_frame_3 = p3 = eqn3; ...; + + The following line mode hack allows such implicit declaration of the + prefix that specifies the equation type. An alternative method + may be to associate each equation line as list of equations separated + by semicolons (and a new line ends the list). Instead, however, a global + variable called "line_mode" specifies the last type of equation found, + and bases any implicitly typed input on this fact + + Note added by Carmelo Piccione (carmelo.piccione@gmail.com) 10/19/03 + */ + + /* Per frame line mode previously, try to parse the equation implicitly */ + if (line_mode == PER_FRAME_LINE_MODE) + { + tokenWrapAroundEnabled = true; + if ((per_frame_eqn = parse_implicit_per_frame_eqn(fs, eqn_string, ++per_frame_eqn_count, preset)) == NULL) + { + tokenWrapAroundEnabled = false; + return PROJECTM_PARSE_ERROR; + } + + /* Insert the equation in the per frame equation tree */ + preset->per_frame_eqn_tree.push_back(per_frame_eqn); + + + return PROJECTM_SUCCESS; + + } + else if (line_mode == PER_FRAME_INIT_LINE_MODE) + { + tokenWrapAroundEnabled = true; + if (PARSE_DEBUG) printf("parse_line: parsing implicit per frame init eqn)\n"); + if ((init_cond = parse_per_frame_init_eqn(fs, preset, NULL)) == NULL) + { + tokenWrapAroundEnabled = false; + return PROJECTM_PARSE_ERROR; + } + + ++per_frame_init_eqn_count; + + /* Insert the equation in the per frame equation tree */ + preset->per_frame_init_eqn_tree.insert(std::make_pair(init_cond->param->name, init_cond)); + + return PROJECTM_SUCCESS; + } + else if (line_mode == PER_PIXEL_LINE_MODE) + { + tokenWrapAroundEnabled = true; + if (PARSE_DEBUG) printf("parse_line: implicit per pixel eqn (LINE %d)\n", line_count); + return parse_per_pixel_eqn(fs, preset, eqn_string); + + + } + else if (line_mode == CUSTOM_WAVE_PER_POINT_LINE_MODE) + { + tokenWrapAroundEnabled = true; + if (PARSE_DEBUG) printf("parse_line: implicit cwave ppoint eqn found (LINE %d)\n", line_count); + //int len = strlen(eqn_string); + + if (parse_wave_helper(fs, preset, last_custom_wave_id, last_eqn_type, eqn_string) < 0) + { + if (PARSE_DEBUG) printf("parse_line: failed to parse an implicit custom wave per point eqn\n"); + return PROJECTM_FAILURE; + } + return PROJECTM_SUCCESS; + } + else if (line_mode == CUSTOM_WAVE_PER_FRAME_LINE_MODE) + { + tokenWrapAroundEnabled = true; + //Added by PJS. I hope I did it right + CustomWave * custom_wave; + + /* Retrieve custom shape associated with this id */ + if ((custom_wave = MilkdropPreset::find_custom_object(last_custom_wave_id, preset->customWaves)) == NULL) + return PROJECTM_FAILURE; + return parse_wave_per_frame_eqn(fs, custom_wave, preset); + + } + else if (line_mode == CUSTOM_WAVE_WAVECODE_LINE_MODE) + { + if (PARSE_DEBUG) printf("unsupported line mode: CUSTOM_WAVE_WAVECODE_LINE_MODE\n"); + return PROJECTM_FAILURE; + } + else if (line_mode == CUSTOM_SHAPE_SHAPECODE_LINE_MODE) + { + if (PARSE_DEBUG) printf("unsupported line mode: CUSTOM_SHAPE_SHAPECODE_LINE_MODE\n"); + return PROJECTM_FAILURE; + } + else if (line_mode == CUSTOM_SHAPE_PER_FRAME_LINE_MODE) + { + tokenWrapAroundEnabled = true; + + CustomShape * custom_shape; + + /* Retrieve custom shape associated with this id */ + if ((custom_shape = MilkdropPreset::find_custom_object(last_custom_shape_id, preset->customShapes)) == NULL) + return PROJECTM_FAILURE; + + return parse_shape_per_frame_eqn(fs, custom_shape, preset); + + } + else if (line_mode == CUSTOM_SHAPE_PER_FRAME_INIT_LINE_MODE) + { + tokenWrapAroundEnabled = true; + CustomShape * custom_shape; + + /* Retrieve custom shape associated with this id */ + if ((custom_shape = preset->find_custom_object(last_custom_shape_id, preset->customShapes)) == NULL) + return PROJECTM_FAILURE; + + return parse_shape_per_frame_init_eqn(fs, custom_shape, preset); + + } + + if (PARSE_DEBUG) printf("parse_line: found initial condition: name = \"%s\" (LINE %d)\n", eqn_string, line_count); + /* Evaluate the initial condition */ + if ((init_cond = parse_init_cond(fs, eqn_string, preset)) == NULL) + { + if (PARSE_DEBUG) printf("parse_line: failed to parse initial condition (LINE %d)\n", line_count); + return PROJECTM_PARSE_ERROR; + } + + /* Add equation to initial condition tree */ + preset->init_cond_tree.insert(std::make_pair(init_cond->param->name, init_cond)); + + /* Finished with initial condition line */ + // if (PARSE_DEBUG) printf("parse_line: initial condition parsed successfully\n"); + + return PROJECTM_SUCCESS; + + /* END INITIAL CONDITIONING PARSING */ + + default: /* an uncaught type or an error has occurred */ + if (PARSE_DEBUG) printf("parse_line: uncaught case, token val = %d\n", token); + return PROJECTM_PARSE_ERROR; + } + + /* Because of the default in the case statement, + control flow should never actually reach here */ + return PROJECTM_PARSE_ERROR; +} + + + +/* Parses a general expression, this function is the meat of the parser */ +GenExpr * Parser::parse_gen_expr ( std::istream & fs, TreeExpr * tree_expr, MilkdropPreset * preset) +{ + + int i; + char string[MAX_TOKEN_SIZE]; + token_t token; + GenExpr * gen_expr; + float val; + Param * param = NULL; + Func * func; + GenExpr ** expr_list; + + switch (token = parseToken(fs,string)) + { + /* Left Parentice Case */ + case tLPr: + //std::cerr << "token before tLPr:" << string << std::endl; + /* CASE 1 (Left Parentice): See if the previous string before this parentice is a function name */ + if ((func = BuiltinFuncs::find_func(string)) != NULL) + { + if (PARSE_DEBUG) + { + std::cerr << "parse_gen_expr: found prefix function (name = \"" + << func->getName() << "\") (LINE " << line_count << ")" << std::endl; + } + + /* Parse the functions arguments */ + if ((expr_list = parse_prefix_args(fs, func->getNumArgs(), preset)) == NULL) + { + if (PARSE_DEBUG) + { + std::cerr << "parse_prefix_args: failed to generate an expresion list! (LINE " + << line_count << ")" << std::endl; + } + if ( tree_expr != NULL ) + { + delete tree_expr; + } + return NULL; + } + + /* Convert function to expression */ + if ((gen_expr = GenExpr::prefun_to_expr((float (*)(void *))func->func_ptr, expr_list, func->getNumArgs())) == NULL) + { + if (PARSE_DEBUG) printf("parse_prefix_args: failed to convert prefix function to general expression (LINE %d) \n", + line_count); + if (tree_expr) + delete tree_expr; + for (i = 0; i < func->getNumArgs();i++) + delete expr_list[i]; + free(expr_list); + expr_list = NULL; + return NULL; + } + + token = parseToken(fs, string); + + if (*string != 0) + { + if (PARSE_DEBUG) printf("parse_prefix_args: empty string expected, but not found...(LINE %d)\n", line_count); + /* continue anyway for now, could be implicit multiplication */ + } + + return parse_infix_op(fs, token, insert_gen_expr(gen_expr, &tree_expr), preset); + } + + + /* Case 2: (Left Parentice), a string coupled with a left parentice. Either an error or implicit + multiplication operator. For now treat it as an error */ + if (*string != 0) + { + std::cerr << "token prefix is " << *string << std::endl; + if (PARSE_DEBUG) printf("parse_gen_expr: implicit multiplication case unimplemented!\n"); + if (tree_expr) + delete tree_expr; + return NULL; + } + + /* CASE 3 (Left Parentice): the following is enclosed parentices to change order + of operations. So we create a new expression tree */ + + if ((gen_expr = parse_gen_expr(fs, NULL, preset)) == NULL) + { + if (PARSE_DEBUG) printf("parse_gen_expr: found left parentice, but failed to create new expression tree \n"); + if (tree_expr) + delete tree_expr; + return NULL; + } + + if (PARSE_DEBUG) printf("parse_gen_expr: finished enclosed expression tree...\n"); + token = parseToken(fs, string); + return parse_infix_op(fs, token, insert_gen_expr(gen_expr, &tree_expr), preset); + + /* Plus is a prefix operator check */ + case tPlus: + if (*string == 0) + { + + if (PARSE_DEBUG) printf("parse_gen_expr: plus used as prefix (LINE %d)\n", line_count); + + /* Treat prefix plus as implict 0 preceding operator */ + gen_expr = GenExpr::const_to_expr(0); + + return parse_infix_op(fs, tPositive, insert_gen_expr(gen_expr, &tree_expr), preset); + } + + /* Minus is a prefix operator check */ + case tMinus: + if (*string == 0) + { + + /* Use the negative infix operator, but first add an implicit zero to the operator tree */ + gen_expr = GenExpr::const_to_expr(0); + //return parse_gen_expr(fs, insert_gen_expr(gen_expr, &tree_expr), preset); + return parse_infix_op(fs, tNegative, insert_gen_expr(gen_expr, &tree_expr), preset); + } + + /* All the following cases are strings followed by an infix operator or terminal */ + case tRPr: + case tEOL: + case tEOF: + case tSemiColon: + case tComma: + + /* CASE 1 (terminal): string is empty, but not null. Not sure if this will actually happen + any more. */ + if (*string == 0) + { + if (PARSE_DEBUG) printf("parse_gen_expr: empty string coupled with terminal (LINE %d) \n", line_count); + return parse_infix_op(fs, token, tree_expr, preset); + + } + + default: + + /* CASE 0: Empty string, parse error */ + if (*string == 0) + { + if (tree_expr) + delete tree_expr; + return NULL; + } + + /* CASE 1: Check if string is a just a floating point number */ + if (string_to_float(string, &val) != PROJECTM_PARSE_ERROR) + { + if ((gen_expr = GenExpr::const_to_expr(val)) == NULL) + { + if (tree_expr) + delete tree_expr; + return NULL; + } + + /* Parse the rest of the line */ + return parse_infix_op(fs, token, insert_gen_expr(gen_expr, &tree_expr), preset); + + } + + + /* CASE 4: custom shape variable */ + if (current_shape != NULL) + { + if ((param = ParamUtils::find(std::string(string), ¤t_shape->param_tree)) == NULL) + { + if ((param = preset->builtinParams.find_builtin_param(std::string(string))) == NULL) + if ((param = ParamUtils::find(std::string(string), ¤t_shape->param_tree)) == NULL) + { + if (tree_expr) + delete tree_expr; + return NULL; + } + } + + if (PARSE_DEBUG) + { + std::cerr << "parse_gen_expr: custom shape parameter (name = " + << param->name << ")" << std::endl; + } + + + /* Convert parameter to an expression */ + if ((gen_expr = GenExpr::param_to_expr(param)) == NULL) + { + delete tree_expr; + return NULL; + } + + //if (PARSE_DEBUG) printf("converted to expression (LINE %d)\n", line_count); + + /* Parse the rest of the line */ + return parse_infix_op(fs, token, insert_gen_expr(gen_expr, &tree_expr), preset); + } + + /* CASE 5: custom wave variable */ + if (current_wave != NULL) + { + if ((param = ParamUtils::find(std::string(string), ¤t_wave->param_tree)) == NULL) + { + if ((param = preset->builtinParams.find_builtin_param(std::string(string))) == NULL) + if ((param = ParamUtils::find(std::string(string), ¤t_wave->param_tree)) == NULL) + { + if (tree_expr) + delete tree_expr; + return NULL; + } + } + assert(param); + + if (PARSE_DEBUG) + { + std::cerr << "parse_gen_expr: custom wave parameter (name = " << param->name << ")" << std::endl; + + } + + /* Convert parameter to an expression */ + if ((gen_expr = GenExpr::param_to_expr(param)) == NULL) + { + delete tree_expr; + return NULL; + } + + //if (PARSE_DEBUG) printf("converted to expression (LINE %d)\n", line_count); + + /* Parse the rest of the line */ + return parse_infix_op(fs, token, insert_gen_expr(gen_expr, &tree_expr), preset); + + } + + /* CASE 6: regular parameter. Will be created if necessary and the string has no invalid characters */ + if ((param = ParamUtils::find(string, &preset->builtinParams, &preset->user_param_tree)) != NULL) + { + + if (PARSE_DEBUG) + { + std::cerr << "parse_gen_expr: parameter (name = \"" << param->name << "\")..." << std::endl; + } + + /* Convert parameter to an expression */ + if ((gen_expr = GenExpr::param_to_expr(param)) == NULL) + { + delete tree_expr; + return NULL; + } + + //if (PARSE_DEBUG) printf("converted to expression (LINE %d)\n", line_count); + + /* Parse the rest of the line */ + return parse_infix_op(fs, token, insert_gen_expr(gen_expr, &tree_expr), preset); + + } + + /* CASE 7: Bad string, give up */ + if (PARSE_DEBUG) + { + printf( "parse_gen_expr: syntax error [string = \"%s\"] (LINE %d)\n", string, line_count); + + } + if (tree_expr) + delete tree_expr; + return NULL; + } +} + + + +/* Inserts expressions into tree according to operator precedence. + If root is null, a new tree is created, with infix_op as only element */ + +TreeExpr * Parser::insert_infix_op(InfixOp * infix_op, TreeExpr **root) +{ + + TreeExpr * new_root; + + /* Sanity check */ + if (infix_op == NULL) + return NULL; + + /* The root is null, so make this operator + the new root */ + + if (*root == NULL) + { + new_root = new TreeExpr(infix_op, NULL, NULL, NULL); + *root = new_root; + return new_root; + } + + /* The root node is not an infix function, + so we make this infix operator the new root */ + + if ((*root)->infix_op == NULL) + { + new_root = new TreeExpr(infix_op, NULL, *root, NULL); + (*root) = new_root; + return new_root; + } + + /* The root is an infix function. If the precedence + of the item to be inserted is greater than the root's + precedence, then make gen_expr the root */ + + if (infix_op->precedence > (*root)->infix_op->precedence) + { + new_root = new TreeExpr(infix_op, NULL, *root, NULL); + (*root) = new_root; + return new_root; + } + + /* If control flow reaches here, use a recursive helper + with the knowledge that the root is higher precedence + than the item to be inserted */ + + insert_infix_rec(infix_op, *root); + return *root; + +} + + +TreeExpr * Parser::insert_gen_expr(GenExpr * gen_expr, TreeExpr ** root) +{ + + TreeExpr * new_root; + + /* If someone foolishly passes a null + pointer to insert, return the original tree */ + + if (gen_expr == NULL) + { + return *root; + } + + /* If the root is null, generate a new expression tree, + using the passed expression as the root element */ + + if (*root == NULL) + { + new_root = new TreeExpr(NULL, gen_expr, NULL, NULL); + *root = new_root; + return new_root; + } + + + /* Otherwise. the new element definitely will not replace the current root. + Use a recursive helper function to do insertion */ + + insert_gen_rec(gen_expr, *root); + return *root; +} + +/* A recursive helper function to insert general expression elements into the operator tree */ +int Parser::insert_gen_rec(GenExpr * gen_expr, TreeExpr * root) +{ + + /* Trivial Case: root is null */ + + if (root == NULL) + { + //if (PARSE_DEBUG) printf("insert_gen_rec: root is null, returning failure\n"); + return PROJECTM_FAILURE; + } + + + /* The current node's left pointer is null, and this + current node is an infix operator, so insert the + general expression at the left pointer */ + + if ((root->left == NULL) && (root->infix_op != NULL)) + { + root->left = new TreeExpr(NULL, gen_expr, NULL, NULL); + return PROJECTM_SUCCESS; + } + + /* The current node's right pointer is null, and this + current node is an infix operator, so insert the + general expression at the right pointer */ + + if ((root->right == NULL) && (root->infix_op != NULL)) + { + root->right = new TreeExpr(NULL, gen_expr, NULL, NULL); + return PROJECTM_SUCCESS; + } + + /* Otherwise recurse down to the left. If + this succeeds then return. If it fails, try + recursing down to the right */ + + if (insert_gen_rec(gen_expr, root->left) == PROJECTM_FAILURE) + return insert_gen_rec(gen_expr, root->right); + + /* Impossible for control flow to reach here, but in + the world of C programming, who knows... */ + if (PARSE_DEBUG) printf("insert_gen_rec: should never reach here!\n"); + return PROJECTM_FAILURE; +} + + +/* A recursive helper function to insert infix arguments by operator precedence */ +int Parser::insert_infix_rec(InfixOp * infix_op, TreeExpr * root) +{ + + /* Shouldn't happen, implies a parse error */ + + if (root == NULL) + return PROJECTM_FAILURE; + + /* Also shouldn't happen, also implies a (different) parse error */ + + if (root->infix_op == NULL) + return PROJECTM_FAILURE; + + /* Left tree is empty, attach this operator to it. + I don't think this will ever happen */ + if (root->left == NULL) + { + root->left = new TreeExpr(infix_op, NULL, root->left, NULL); + return PROJECTM_SUCCESS; + } + + /* Right tree is empty, attach this operator to it */ + if (root->right == NULL) + { + root->right = new TreeExpr(infix_op, NULL, root->right, NULL); + return PROJECTM_SUCCESS; + } + + /* The left element can now be ignored, since there is no way for this + operator to use those expressions */ + + /* If the right element is not an infix operator, + then insert the expression here, attaching the old right branch + to the left of the new expression */ + + if (root->right->infix_op == NULL) + { + root->right = new TreeExpr(infix_op, NULL, root->right, NULL); + return PROJECTM_SUCCESS; + } + + /* Traverse deeper if the inserting operator precedence is less than the + the root's right operator precedence */ + if (infix_op->precedence < root->right->infix_op->precedence) + return insert_infix_rec(infix_op, root->right); + + /* Otherwise, insert the operator here */ + + root->right = new TreeExpr(infix_op, NULL, root->right, NULL); + return PROJECTM_SUCCESS; + +} + +/* Parses an infix operator */ +GenExpr * Parser::parse_infix_op(std::istream & fs, token_t token, TreeExpr * tree_expr, MilkdropPreset * preset) +{ + + GenExpr * gen_expr; + + switch (token) + { + /* All the infix operators */ + case tPlus: + if (PARSE_DEBUG) printf("parse_infix_op: found addition operator (LINE %d)\n", line_count); + if (PARSE_DEBUG) std::cerr << "WRAP AROUND IS " << tokenWrapAroundEnabled << std::endl; + + return parse_gen_expr(fs, insert_infix_op(Eval::infix_add, &tree_expr), preset); + case tMinus: + if (PARSE_DEBUG) printf("parse_infix_op: found subtraction operator (LINE %d)\n", line_count); + return parse_gen_expr(fs, insert_infix_op(Eval::infix_minus, &tree_expr), preset); + case tMult: + if (PARSE_DEBUG) printf("parse_infix_op: found multiplication operator (LINE %d)\n", line_count); + return parse_gen_expr(fs, insert_infix_op(Eval::infix_mult, &tree_expr), preset); + case tDiv: + if (PARSE_DEBUG) printf("parse_infix_op: found division operator (LINE %d)\n", line_count); + return parse_gen_expr(fs, insert_infix_op(Eval::infix_div, &tree_expr), preset); + case tMod: + if (PARSE_DEBUG) printf("parse_infix_op: found modulo operator (LINE %d)\n", line_count); + return parse_gen_expr(fs, insert_infix_op(Eval::infix_mod, &tree_expr), preset); + case tOr: + if (PARSE_DEBUG) printf("parse_infix_op: found bitwise or operator (LINE %d)\n", line_count); + return parse_gen_expr(fs, insert_infix_op(Eval::infix_or, &tree_expr), preset); + case tAnd: + if (PARSE_DEBUG) printf("parse_infix_op: found bitwise and operator (LINE %d)\n", line_count); + return parse_gen_expr(fs, insert_infix_op(Eval::infix_and, &tree_expr), preset); + case tPositive: + if (PARSE_DEBUG) printf("parse_infix_op: found positive operator (LINE %d)\n", line_count); + return parse_gen_expr(fs, insert_infix_op(Eval::infix_positive, &tree_expr), preset); + case tNegative: + if (PARSE_DEBUG) printf("parse_infix_op: found negative operator (LINE %d)\n", line_count); + return parse_gen_expr(fs, insert_infix_op(Eval::infix_negative, &tree_expr), preset); + + case tEOL: + case tEOF: + case tSemiColon: + case tRPr: + case tComma: + if (PARSE_DEBUG) printf("parse_infix_op: terminal found (LINE %d)\n", line_count); + gen_expr = new GenExpr(TREE_T, (void*)tree_expr); + assert(gen_expr); + return gen_expr; + default: + if (PARSE_DEBUG) printf("parse_infix_op: operator or terminal expected, but not found (LINE %d)\n", line_count); + delete tree_expr; + return NULL; + } + + /* Will never happen */ + return NULL; + +} + +/* Parses an integer, checks for +/- prefix */ +int Parser::parse_int(std::istream & fs, int * int_ptr) +{ + + char string[MAX_TOKEN_SIZE]; + token_t token; + int sign; + char * end_ptr = (char*)" "; + + token = parseToken(fs, string); + + + switch (token) + { + case tMinus: + sign = -1; + token = parseToken(fs, string); + break; + case tPlus: + sign = 1; + token = parseToken(fs, string); + break; + default: + sign = 1; + break; + } + + + if (string[0] == 0) + return PROJECTM_PARSE_ERROR; + + /* Convert the string to an integer. *end_ptr + should end up pointing to null terminator of 'string' + if the conversion was successful. */ + // printf("STRING: \"%s\"\n", string); + + (*int_ptr) = sign*strtol(string, &end_ptr, 10); + + /* If end pointer is a return character or null terminator, all is well */ + if ((*end_ptr == '\r') || (*end_ptr == '\0')) + return PROJECTM_SUCCESS; + + return PROJECTM_PARSE_ERROR; + +} +/* Parses a floating point number */ +int Parser::string_to_float(char * string, float * float_ptr) +{ + + char ** error_ptr; + + if (*string == 0) + return PROJECTM_PARSE_ERROR; + + error_ptr = (char**)wipemalloc(sizeof(char**)); + + (*float_ptr) = strtod(string, error_ptr); + + /* These imply a succesful parse of the string */ + if ((**error_ptr == '\0') || (**error_ptr == '\r')) + { + free(error_ptr); + error_ptr = NULL; + return PROJECTM_SUCCESS; + } + + (*float_ptr) = 0; + free(error_ptr); + error_ptr = NULL; + return PROJECTM_PARSE_ERROR; +} + +/* Parses a floating point number */ +int Parser::parse_float(std::istream & fs, float * float_ptr) +{ + + char string[MAX_TOKEN_SIZE]; + char ** error_ptr; + token_t token; + int sign; + + error_ptr =(char**) wipemalloc(sizeof(char**)); + + token = parseToken(fs, string); + + switch (token) + { + case tMinus: + sign = -1; + token = parseToken(fs, string); + break; + case tPlus: + sign = 1; + token = parseToken(fs, string); + break; + default: + sign = 1; + } + + if (string[0] == 0) + { + free(error_ptr); + error_ptr = NULL; + return PROJECTM_PARSE_ERROR; + } + + (*float_ptr) = sign*strtod(string, error_ptr); + + /* No conversion was performed */ + if ((**error_ptr == '\0') || (**error_ptr == '\r')) + { + free(error_ptr); + error_ptr = NULL; + return PROJECTM_SUCCESS; + } + + if (PARSE_DEBUG) printf("parse_float: float conversion failed for string \"%s\"\n", string); + + (*float_ptr) = 0; + free(error_ptr); + error_ptr = NULL; + return PROJECTM_PARSE_ERROR; + +} + +/* Parses a per frame equation. That is, interprets a stream of data as a per frame equation */ +PerFrameEqn * Parser::parse_per_frame_eqn(std::istream & fs, int index, MilkdropPreset * preset) +{ + + char string[MAX_TOKEN_SIZE]; + Param * param; + PerFrameEqn * per_frame_eqn; + GenExpr * gen_expr; + + + if (parseToken(fs, string) != tEq) + { + if (PARSE_DEBUG) printf("parse_per_frame_eqn: no equal sign after string \"%s\" (LINE %d)\n", string, line_count); + return NULL; + } + + /* Find the parameter associated with the string, create one if necessary */ + if ((param = ParamUtils::find(string, &preset->builtinParams, &preset->user_param_tree)) == NULL) + { + return NULL; + } + if (PARSE_DEBUG) std::cerr << "parse_per_frame_eqn: parameter \"" << param->name << "\" retrieved (LINE" << line_count << ")" << std::endl; + /* Make sure parameter is writable */ + if (param->flags & P_FLAG_READONLY) + { + if (PARSE_DEBUG) std::cerr << "parse_per_frame_eqn: parameter \"" << param->name << "\" %s is marked as read only (LINE " << line_count << ")" << std::endl; + return NULL; + } + + /* Parse right side of equation as an expression */ + if ((gen_expr = parse_gen_expr(fs, NULL, preset)) == NULL) + { + if (PARSE_DEBUG) printf("parse_per_frame_eqn: equation evaluated to null (LINE %d)\n", line_count); + return NULL; + } + + if (PARSE_DEBUG) printf("parse_per_frame_eqn: finished per frame equation evaluation (LINE %d)\n", line_count); + + /* Create a new per frame equation */ + if ((per_frame_eqn = new PerFrameEqn(index, param, gen_expr)) == NULL) + { + if (PARSE_DEBUG) printf("parse_per_frame_eqn: failed to create a new per frame eqn, out of memory?\n"); + delete gen_expr; + return NULL; + } + + if (PARSE_DEBUG) printf("parse_per_frame_eqn: per_frame eqn parsed succesfully\n"); + + return per_frame_eqn; +} + +/* Parses an 'implicit' per frame equation. That is, interprets a stream of data as a per frame equation without a prefix */ +PerFrameEqn * Parser::parse_implicit_per_frame_eqn(std::istream & fs, char * param_string, int index, MilkdropPreset * preset) +{ + + Param * param; + PerFrameEqn * per_frame_eqn; + GenExpr * gen_expr; + + if (fs == NULL) + return NULL; + if (param_string == NULL) + return NULL; + if (preset == NULL) + return NULL; + + //rintf("param string: %s\n", param_string); + /* Find the parameter associated with the string, create one if necessary */ + if ((param = ParamUtils::find(param_string, &preset->builtinParams, &preset->user_param_tree)) == NULL) + { + return NULL; + } + + //printf("parse_implicit_per_frame_eqn: param is %s\n", param->name); + + /* Make sure parameter is writable */ + if (param->flags & P_FLAG_READONLY) + { + if (PARSE_DEBUG) printf("parse_implicit_per_frame_eqn: parameter %s is marked as read only (LINE %d)\n", param->name.c_str(), line_count); + return NULL; + } + + /* Parse right side of equation as an expression */ + if ((gen_expr = parse_gen_expr(fs, NULL, preset)) == NULL) + { + if (PARSE_DEBUG) printf("parse_implicit_per_frame_eqn: equation evaluated to null (LINE %d)\n", line_count); + return NULL; + } + + if (PARSE_DEBUG) printf("parse_implicit_per_frame_eqn: finished per frame equation evaluation (LINE %d)\n", line_count); + + /* Create a new per frame equation */ + if ((per_frame_eqn = new PerFrameEqn(index, param, gen_expr)) == NULL) + { + if (PARSE_DEBUG) printf("parse_implicit_per_frame_eqn: failed to create a new per frame eqn, out of memory?\n"); + delete gen_expr; + return NULL; + } + + if (PARSE_DEBUG) printf("parse_implicit_per_frame_eqn: per_frame eqn parsed succesfully\n"); + + return per_frame_eqn; +} + +/* Parses an initial condition */ +InitCond * Parser::parse_init_cond(std::istream & fs, char * name, MilkdropPreset * preset) +{ + + Param * param; + CValue init_val; + InitCond * init_cond; + + if (name == NULL) + return NULL; + if (preset == NULL) + return NULL; + + /* Search for the paramater in the database, creating it if necessary */ + if ((param = ParamUtils::find(name, &preset->builtinParams, &preset->user_param_tree)) == NULL) + { + return NULL; + } + + if (PARSE_DEBUG) printf("parse_init_cond: parameter = \"%s\" (LINE %d)\n", param->name.c_str(), line_count); + + if (param->flags & P_FLAG_READONLY) + { + if (PARSE_DEBUG) printf("parse_init_cond: builtin parameter \"%s\" marked as read only!\n", param->name.c_str()); + return NULL; + } + + /* At this point, a parameter has been created or was found + in the database. */ + + if (PARSE_DEBUG) printf("parsed_init_cond: parsing initial condition value... (LINE %d)\n", line_count); + + /* integer value (boolean is an integer in C) */ + if ( (param->type == P_TYPE_BOOL)) + { + int bool_test; + if ((parse_int(fs, &bool_test)) == PROJECTM_PARSE_ERROR) + { + if (PARSE_DEBUG) printf("parse_init_cond: error parsing integer!\n"); + return NULL; + } + init_val.bool_val = bool_test; + } + + else if ((param->type == P_TYPE_INT)) + { + if ((parse_int(fs, (int*)&init_val.int_val)) == PROJECTM_PARSE_ERROR) + { + if (PARSE_DEBUG) printf("parse_init_cond: error parsing integer!\n"); + return NULL; + } + } + + /* float value */ + else if (param->type == P_TYPE_DOUBLE) + { + if ((parse_float(fs, (float*)&init_val.float_val)) == PROJECTM_PARSE_ERROR) + { + if (PARSE_DEBUG) printf("parse_init_cond: error parsing float!\n"); + return NULL; + } + } + + /* Unknown value */ + else + { + if (PARSE_DEBUG) printf("parse_init_cond: unknown parameter type!\n"); + return NULL; + } + + /* Create new initial condition */ + if ((init_cond = new InitCond(param, init_val)) == NULL) + { + if (PARSE_DEBUG) printf("parse_init_cond: new_init_cond failed!\n"); + return NULL; + } + + /* Finished */ + return init_cond; +} + + +void Parser::parse_string_block(std::istream & fs, std::string * out_string) { + + + char name[MAX_TOKEN_SIZE]; + token_t token; + + std::set skipList; + skipList.insert('`'); + readStringUntil(fs, out_string, false, skipList); + + //std::cout << "out_string:\n " << *out_string << "\n" << std::endl; + +} + +InitCond * Parser::parse_per_frame_init_eqn(std::istream & fs, MilkdropPreset * preset, std::map * database) +{ + + char name[MAX_TOKEN_SIZE]; + Param * param = NULL; + CValue init_val; + InitCond * init_cond; + GenExpr * gen_expr; + float val; + token_t token; + + + if (preset == NULL) + return NULL; + if (fs == NULL) + return NULL; + + if ((token = parseToken(fs, name)) != tEq) + return NULL; + + + /* If a database was specified,then use ParamUtils::find_db instead */ + if ((database != NULL) && ((param = ParamUtils::find(name, database)) == NULL)) + { + return NULL; + } + + /* Otherwise use the builtin parameter and user databases. This is confusing. Sorry. */ + if ((param == NULL) && ((param = ParamUtils::find(name, &preset->builtinParams, &preset->user_param_tree)) == NULL)) + { + return NULL; + } + + if (PARSE_DEBUG) printf("parse_per_frame_init_eqn: parameter = \"%s\" (LINE %d)\n", param->name.c_str(), line_count); + + if (param->flags & P_FLAG_READONLY) + { + if (PARSE_DEBUG) printf("pars_per_frame_init_eqn: builtin parameter \"%s\" marked as read only!\n", param->name.c_str()); + return NULL; + } + + /* At this point, a parameter has been created or was found + in the database. */ + + if (PARSE_DEBUG) printf("parse_per_frame_init_eqn: parsing right hand side of per frame init equation.. (LINE %d)\n", line_count); + + if ((gen_expr = parse_gen_expr(fs, NULL, preset)) == NULL) + { + if (PARSE_DEBUG) printf("parse_per_frame_init_eqn: failed to parse general expresion!\n"); + return NULL; + } + + /* Compute initial condition value */ + val = gen_expr->eval_gen_expr(-1,-1); + + /* Free the general expression now that we are done with it */ + delete gen_expr; + + /* integer value (boolean is an integer in C) */ + if (param->type == P_TYPE_BOOL) + { + init_val.bool_val = (bool)val; + } + + else if ((param->type == P_TYPE_INT)) + { + init_val.int_val = (int)val; + } + + /* float value */ + else if (param->type == P_TYPE_DOUBLE) + { + init_val.float_val = val; + } + + /* Unknown value */ + else + { + if (PARSE_DEBUG) printf("pase_per_frame_init_eqn: unknown parameter type!\n"); + return NULL; + } + + + /* Create new initial condition */ + if ((init_cond = new InitCond(param, init_val)) == NULL) + { + if (PARSE_DEBUG) printf("parse_per_frame_init_eqn: new_init_cond failed!\n"); + return NULL; + } + + init_cond->evaluate(true); + + /* Finished */ + return init_cond; +} + +bool Parser::scanForComment(std::istream & fs) { + + char c; + c = fs.get(); + + if (c == '/') { + while (true) + { + if (!fs || fs.eof()) + return true; + else + c = fs.get(); + if (c == EOF) + return true; + + if (c == '\n') + { + return true; + } + } + } else { + fs.unget(); + return false; + } +} + +void Parser::readStringUntil(std::istream & fs, std::string * out_buffer, bool wrapAround, const std::set & skipList) { + + int string_line_buffer_index = 0; + char c; + char p; + /* Loop until a delimiter is found, or the maximum string size is found */ + while (true) + { + + if (!fs || fs.eof()) + c = EOF; + else + c = fs.get(); + + /* Now interpret the character */ + switch (c) + { + case '/': + { + bool commentExisted = scanForComment(fs); + if (!commentExisted) { + out_buffer->push_back(c); + break; + } else { + line_count++; + return; + } + } + case '\n': + if (!out_buffer->empty() && ((*out_buffer)[out_buffer->length() -1] == '\n')) + return; + + line_count++; + if (wrapAround) + { + std::ostringstream buffer; + + // if (PARSE_DEBUG) std::cerr << "token wrap! line " << line_count << std::endl; + while (c != '=') + { + + if (!fs || fs.eof()) + { + line_count = 1; + line_mode = UNSET_LINE_MODE; + // if (PARSE_DEBUG) std::cerr << "token wrap: end of file" << std::endl; + return; + } + + else { + c = fs.get(); + if ( c != '=') + buffer << c; + } + + } + + + if (!wrapsToNextLine(buffer.str())) { + wrapAround = false; + int buf_size = (int)buffer.str().length(); + // <= to also remove equal sign parsing from stream + for (int k = 0; k <= buf_size; k++) { + if (fs) + fs.unget(); + else + abort(); + } + return; + } + + break; + } else + out_buffer->push_back(c); + return; + case EOF: + line_count = 1; + return; + default: + + if (out_buffer != NULL) + { + if (skipList.find(c) == skipList.end()) + out_buffer->push_back(c); + + } + } + + } + + +} +int Parser::parse_wavecode(char * token, std::istream & fs, MilkdropPreset * preset) +{ + + char * var_string; + InitCond * init_cond; + CustomWave * custom_wave; + int id; + CValue init_val; + Param * param; + + assert(preset); + assert(fs); + assert(token); + + /* token should be in the form wavecode_N_var, such as wavecode_1_samples */ + + /* Get id and variable name from token string */ + if (parse_wavecode_prefix(token, &id, &var_string) < 0) + return PROJECTM_PARSE_ERROR; + + last_custom_wave_id = id; + + if (PARSE_DEBUG) printf("parse_wavecode: wavecode id = %d, parameter = \"%s\"\n", id, var_string); + + /* Retrieve custom wave information from preset, allocating new one if necessary */ + if ((custom_wave = MilkdropPreset::find_custom_object(id, preset->customWaves)) == NULL) + { + std::cerr << "parse_wavecode: failed to load (or create) custom wave (id = " + << id << ")!\n" << std::endl; + + return PROJECTM_FAILURE; + } + + if (PARSE_DEBUG) printf("parse_wavecode: custom wave found (id = %d)\n", custom_wave->id); + + /* Retrieve parameter from this custom waves parameter db */ + if ((param = ParamUtils::find(var_string,&custom_wave->param_tree)) == NULL) + return PROJECTM_FAILURE; + + if (PARSE_DEBUG) printf("parse_wavecode: custom wave parameter found (name = %s)\n", param->name.c_str()); + + /* integer value (boolean is an integer in C) */ + + if ((param->type == P_TYPE_BOOL)) + { + int bool_test; + if ((parse_int(fs, &bool_test)) == PROJECTM_PARSE_ERROR) + { + + if (PARSE_DEBUG) printf("parse_wavecode: error parsing integer!\n"); + return PROJECTM_PARSE_ERROR; + } + init_val.bool_val = bool_test; + } + else if ((param->type == P_TYPE_INT)) + { + if ((parse_int(fs, (int*)&init_val.int_val)) == PROJECTM_PARSE_ERROR) + { + + if (PARSE_DEBUG) printf("parse_wavecode: error parsing integer!\n"); + return PROJECTM_PARSE_ERROR; + } + } + + /* float value */ + else if (param->type == P_TYPE_DOUBLE) + { + if ((parse_float(fs, (float*)&init_val.float_val)) == PROJECTM_PARSE_ERROR) + { + if (PARSE_DEBUG) printf("parse_wavecode: error parsing float!\n"); + return PROJECTM_PARSE_ERROR; + } + } + + /* Unknown value */ + else + { + if (PARSE_DEBUG) printf("parse_wavecode: unknown parameter type!\n"); + return PROJECTM_PARSE_ERROR; + } + + /* Create new initial condition */ + init_cond = new InitCond(param, init_val); + + if (init_cond == NULL) + { + if (PARSE_DEBUG) printf("parse_wavecode: new_init_cond failed!\n"); + return PROJECTM_FAILURE; + } + + std::pair::iterator, bool> inserteePair = + custom_wave->init_cond_tree.insert(std::make_pair(init_cond->param->name, init_cond)); + + // assert(inserteePair.second); + + line_mode = CUSTOM_WAVE_WAVECODE_LINE_MODE; + + if (PARSE_DEBUG) printf("parse_wavecode: [success]\n"); + return PROJECTM_SUCCESS; +} + +int Parser::parse_shapecode(char * token, std::istream & fs, MilkdropPreset * preset) +{ + + char * var_string; + InitCond * init_cond; + CustomShape * custom_shape; + int id; + CValue init_val; + Param * param; + + /* Null argument checks */ + if (preset == NULL) + return PROJECTM_FAILURE; + if (fs == NULL) + return PROJECTM_FAILURE; + if (token == NULL) + return PROJECTM_FAILURE; + + /* token should be in the form shapecode_N_var, such as shapecode_1_samples */ + + /* Get id and variable name from token string */ + if (parse_shapecode_prefix(token, &id, &var_string) < 0) + return PROJECTM_PARSE_ERROR; + + last_custom_shape_id = id; + + if (PARSE_DEBUG) printf("parse_shapecode: shapecode id = %d, parameter = \"%s\"\n", id, var_string); + + + /* Retrieve custom shape information from preset. The 3rd argument + if true creates a custom shape if one does not exist */ + + if ((custom_shape = MilkdropPreset::find_custom_object(id, preset->customShapes)) == NULL) + { + if (PARSE_DEBUG) printf("parse_shapecode: failed to load (or create) custom shape (id = %d)!\n", id); + return PROJECTM_FAILURE; + } + if (PARSE_DEBUG) printf("parse_shapecode: custom shape found (id = %d)\n", custom_shape->id); + + if ((param = ParamUtils::find(var_string, &custom_shape->text_properties_tree)) != NULL) + { + + std::string text;//[MAX_TOKEN_SIZE]; + //token_t token = parseToken(fs, text); + + fs >> text; + + *((std::string*)param->engine_val) = text; + if (PARSE_DEBUG) + std::cerr << "parse_shapecode: found image url, text is \"" + << text << "\"" << std::endl; + + return PROJECTM_SUCCESS; + } + + /* Retrieve parameter from this custom shapes parameter db */ + + + if ((param = ParamUtils::find(var_string, &custom_shape->param_tree)) == NULL) + { + if (PARSE_DEBUG) printf("parse_shapecode: failed to create parameter.\n"); + return PROJECTM_FAILURE; + } + if (PARSE_DEBUG) printf("parse_shapecode: custom shape parameter found (name = %s)\n", param->name.c_str()); + + /* integer value (boolean is an integer in C) */ + + + if ((param->type == P_TYPE_BOOL)) + { + int bool_test; + if ((parse_int(fs, &bool_test)) == PROJECTM_PARSE_ERROR) + { + if (PARSE_DEBUG) printf("parse_shapecode: error parsing integer!\n"); + return PROJECTM_PARSE_ERROR; + } + init_val.bool_val = bool_test; + } + else if ((param->type == P_TYPE_INT)) + { + if ((parse_int(fs, (int*)&init_val.int_val)) == PROJECTM_PARSE_ERROR) + { + if (PARSE_DEBUG) printf("parse_shapecode: error parsing integer!\n"); + return PROJECTM_PARSE_ERROR; + } + } + + /* float value */ + else if (param->type == P_TYPE_DOUBLE) + { + if ((parse_float(fs, (float*)&init_val.float_val)) == PROJECTM_PARSE_ERROR) + { + if (PARSE_DEBUG) printf("parse_shapecode: error parsing float!\n"); + return PROJECTM_PARSE_ERROR; + } + } + + /* Unknown value */ + else + { + if (PARSE_DEBUG) printf("parse_shapecode: unknown parameter type!\n"); + return PROJECTM_PARSE_ERROR; + } + + /* Create new initial condition */ + if ((init_cond = new InitCond(param, init_val)) == NULL) + { + if (PARSE_DEBUG) printf("parse_shapecode: new_init_cond failed!\n"); + return PROJECTM_FAILURE; + } + + custom_shape->init_cond_tree.insert(std::make_pair(param->name,init_cond)); + line_mode = CUSTOM_SHAPE_SHAPECODE_LINE_MODE; + + if (PARSE_DEBUG) printf("parse_shapecode: [success]\n"); + return PROJECTM_SUCCESS; +} + + +int Parser::parse_wavecode_prefix(char * token, int * id, char ** var_string) +{ + + int len, i, j; + + if (token == NULL) + return PROJECTM_FAILURE; + /* + if (*var_string == NULL) + return PROJECTM_FAILURE; + */ + if (id == NULL) + return PROJECTM_FAILURE; + + len = strlen(token); + + /* Move pointer passed "wavecode_" prefix */ + if (len <= WAVECODE_STRING_LENGTH) + return PROJECTM_FAILURE; + i = WAVECODE_STRING_LENGTH; + j = 0; + (*id) = 0; + + /* This loop grabs the integer id for this custom wave */ + while ((i < len) && (token[i] >= 48) && (token[i] <= 57)) + { + if (j >= MAX_TOKEN_SIZE) + return PROJECTM_FAILURE; + + (*id) = 10*(*id) + (token[i]-48); + j++; + i++; + } + + + if (i > (len - 2)) + return PROJECTM_FAILURE; + + *var_string = token + i + 1; + + return PROJECTM_SUCCESS; + +} + + +int Parser::parse_shapecode_prefix(char * token, int * id, char ** var_string) +{ + + int len, i, j; + + if (token == NULL) + return PROJECTM_FAILURE; + /* + if (*var_string == NULL) + return PROJECTM_FAILURE; + */ + if (id == NULL) + return PROJECTM_FAILURE; + + len = strlen(token); + + /* Move pointer passed "shapecode_" prefix */ + if (len <= SHAPECODE_STRING_LENGTH) + return PROJECTM_FAILURE; + i = SHAPECODE_STRING_LENGTH; + j = 0; + (*id) = 0; + + /* This loop grabs the integer id for this custom shape */ + while ((i < len) && (token[i] >= 48) && (token[i] <= 57)) + { + if (j >= MAX_TOKEN_SIZE) + return PROJECTM_FAILURE; + + (*id) = 10*(*id) + (token[i]-48); + j++; + i++; + } + + + if (i > (len - 2)) + return PROJECTM_FAILURE; + + *var_string = token + i + 1; + + return PROJECTM_SUCCESS; + +} + +int Parser::parse_wave_prefix(char * token, int * id, char ** eqn_string) +{ + + int len, i, j; + + if (token == NULL) + return PROJECTM_FAILURE; + if (eqn_string == NULL) + return PROJECTM_FAILURE; + if (id == NULL) + return PROJECTM_FAILURE; + + len = strlen(token); + + if (len <= WAVE_STRING_LENGTH) + return PROJECTM_FAILURE; + + + i = WAVE_STRING_LENGTH; + j = 0; + (*id) = 0; + + /* This loop grabs the integer id for this custom wave */ + while ((i < len) && (token[i] >= 48) && (token[i] <= 57)) + { + if (j >= MAX_TOKEN_SIZE) + return PROJECTM_FAILURE; + + (*id) = 10*(*id) + (token[i]-48); + j++; + i++; + } + + if (i > (len - 2)) + return PROJECTM_FAILURE; + + *eqn_string = token + i + 1; + + if (PARSE_DEBUG) printf("parse_wave_prefix: prefix = %s\n (LINE %d)", *eqn_string, line_count); + return PROJECTM_SUCCESS; + +} + +int Parser::parse_shape_prefix(char * token, int * id, char ** eqn_string) +{ + + int len, i, j; + + if (token == NULL) + return PROJECTM_FAILURE; + if (eqn_string == NULL) + return PROJECTM_FAILURE; + if (id == NULL) + return PROJECTM_FAILURE; + + len = strlen(token); + + if (len <= SHAPE_STRING_LENGTH) + return PROJECTM_FAILURE; + + + i = SHAPE_STRING_LENGTH; + j = 0; + (*id) = 0; + + /* This loop grabs the integer id for this custom wave */ + while ((i < len) && (token[i] >= 48) && (token[i] <= 57)) + { + if (j >= MAX_TOKEN_SIZE) + return PROJECTM_FAILURE; + + (*id) = 10*(*id) + (token[i]-48); + j++; + i++; + } + + if (i > (len - 2)) + return PROJECTM_FAILURE; + + *eqn_string = token + i + 1; + + return PROJECTM_SUCCESS; + +} + +/* Parses custom wave equations */ +int Parser::parse_wave(char * token, std::istream & fs, MilkdropPreset * preset) +{ + + int id; + char * eqn_type; + + if (PARSE_DEBUG) printf("parse_wave:begin\n"); + + if (token == NULL) + return PROJECTM_FAILURE; + if (fs == NULL) + return PROJECTM_FAILURE; + if (preset == NULL) + return PROJECTM_FAILURE; + + /* Grab custom wave id and equation type (per frame or per point) from string token */ + if (parse_wave_prefix(token, &id, &eqn_type) < 0) + { + if (PARSE_DEBUG) printf("parse_wave: syntax error in custom wave prefix!\n"); + return PROJECTM_FAILURE; + } + + strncpy(last_eqn_type, eqn_type, MAX_TOKEN_SIZE); + + return parse_wave_helper(fs, preset, id, eqn_type, 0); + +} + +int Parser::parse_wave_helper(std::istream & fs, MilkdropPreset * preset, int id, char * eqn_type, char * init_string) +{ + + Param * param; + GenExpr * gen_expr; + char string[MAX_TOKEN_SIZE]; + PerFrameEqn * per_frame_eqn; + CustomWave * custom_wave; + InitCond * init_cond; + + /* Retrieve custom wave associated with this id */ + if ((custom_wave = MilkdropPreset::find_custom_object(id, preset->customWaves)) == NULL) + { + if (PARSE_DEBUG) printf("parse_wave_helper: custom wave id %d not found!\n", id); + return PROJECTM_FAILURE; + } + + /* per frame init equation case */ + if (!strncmp(eqn_type, WAVE_INIT_STRING, WAVE_INIT_STRING_LENGTH)) + { + + if (PARSE_DEBUG) printf("parse_wave_helper (per frame init): [begin] (LINE %d)\n", line_count); + + /* Parse the per frame init equation */ + if ((init_cond = parse_per_frame_init_eqn(fs, preset, &custom_wave->param_tree)) == NULL) + { + if (PARSE_DEBUG) printf("parse_wave_helper (per frame init): equation parsing failed (LINE %d)\n", line_count); + return PROJECTM_PARSE_ERROR; + } + + /* Insert the equation in the per frame equation tree */ + custom_wave->per_frame_init_eqn_tree.insert(std::make_pair(init_cond->param->name,init_cond)); + + line_mode = CUSTOM_WAVE_PER_FRAME_INIT_LINE_MODE; + init_cond->evaluate(true); + return PROJECTM_SUCCESS; + + } + + /* per frame equation case */ + if (!strncmp(eqn_type, PER_FRAME_STRING_NO_UNDERSCORE, PER_FRAME_STRING_NO_UNDERSCORE_LENGTH)) + { + + if (PARSE_DEBUG) printf("parse_wave_helper (per_frame): [start] (custom wave id = %d)\n", custom_wave->id); + + if (parseToken(fs, string) != tEq) + { + if (PARSE_DEBUG) printf("parse_wave (per_frame): no equal sign after string \"%s\" (LINE %d)\n", string, line_count); + return PROJECTM_PARSE_ERROR; + } + + /* Find the parameter associated with the string in the custom wave database */ + if ((param = ParamUtils::find(string, &custom_wave->param_tree)) == NULL) + { + if (PARSE_DEBUG) printf("parse_wave (per_frame): parameter \"%s\" not found or cannot be wipemalloc'ed!!\n", string); + return PROJECTM_FAILURE; + } + + + /* Make sure parameter is writable */ + if (param->flags & P_FLAG_READONLY) + { + if (PARSE_DEBUG) printf("parse_wave (per_frame): parameter %s is marked as read only (LINE %d)\n", param->name.c_str(), line_count); + return PROJECTM_FAILURE; + } + + /* Parse right side of equation as an expression */ + + current_wave = custom_wave; + if ((gen_expr = parse_gen_expr(fs, NULL, preset)) == NULL) + { + if (PARSE_DEBUG) printf("parse_wave (per_frame): equation evaluated to null (LINE %d)\n", line_count); + current_wave = NULL; + return PROJECTM_PARSE_ERROR; + + } + + current_wave = NULL; + + if (PARSE_DEBUG) printf("parse_wave (per_frame): [finished parsing equation] (LINE %d)\n", line_count); + + /* Create a new per frame equation */ + if ((per_frame_eqn = new PerFrameEqn(custom_wave->per_frame_count++, param, gen_expr)) == NULL) + { + if (PARSE_DEBUG) printf("parse_wave (per_frame): failed to create a new per frame eqn, out of memory?\n"); + delete gen_expr; + return PROJECTM_FAILURE; + } + + custom_wave->per_frame_eqn_tree.push_back(per_frame_eqn); + if (PARSE_DEBUG) printf("parse_wave (per_frame): equation %d associated with custom wave %d [success]\n", + per_frame_eqn->index, custom_wave->id); + + + /* Need to add stuff to string buffer so the editor can read the equations. + Why not make a nice little helper function for this? - here it is: */ + + line_mode = CUSTOM_WAVE_PER_FRAME_LINE_MODE; + return PROJECTM_SUCCESS; + } + + + /* per point equation case */ + if (!strncmp(eqn_type, PER_POINT_STRING, PER_POINT_STRING_LENGTH)) + { + + if (PARSE_DEBUG) printf("parse_wave_helper (per_point): per_pixel equation parsing start...(LINE %d)\n", line_count); + + /// HACK the parse_line code already parsed the per_pixel variable name. This handles that case + /// Parser needs reworked. Don't have time for it. So this is the result. + if (init_string) + strncpy(string, init_string, strlen(init_string)); + else + { + if (parseToken(fs, string) != tEq) + { /* parse per pixel operator name */ + if (PARSE_DEBUG) printf("parse_wave_helper (per_point): equal operator missing after per pixel operator. Last token = \"%s\" (LINE %d)\n", string, line_count); + + return PROJECTM_PARSE_ERROR; + } + } + + /* Parse right side of equation as an expression, First tell parser we are parsing a custom wave */ + current_wave = custom_wave; + if ((gen_expr = parse_gen_expr(fs, NULL, preset)) == NULL) + { + if (PARSE_DEBUG) printf("parse_wave_helper (per_point): equation evaluated to null? (LINE %d)\n", line_count); + + return PROJECTM_PARSE_ERROR; + } + + + /* Add the per point equation */ + if (custom_wave->add_per_point_eqn(string, gen_expr) < 0) + { + delete gen_expr; + + return PROJECTM_PARSE_ERROR; + } + // This tells the parser we are no longer parsing a custom wave + current_wave = NULL; + + + + line_mode = CUSTOM_WAVE_PER_POINT_LINE_MODE; + if (PARSE_DEBUG) printf("parse_wave_helper (per_point): [finished] (custom wave id = %d)\n", custom_wave->id); + return PROJECTM_SUCCESS; + } + + return PROJECTM_FAILURE; +} + +/* Parses custom shape equations */ +int Parser::parse_shape(char * token, std::istream & fs, MilkdropPreset * preset) +{ + + int id; + char * eqn_type; + CustomShape * custom_shape; + + + if (token == NULL) + + return PROJECTM_FAILURE; + if (fs == NULL) + return PROJECTM_FAILURE; + if (preset == NULL) + return PROJECTM_FAILURE; + + /* Grab custom shape id and equation type (per frame or per point) from string token */ + if (parse_shape_prefix(token, &id, &eqn_type) < 0) + { + if (PARSE_DEBUG) printf("parse_shape: syntax error in custom shape prefix!\n"); + return PROJECTM_PARSE_ERROR; + } + + /* Retrieve custom shape associated with this id */ + if ((custom_shape = MilkdropPreset::find_custom_object(id,preset->customShapes)) == NULL) + return PROJECTM_FAILURE; + + + /* per frame init equation case */ + if (!strncmp(eqn_type, SHAPE_INIT_STRING, SHAPE_INIT_STRING_LENGTH)) + { + return parse_shape_per_frame_init_eqn(fs, custom_shape, preset); + } + + /* per frame equation case */ + if (!strncmp(eqn_type, PER_FRAME_STRING_NO_UNDERSCORE, PER_FRAME_STRING_NO_UNDERSCORE_LENGTH)) + { + return parse_shape_per_frame_eqn(fs, custom_shape, preset); + } + + + /* Syntax error, return parse error */ + return PROJECTM_PARSE_ERROR; +} + +/* Helper function to update the string buffers used by the editor */ + + + +/* Helper function: returns the length of the prefix portion in the line + buffer (the passed string here). In other words, given + the string 'per_frame_1 = x = ....', return the length of 'per_frame_1 = ' + Returns -1 if syntax error +*/ + +int Parser::get_string_prefix_len(char * string) +{ + + int i = 0; + + /* Null argument check */ + if (string == NULL) + return PROJECTM_FAILURE; + + /* First find the equal sign */ + while (string[i] != '=') + { + if (string[i] == 0) + return PROJECTM_FAILURE; + i++; + } + + /* If the string already ends at the next char then give up */ + if (string[i+1] == 0) + return PROJECTM_FAILURE; + + /* Move past the equal sign */ + i++; + + /* Now found the start of the LHS variable, ie skip the spaces */ + while(string[i] == ' ') + { + i++; + } + + /* If this is the end of the string then its a syntax error */ + if (string[i] == 0) + return PROJECTM_FAILURE; + + /* Finished succesfully, return the length */ + return i; +} + +int Parser::parse_shape_per_frame_init_eqn(std::istream & fs, CustomShape * custom_shape, MilkdropPreset * preset) +{ + InitCond * init_cond; + + if (PARSE_DEBUG) printf("parse_shape (per frame init): [begin] (LINE %d)\n", line_count); + + /* Parse the per frame equation */ + if ((init_cond = parse_per_frame_init_eqn(fs, preset, &custom_shape->param_tree)) == NULL) + { + if (PARSE_DEBUG) printf("parse_shape (per frame init): equation parsing failed (LINE %d)\n", line_count); + return PROJECTM_PARSE_ERROR; + } + + /// \idea possibly a good place to update a string buffer; + + line_mode = CUSTOM_SHAPE_PER_FRAME_INIT_LINE_MODE; + init_cond->evaluate(true); + return PROJECTM_SUCCESS; +} + +int Parser::parse_shape_per_frame_eqn(std::istream & fs, CustomShape * custom_shape, MilkdropPreset * preset) +{ + + Param * param; + GenExpr * gen_expr; + PerFrameEqn * per_frame_eqn; + + char string[MAX_TOKEN_SIZE]; + + if (PARSE_DEBUG) printf("parse_shape (per_frame): [start] (custom shape id = %d)\n", custom_shape->id); + + if (parseToken(fs, string) != tEq) + { + if (PARSE_DEBUG) printf("parse_shape (per_frame): no equal sign after string \"%s\" (LINE %d)\n", string, line_count); + return PROJECTM_PARSE_ERROR; + } + + /* Find the parameter associated with the string in the custom shape database */ + if ((param = ParamUtils::find(string, &custom_shape->param_tree)) == NULL) + { + if (PARSE_DEBUG) printf("parse_shape (per_frame): parameter \"%s\" not found or cannot be wipemalloc'ed!!\n", string); + return PROJECTM_FAILURE; + } + + + /* Make sure parameter is writable */ + if (param->flags & P_FLAG_READONLY) + { + if (PARSE_DEBUG) printf("parse_shape (per_frame): parameter %s is marked as read only (LINE %d)\n", param->name.c_str(), line_count); + return PROJECTM_PARSE_ERROR; + } + + /* Parse right side of equation as an expression */ + + current_shape = custom_shape; + if ((gen_expr = parse_gen_expr(fs, NULL, preset)) == NULL) + { + if (PARSE_DEBUG) printf("parse_shape (per_frame): equation evaluated to null (LINE %d)\n", line_count); + current_shape = NULL; + return PROJECTM_PARSE_ERROR; + } + + current_shape = NULL; + + if (PARSE_DEBUG) printf("parse_shape (per_frame): [finished parsing equation] (LINE %d)\n", line_count); + + /* Create a new per frame equation */ + if ((per_frame_eqn = new PerFrameEqn(custom_shape->per_frame_count++, param, gen_expr)) == NULL) + { + if (PARSE_DEBUG) printf("parse_shape (per_frame): failed to create a new per frame eqn, out of memory?\n"); + delete gen_expr; + return PROJECTM_FAILURE; + } + + custom_shape->per_frame_eqn_tree.push_back(per_frame_eqn); + + /// \idea add string buffer update for easy >> and << + + line_mode = CUSTOM_SHAPE_PER_FRAME_LINE_MODE; + return PROJECTM_SUCCESS; +} + +int Parser::parse_wave_per_frame_eqn(std::istream & fs, CustomWave * custom_wave, MilkdropPreset * preset) +{ + + Param * param; + GenExpr * gen_expr; + PerFrameEqn * per_frame_eqn; + + char string[MAX_TOKEN_SIZE]; + + if (PARSE_DEBUG) printf("parse_wave (per_frame): [start] (custom shape id = %d)\n", custom_wave->id); + + if (parseToken(fs, string) != tEq) + { + if (PARSE_DEBUG) printf("parse_wave (per_frame): no equal sign after string \"%s\" (LINE %d)\n", string, line_count); + return PROJECTM_PARSE_ERROR; + } + + /* Find the parameter associated with the string in the custom shape database */ + if ((param = ParamUtils::find(string, &custom_wave->param_tree)) == NULL) + { + if (PARSE_DEBUG) printf("parse_wave (per_frame): parameter \"%s\" not found or cannot be wipemalloc'ed!!\n", string); + return PROJECTM_FAILURE; + } + + + /* Make sure parameter is writable */ + if (param->flags & P_FLAG_READONLY) + { + if (PARSE_DEBUG) printf("parse_wave (per_frame): parameter %s is marked as read only (LINE %d)\n", param->name.c_str(), line_count); + return PROJECTM_FAILURE; + } + + /* Parse right side of equation as an expression */ + + current_wave = custom_wave; + if ((gen_expr = parse_gen_expr(fs, NULL, preset)) == NULL) + { + if (PARSE_DEBUG) printf("parse_wave (per_frame): equation evaluated to null (LINE %d)\n", line_count); + current_wave = NULL; + return PROJECTM_PARSE_ERROR; + } + + current_wave = NULL; + + if (PARSE_DEBUG) printf("parse_wave (per_frame): [finished parsing equation] (LINE %d)\n", line_count); + + /* Create a new per frame equation */ + if ((per_frame_eqn = new PerFrameEqn(custom_wave->per_frame_count++, param, gen_expr)) == NULL) + { + if (PARSE_DEBUG) printf("parse_wave (per_frame): failed to create a new per frame eqn, out of memory?\n"); + delete gen_expr; + return PROJECTM_FAILURE; + } + + custom_wave->per_frame_eqn_tree.push_back(per_frame_eqn); + if (PARSE_DEBUG) printf("parse_wave (per_frame): equation %d associated with custom wave %d [success]\n", + per_frame_eqn->index, custom_wave->id); + + + /* Need to add stuff to string buffer so the editor can read the equations. + Why not make a nice little helper function for this? - here it is: */ + + line_mode = CUSTOM_WAVE_PER_FRAME_LINE_MODE; + return PROJECTM_SUCCESS; +} + + +bool Parser::wrapsToNextLine(const std::string & str) { + +std::size_t lastLineEndIndex = + lastLinePrefix.find_last_not_of("0123456789"); + +std::size_t thisLineEndIndex = + str.find_last_not_of("0123456789"); + +std::size_t startIndex = 0; +if ((str.compare(startIndex, lastLineEndIndex, lastLinePrefix.c_str(), thisLineEndIndex)) == 0) + return true; +else + return false; + +} diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/Parser.hpp b/3rdparty/libprojectm/MilkdropPresetFactory/Parser.hpp new file mode 100755 index 000000000..43b8d6416 --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/Parser.hpp @@ -0,0 +1,192 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id$ + * + * MilkdropPreset parser + * + * $Log$ + */ + +#ifndef _PARSER_H +#define _PARSER_H +//#define PARSE_DEBUG 2 +#define PARSE_DEBUG 0 + +#include + +#include "Expr.hpp" +#include "PerFrameEqn.hpp" +#include "InitCond.hpp" +#include "MilkdropPreset.hpp" + +/* Strings that prefix (and denote the type of) equations */ +#define PER_FRAME_STRING "per_frame_" +#define PER_FRAME_STRING_LENGTH 10 + +#define PER_PIXEL_STRING "per_pixel_" +#define PER_PIXEL_STRING_LENGTH 10 + +#define PER_FRAME_INIT_STRING "per_frame_init_" +#define PER_FRAME_INIT_STRING_LENGTH 15 + +#define WAVECODE_STRING "wavecode_" +#define WAVECODE_STRING_LENGTH 9 + +#define WAVE_STRING "wave_" +#define WAVE_STRING_LENGTH 5 + +#define PER_POINT_STRING "per_point" +#define PER_POINT_STRING_LENGTH 9 + +#define PER_FRAME_STRING_NO_UNDERSCORE "per_frame" +#define PER_FRAME_STRING_NO_UNDERSCORE_LENGTH 9 + +#define SHAPECODE_STRING "shapecode_" +#define SHAPECODE_STRING_LENGTH 10 + + +#define WARP_STRING "warp_" +#define WARP_STRING_LENGTH 5 + +#define COMPOSITE_STRING "comp_" +#define COMPOSITE_STRING_LENGTH 5 + +#define SHAPE_STRING "shape_" +#define SHAPE_STRING_LENGTH 6 + +#define SHAPE_INIT_STRING "init" +#define SHAPE_INIT_STRING_LENGTH 4 + +#define WAVE_INIT_STRING "init" +#define WAVE_INIT_STRING_LENGTH 4 + +#include + +typedef enum { + UNSET_LINE_MODE, + PER_FRAME_LINE_MODE, + PER_PIXEL_LINE_MODE, + PER_FRAME_INIT_LINE_MODE, + INIT_COND_LINE_MODE, + CUSTOM_WAVE_PER_POINT_LINE_MODE, + CUSTOM_WAVE_PER_FRAME_LINE_MODE, + CUSTOM_WAVE_WAVECODE_LINE_MODE, + CUSTOM_SHAPE_SHAPECODE_LINE_MODE, + CUSTOM_SHAPE_PER_FRAME_LINE_MODE, + CUSTOM_SHAPE_PER_FRAME_INIT_LINE_MODE, + CUSTOM_WAVE_PER_FRAME_INIT_LINE_MODE +} line_mode_t; + +/** Token enumeration type */ +typedef enum { + tEOL, /* end of a line, usually a '/n' or '/r' */ + tEOF, /* end of file */ + tLPr, /* ( */ + tRPr, /* ) */ + tLBr, /* [ */ + tRBr, /* ] */ + tEq, /* = */ + tPlus, /* + */ + tMinus, /* - */ + tMult, /* * */ + tMod, /* % */ + tDiv, /* / */ + tOr, /* | */ + tAnd, /* & */ + tComma, /* , */ + tPositive, /* + as a prefix operator */ + tNegative, /* - as a prefix operator */ + tSemiColon, /* ; */ + tStringTooLong, /* special token to indicate an invalid string length */ + tStringBufferFilled /* the string buffer for this line is maxed out */ + } token_t; + +class CustomShape; +class CustomWave; +class GenExpr; +class InfixOp; +class PerFrameEqn; +class MilkdropPreset; +class TreeExpr; + +class Parser { +public: + static std::string lastLinePrefix; + static line_mode_t line_mode; + static CustomWave *current_wave; + static CustomShape *current_shape; + static int string_line_buffer_index; + static char string_line_buffer[STRING_LINE_SIZE]; + static unsigned int line_count; + static int per_frame_eqn_count; + static int per_frame_init_eqn_count; + static int last_custom_wave_id; + static int last_custom_shape_id; + static char last_eqn_type[MAX_TOKEN_SIZE]; + static int last_token_size; + static bool tokenWrapAroundEnabled; + + static PerFrameEqn *parse_per_frame_eqn( std::istream & fs, int index, + MilkdropPreset * preset); + static int parse_per_pixel_eqn( std::istream & fs, MilkdropPreset * preset, + char * init_string); + static InitCond *parse_init_cond( std::istream & fs, char * name, MilkdropPreset * preset ); + static int parse_preset_name( std::istream & fs, char * name ); + static int parse_top_comment( std::istream & fs ); + static int parse_line( std::istream & fs, MilkdropPreset * preset ); + + static int get_string_prefix_len(char * string); + static TreeExpr * insert_gen_expr(GenExpr * gen_expr, TreeExpr ** root); + static TreeExpr * insert_infix_op(InfixOp * infix_op, TreeExpr ** root); + static token_t parseToken(std::istream & fs, char * string); + static GenExpr ** parse_prefix_args(std::istream & fs, int num_args, MilkdropPreset * preset); + static GenExpr * parse_infix_op(std::istream & fs, token_t token, TreeExpr * tree_expr, MilkdropPreset * preset); + static GenExpr * parse_sign_arg(std::istream & fs); + static int parse_float(std::istream & fs, float * float_ptr); + static int parse_int(std::istream & fs, int * int_ptr); + static int insert_gen_rec(GenExpr * gen_expr, TreeExpr * root); + static int insert_infix_rec(InfixOp * infix_op, TreeExpr * root); + static GenExpr * parse_gen_expr(std::istream & fs, TreeExpr * tree_expr, MilkdropPreset * preset); + static PerFrameEqn * parse_implicit_per_frame_eqn(std::istream & fs, char * param_string, int index, MilkdropPreset * preset); + static InitCond * parse_per_frame_init_eqn(std::istream & fs, MilkdropPreset * preset, std::map * database); + static int parse_wavecode_prefix(char * token, int * id, char ** var_string); + static int parse_wavecode(char * token, std::istream & fs, MilkdropPreset * preset); + static int parse_wave_prefix(char * token, int * id, char ** eqn_string); + static int parse_wave_helper(std::istream & fs, MilkdropPreset * preset, int id, char * eqn_type, char * init_string); + static int parse_shapecode(char * eqn_string, std::istream & fs, MilkdropPreset * preset); + static int parse_shapecode_prefix(char * token, int * id, char ** var_string); + static void parse_string_block(std::istream & fs, std::string * out_string); + static bool scanForComment(std::istream & fs); + static int parse_wave(char * eqn_string, std::istream & fs, MilkdropPreset * preset); + static int parse_shape(char * eqn_string, std::istream & fs, MilkdropPreset * preset); + static int parse_shape_prefix(char * token, int * id, char ** eqn_string); + static void readStringUntil(std::istream & fs, std::string * out_buffer, bool wrapAround = true, const std::set & skipList = std::set()) ; + + static int string_to_float(char * string, float * float_ptr); + static int parse_shape_per_frame_init_eqn(std::istream & fs, CustomShape * custom_shape, MilkdropPreset * preset); + static int parse_shape_per_frame_eqn(std::istream & fs, CustomShape * custom_shape, MilkdropPreset * preset); + static int parse_wave_per_frame_eqn(std::istream & fs, CustomWave * custom_wave, MilkdropPreset * preset); + static bool wrapsToNextLine(const std::string & str); + }; + +#endif /** !_PARSER_H */ + diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/PerFrameEqn.cpp b/3rdparty/libprojectm/MilkdropPresetFactory/PerFrameEqn.cpp new file mode 100755 index 000000000..30e23422b --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/PerFrameEqn.cpp @@ -0,0 +1,67 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2004 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ + +#include +#include +#include + +#include "fatal.h" +#include "Common.hpp" + +#include "Param.hpp" +#include "PerFrameEqn.hpp" + +#include "Eval.hpp" +#include "Expr.hpp" + +#include "wipemalloc.h" +#include + +/* Evaluate an equation */ +void PerFrameEqn::evaluate() { + + if (PER_FRAME_EQN_DEBUG) { + printf("per_frame_%d=%s= ", index, param->name.c_str()); + fflush(stdout); + } + + //*((float*)per_frame_eqn->param->engine_val) = eval_gen_expr(per_frame_eqn->gen_expr); + assert(gen_expr); + assert(param); + param->set_param(gen_expr->eval_gen_expr(-1,-1)); + + if (PER_FRAME_EQN_DEBUG) printf(" = %.4f\n", *((float*)param->engine_val)); + +} + + +/* Frees perframe equation structure. Warning: assumes gen_expr pointer is not freed by anyone else! */ +PerFrameEqn::~PerFrameEqn() { + + delete gen_expr; + + // param is freed in param_tree container of some other class + +} + +/* Create a new per frame equation */ +PerFrameEqn::PerFrameEqn(int _index, Param * _param, GenExpr * _gen_expr) : + index(_index), param(_param), gen_expr(_gen_expr) {} diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/PerFrameEqn.hpp b/3rdparty/libprojectm/MilkdropPresetFactory/PerFrameEqn.hpp new file mode 100755 index 000000000..39640805d --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/PerFrameEqn.hpp @@ -0,0 +1,53 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id$ + * + * Per-frame equation + * + * $Log$ + */ + +#ifndef _PER_FRAME_EQN_H +#define _PER_FRAME_EQN_H + +#define PER_FRAME_EQN_DEBUG 0 + +class GenExpr; +class Param; +class PerFrameEqn; + +class PerFrameEqn { +public: + int index; /* a unique id for each per frame eqn (generated by order in preset files) */ + Param *param; /* parameter to be assigned a value */ + GenExpr *gen_expr; /* expression that paremeter is equal to */ + + PerFrameEqn(int index, Param * param, GenExpr * gen_expr); + ~PerFrameEqn(); + + /// Evaluate the per frame equation + void evaluate(); + + }; + + +#endif /** !_PER_FRAME_EQN_H */ diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/PerPixelEqn.cpp b/3rdparty/libprojectm/MilkdropPresetFactory/PerPixelEqn.cpp new file mode 100755 index 000000000..68cb9135d --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/PerPixelEqn.cpp @@ -0,0 +1,74 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2004 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ + +#include +#include +#include +#include + +#include "fatal.h" +#include "Common.hpp" + +#include "Expr.hpp" +#include "Eval.hpp" +#include "Param.hpp" +#include "PerPixelEqn.hpp" +#include + +#include "wipemalloc.h" +#include +/* Evaluates a per pixel equation */ +void PerPixelEqn::evaluate(int mesh_i, int mesh_j) { + + GenExpr * eqn_ptr = 0; + + + eqn_ptr = this->gen_expr; + + float ** param_matrix = (float**)this->param->matrix; + + if (param_matrix == 0) { + assert(param->engine_val); + (*(float*)param->engine_val) = eqn_ptr->eval_gen_expr(mesh_i, mesh_j); + + } else { + + assert(!(eqn_ptr == NULL || param_matrix == NULL)); + + param_matrix[mesh_i][mesh_j] = eqn_ptr->eval_gen_expr(mesh_i, mesh_j); + + /* Now that this parameter has been referenced with a per + pixel equation, we let the evaluator know by setting + this flag */ + /// @bug review and verify this behavior + param->matrix_flag = true; + param->flags |= P_FLAG_PER_PIXEL; + } +} + +PerPixelEqn::PerPixelEqn(int _index, Param * _param, GenExpr * _gen_expr):index(_index), param(_param), gen_expr(_gen_expr) { + + assert(index >= 0); + assert(param != 0); + assert(gen_expr != 0); + +} + diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/PerPixelEqn.hpp b/3rdparty/libprojectm/MilkdropPresetFactory/PerPixelEqn.hpp new file mode 100755 index 000000000..10af5af96 --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/PerPixelEqn.hpp @@ -0,0 +1,66 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id$ + * + * Per-pixel equation + * + * $Log$ + */ + +#ifndef _PER_PIXEL_EQN_H +#define _PER_PIXEL_EQN_H + +#define PER_PIXEL_EQN_DEBUG 0 + +#define ZOOM_OP 0 +#define ZOOMEXP_OP 1 +#define ROT_OP 2 +#define CX_OP 3 +#define CY_OP 4 +#define SX_OP 5 +#define SY_OP 6 +#define DX_OP 7 +#define DY_OP 8 +#define WARP_OP 9 +#define NUM_OPS 10 /* obviously, this number is dependent on the number of existing per pixel operations */ + +class GenExpr; +class Param; +class PerPixelEqn; +class Preset; + +class PerPixelEqn { +public: + int index; /* used for splay tree ordering. */ + int flags; /* primarily to specify if this variable is user-defined */ + Param *param; + GenExpr *gen_expr; + + void evalPerPixelEqns( Preset *preset ); + void evaluate(int mesh_i, int mesh_j); + + PerPixelEqn(int index, Param * param, GenExpr * gen_expr); + + }; + + +#endif /** !_PER_PIXEL_EQN_H */ diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/PerPointEqn.cpp b/3rdparty/libprojectm/MilkdropPresetFactory/PerPointEqn.cpp new file mode 100755 index 000000000..e921916db --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/PerPointEqn.cpp @@ -0,0 +1,91 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2004 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ + +#include +#include +#include + +#include +#include "fatal.h" +#include "Common.hpp" + +#include "CustomWave.hpp" +#include "Eval.hpp" +#include "Expr.hpp" +#include "Param.hpp" +#include "PerPixelEqn.hpp" +#include "PerPointEqn.hpp" +#include +#include +#include "wipemalloc.h" + +/* Evaluates a per point equation for the current custom wave given by interface_wave ptr */ +void PerPointEqn::evaluate(int i) +{ + + float * param_matrix; + GenExpr * eqn_ptr; + + // samples = CustomWave::interface_wave->samples; + + eqn_ptr = gen_expr; + + if (param->matrix == NULL) + { + assert(param->matrix_flag == false); + (*(float*)param->engine_val) = eqn_ptr->eval_gen_expr(i,-1); + + + return; + } + + else + { + param_matrix = (float*)param->matrix; + + // -1 is because per points only use one dimension + param_matrix[i] = eqn_ptr->eval_gen_expr(i, -1); + + + /* Now that this parameter has been referenced with a per + point equation, we let the evaluator know by setting + this flag */ + + if (!param->matrix_flag) + param->matrix_flag = true; + + } + +} + +PerPointEqn::PerPointEqn(int _index, Param * _param, GenExpr * _gen_expr, int _samples): + index(_index), + samples(_samples), + param(_param), + gen_expr(_gen_expr) + +{} + + +PerPointEqn::~PerPointEqn() +{ + delete gen_expr; +} diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/PerPointEqn.hpp b/3rdparty/libprojectm/MilkdropPresetFactory/PerPointEqn.hpp new file mode 100755 index 000000000..90ba5ca1c --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/PerPointEqn.hpp @@ -0,0 +1,53 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id$ + * + * Per-point equation + * + * $Log$ + */ + +#ifndef _PER_POINT_EQN_H +#define _PER_POINT_EQN_H + +class CustomWave; +class GenExpr; +class Param; +class PerPointEqn; + +class PerPointEqn { +public: + int index; + int samples; // the number of samples to iterate over + Param *param; + GenExpr * gen_expr; + ~PerPointEqn(); + void evaluate(int i); + PerPointEqn( int index, Param *param, GenExpr *gen_expr, int samples); + }; + + +//inline void eval_per_point_eqn_helper( void *per_point_eqn ) { +// ((PerPointEqn *)per_point_eqn)->evalPerPointEqn(); +// } + +#endif /** !_PER_POINT_EQN_H */ diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/PresetFrameIO.cpp b/3rdparty/libprojectm/MilkdropPresetFactory/PresetFrameIO.cpp new file mode 100644 index 000000000..df294fc9d --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/PresetFrameIO.cpp @@ -0,0 +1,575 @@ +#include "PresetFrameIO.hpp" +#include "wipemalloc.h" +#include +#include +#include +#include "Renderer/BeatDetect.hpp" + +PresetInputs::PresetInputs() : PipelineContext() +{ +} + +void PresetInputs::update(const BeatDetect & music, const PipelineContext & context) { + + // Reflect new values form the beat detection unit + this->bass = music.bass; + this->mid = music.mid; + this->treb = music.treb; + this->bass_att = music.bass_att; + this->mid_att = music.mid_att; + this->treb_att = music.treb_att; + + // Reflect new values from the pipeline context + this->fps = context.fps; + this->time = context.time; + + this->frame = context.frame; + this->progress = context.progress; +} + +void PresetInputs::Initialize ( int gx, int gy ) +{ + int x, y; + + this->gx =gx; + this->gy= gy; + + + /// @bug no clue if this block belongs here + // *** + progress = 0; + frame = 1; + + x_per_pixel = 0; + y_per_pixel = 0; + rad_per_pixel = 0; + ang_per_pixel = 0; + // *** + + this->x_mesh= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x < gx; x++ ) + { + this->x_mesh[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + this->y_mesh= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x y_mesh[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + this->rad_mesh= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x < gx; x++ ) + { + this->rad_mesh[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + this->theta_mesh= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x theta_mesh[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + + this->origtheta= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x < gx; x++ ) + { + this->origtheta[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + this->origrad= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x < gx; x++ ) + { + this->origrad[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + this->origx= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x < gx; x++ ) + { + this->origx[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + this->origy= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x < gx; x++ ) + { + this->origy[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + + for ( x=0;xorigx[x][y]=x/ ( float ) ( gx-1 ); + this->origy[x][y]=- ( ( y/ ( float ) ( gy-1 ) )-1 ); + this->origrad[x][y]=hypot ( ( this->origx[x][y]-.5 ) *2, ( this->origy[x][y]-.5 ) *2 ) * .7071067; + this->origtheta[x][y]=atan2 ( ( ( this->origy[x][y]-.5 ) *2 ), ( ( this->origx[x][y]-.5 ) *2 ) ); + } + } + + + +} + +PresetOutputs::PresetOutputs() : Pipeline() +{} + +PresetOutputs::~PresetOutputs() +{ + assert(this->gx > 0); + + for ( int x = 0; x < this->gx; x++ ) + { + free(this->sx_mesh[x]); + free(this->sy_mesh[x]); + free(this->dy_mesh[x]); + free(this->dx_mesh[x]); + free(this->cy_mesh[x]); + free(this->cx_mesh[x]); + + free(this->warp_mesh[x]); + free(this->zoom_mesh[x]); + free(this->zoomexp_mesh[x]); + free(this->rot_mesh[x]); + free(this->orig_x[x]); + free(this->orig_y[x]); + free(this->rad_mesh[x]); + } + + free(this->rad_mesh); + free(this->sx_mesh); + free(this->sy_mesh); + free(this->dy_mesh); + free(this->dx_mesh); + free(this->cy_mesh); + free(this->cx_mesh); + free(this->warp_mesh); + free(this->zoom_mesh); + free(this->zoomexp_mesh); + free(this->rot_mesh); + free(this->orig_x); + free(this->orig_y); + +} + +void PresetOutputs::Render(const BeatDetect &music, const PipelineContext &context) +{ + PerPixelMath(context); + + drawables.clear(); + + drawables.push_back(&mv); + + for (PresetOutputs::cshape_container::iterator pos = customShapes.begin(); + pos != customShapes.end(); ++pos) + { + if( (*pos)->enabled==1) drawables.push_back((*pos)); + } + + for (PresetOutputs::cwave_container::iterator pos = customWaves.begin(); + pos != customWaves.end(); ++pos) + { + if( (*pos)->enabled==1) drawables.push_back((*pos)); + } + + drawables.push_back(&wave); + if(bDarkenCenter==1) drawables.push_back(&darkenCenter); + drawables.push_back(&border); + + compositeDrawables.clear(); + compositeDrawables.push_back(&videoEcho); + + if (bBrighten==1) + compositeDrawables.push_back(&brighten); + + if (bDarken==1) + compositeDrawables.push_back(&darken); + + if (bSolarize==1) + compositeDrawables.push_back(&solarize); + + if (bInvert==1) + compositeDrawables.push_back(&invert); +} + + +void PresetOutputs::PerPixelMath(const PipelineContext &context) +{ + + int x, y; + float fZoom2, fZoom2Inv; + + for (x = 0; x < gx; x++) + { + for (y = 0; y < gy; y++) + { + fZoom2 = powf(this->zoom_mesh[x][y], powf(this->zoomexp_mesh[x][y], + rad_mesh[x][y] * 2.0f - 1.0f)); + fZoom2Inv = 1.0f / fZoom2; + this->x_mesh[x][y] = this->orig_x[x][y] * 0.5f * fZoom2Inv + 0.5f; + this->y_mesh[x][y] = this->orig_y[x][y] * 0.5f * fZoom2Inv + 0.5f; + } + } + + for (x = 0; x < gx; x++) + { + for (y = 0; y < gy; y++) + { + this->x_mesh[x][y] = (this->x_mesh[x][y] - this->cx_mesh[x][y]) + / this->sx_mesh[x][y] + this->cx_mesh[x][y]; + } + } + + for (x = 0; x < gx; x++) + { + for (y = 0; y < gy; y++) + { + this->y_mesh[x][y] = (this->y_mesh[x][y] - this->cy_mesh[x][y]) + / this->sy_mesh[x][y] + this->cy_mesh[x][y]; + } + } + + float fWarpTime = context.time * this->fWarpAnimSpeed; + float fWarpScaleInv = 1.0f / this->fWarpScale; + float f[4]; + f[0] = 11.68f + 4.0f * cosf(fWarpTime * 1.413f + 10); + f[1] = 8.77f + 3.0f * cosf(fWarpTime * 1.113f + 7); + f[2] = 10.54f + 3.0f * cosf(fWarpTime * 1.233f + 3); + f[3] = 11.49f + 4.0f * cosf(fWarpTime * 0.933f + 5); + + for (x = 0; x < gx; x++) + { + for (y = 0; y < gy; y++) + { + this->x_mesh[x][y] += this->warp_mesh[x][y] * 0.0035f * sinf(fWarpTime * 0.333f + + fWarpScaleInv * (this->orig_x[x][y] * f[0] - this->orig_y[x][y] * f[3])); + this->y_mesh[x][y] += this->warp_mesh[x][y] * 0.0035f * cosf(fWarpTime * 0.375f + - fWarpScaleInv * (this->orig_x[x][y] * f[2] + this->orig_y[x][y] * f[1])); + this->x_mesh[x][y] += this->warp_mesh[x][y] * 0.0035f * cosf(fWarpTime * 0.753f + - fWarpScaleInv * (this->orig_x[x][y] * f[1] - this->orig_y[x][y] * f[2])); + this->y_mesh[x][y] += this->warp_mesh[x][y] * 0.0035f * sinf(fWarpTime * 0.825f + + fWarpScaleInv * (this->orig_x[x][y] * f[0] + this->orig_y[x][y] * f[3])); + } + } + for (x = 0; x < gx; x++) + { + for (y = 0; y < gy; y++) + { + float u2 = this->x_mesh[x][y] - this->cx_mesh[x][y]; + float v2 = this->y_mesh[x][y] - this->cy_mesh[x][y]; + + float cos_rot = cosf(this->rot_mesh[x][y]); + float sin_rot = sinf(this->rot_mesh[x][y]); + + this->x_mesh[x][y] = u2 * cos_rot - v2 * sin_rot + this->cx_mesh[x][y]; + this->y_mesh[x][y] = u2 * sin_rot + v2 * cos_rot + this->cy_mesh[x][y]; + + } + } + + for (x = 0; x < gx; x++) + for (y = 0; y < gy; y++) + this->x_mesh[x][y] -= this->dx_mesh[x][y]; + + for (x = 0; x < gx; x++) + for (y = 0; y < gy; y++) + this->y_mesh[x][y] -= this->dy_mesh[x][y]; + +} + + +void PresetOutputs::Initialize ( int gx, int gy ) +{ + + assert(gx > 0); + this->gx = gx; + this->gy= gy; + + staticPerPixel = true; + setStaticPerPixel(gx,gy); + + assert(this->gx > 0); + int x; + this->x_mesh= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x < gx; x++ ) + { + this->x_mesh[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + this->y_mesh= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x < gx; x++ ) + { + this->y_mesh[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + this->sx_mesh= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x < gx; x++ ) + { + this->sx_mesh[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + this->sy_mesh= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x < gx; x++ ) + { + this->sy_mesh[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + this->dx_mesh= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x < gx; x++ ) + { + this->dx_mesh[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + this->dy_mesh= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x < gx; x++ ) + { + this->dy_mesh[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + this->cx_mesh= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x < gx; x++ ) + { + this->cx_mesh[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + this->cy_mesh= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x < gx; x++ ) + { + this->cy_mesh[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + this->zoom_mesh= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x < gx; x++ ) + { + this->zoom_mesh[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + this->zoomexp_mesh= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x < gx; x++ ) + { + this->zoomexp_mesh[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + this->rot_mesh= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x < gx; x++ ) + { + this->rot_mesh[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + + this->warp_mesh= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x < gx; x++ ) + { + this->warp_mesh[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + this->rad_mesh= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( x = 0; x < gx; x++ ) + { + this->rad_mesh[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + this->orig_x = (float **) wipemalloc(gx * sizeof(float *)); + for (x = 0; x < gx; x++) + { + this->orig_x[x] = (float *) wipemalloc(gy * sizeof(float)); + } + this->orig_y = (float **) wipemalloc(gx * sizeof(float *)); + for (x = 0; x < gx; x++) + { + this->orig_y[x] = (float *) wipemalloc(gy * sizeof(float)); + } + + //initialize reference grid values + for (x = 0; x < gx; x++) + { + for (int y = 0; y < gy; y++) + { + float origx = x / (float) (gx - 1); + float origy = -((y / (float) (gy - 1)) - 1); + + rad_mesh[x][y]=hypot ( ( origx-.5 ) *2, ( origy-.5 ) *2 ) * .7071067; + orig_x[x][y] = (origx - .5) * 2; + orig_y[x][y] = (origy - .5) * 2; + } + } +} + +PresetInputs::~PresetInputs() +{ + for ( int x = 0; x < this->gx; x++ ) + { + + + free ( this->origtheta[x] ); + free ( this->origrad[x] ); + free ( this->origx[x] ); + free ( this->origy[x] ); + + free ( this->x_mesh[x] ); + free ( this->y_mesh[x] ); + free ( this->rad_mesh[x] ); + free ( this->theta_mesh[x] ); + + } + + + free ( this->origx ); + free ( this->origy ); + free ( this->origrad ); + free ( this->origtheta ); + + free ( this->x_mesh ); + free ( this->y_mesh ); + free ( this->rad_mesh ); + free ( this->theta_mesh ); + + this->origx = NULL; + this->origy = NULL; + this->origtheta = NULL; + this->origrad = NULL; + + this->x_mesh = NULL; + this->y_mesh = NULL; + this->rad_mesh = NULL; + this->theta_mesh = NULL; +} + + +void PresetInputs::resetMesh() +{ + int x,y; + + assert ( x_mesh ); + assert ( y_mesh ); + assert ( rad_mesh ); + assert ( theta_mesh ); + + for ( x=0;xgx;x++ ) + { + for ( y=0;ygy;y++ ) + { + x_mesh[x][y]=this->origx[x][y]; + y_mesh[x][y]=this->origy[x][y]; + rad_mesh[x][y]=this->origrad[x][y]; + theta_mesh[x][y]=this->origtheta[x][y]; + } + } + +} + + +#ifdef USE_MERGE_PRESET_CODE +void PresetMerger::MergePresets(PresetOutputs & A, PresetOutputs & B, double ratio, int gx, int gy) +{ + +double invratio = 1.0 - ratio; + //Merge Simple Waveforms + // + // All the mess is because of Waveform 7, which is two lines. + // + + + //Merge Custom Shapes and Custom Waves + + for (PresetOutputs::cshape_container::iterator pos = A.customShapes.begin(); + pos != A.customShapes.end(); ++pos) + { + (*pos)->a *= invratio; + (*pos)->a2 *= invratio; + (*pos)->border_a *= invratio; + } + + for (PresetOutputs::cshape_container::iterator pos = B.customShapes.begin(); + pos != B.customShapes.end(); ++pos) + { + (*pos)->a *= ratio; + (*pos)->a2 *= ratio; + (*pos)->border_a *= ratio; + + A.customShapes.push_back(*pos); + + } + for (PresetOutputs::cwave_container::iterator pos = A.customWaves.begin(); + pos != A.customWaves.end(); ++pos) + { + (*pos)->a *= invratio; + for (int x=0; x < (*pos)->samples; x++) + { + (*pos)->a_mesh[x]= (*pos)->a_mesh[x]*invratio; + } + } + + for (PresetOutputs::cwave_container::iterator pos = B.customWaves.begin(); + pos != B.customWaves.end(); ++pos) + { + (*pos)->a *= ratio; + for (int x=0; x < (*pos)->samples; x++) + { + (*pos)->a_mesh[x]= (*pos)->a_mesh[x]*ratio; + } + A.customWaves.push_back(*pos); + } + + + //Interpolate Per-Pixel mesh + + for (int x=0;x 0.5) + { + A.videoEcho.orientation = B.videoEcho.orientation; + A.textureWrap = B.textureWrap; + A.bDarkenCenter = B.bDarkenCenter; + A.bRedBlueStereo = B.bRedBlueStereo; + A.bBrighten = B.bBrighten; + A.bDarken = B.bDarken; + A.bSolarize = B.bSolarize; + A.bInvert = B.bInvert; + A.bMotionVectorsOn = B.bMotionVectorsOn; + } + + return; +} +#endif diff --git a/3rdparty/libprojectm/MilkdropPresetFactory/PresetFrameIO.hpp b/3rdparty/libprojectm/MilkdropPresetFactory/PresetFrameIO.hpp new file mode 100644 index 000000000..229879c2f --- /dev/null +++ b/3rdparty/libprojectm/MilkdropPresetFactory/PresetFrameIO.hpp @@ -0,0 +1,144 @@ +#ifndef PRESET_FRAME_IO_HPP +#define PRESET_FRAME_IO_HPP +#include +#include "Renderer/MilkdropWaveform.hpp" +#include "Renderer/Pipeline.hpp" +#include "Renderer/Filters.hpp" +#include "CustomShape.hpp" +#include "CustomWave.hpp" +#include "Renderer/VideoEcho.hpp" + + +/// Container for all *read only* engine variables a preset requires to +/// evaluate milkdrop equations. Every preset object needs a reference to one of these. +class PresetInputs : public PipelineContext { + +public: + /* PER_PIXEL VARIBLES BEGIN */ + + float x_per_pixel; + float y_per_pixel; + float rad_per_pixel; + float ang_per_pixel; + + /* PER_PIXEL VARIBLES END */ + + float bass; + float mid; + float treb; + float bass_att; + float mid_att; + float treb_att; + + /* variables were added in milkdrop 1.04 */ + int gx, gy; + + float **x_mesh; + float **y_mesh; + float **rad_mesh; + float **theta_mesh; + + float **origtheta; //grid containing interpolated mesh reference values + float **origrad; + float **origx; //original mesh + float **origy; + + void resetMesh(); + + ~PresetInputs(); + PresetInputs(); + + /// Initializes this preset inputs given a mesh size. + /// \param gx the width of the mesh + /// \param gy the height of the mesh + /// \note This must be called before reading values from this class + void Initialize(int gx, int gy); + + /// Updates this preset inputs with the latest values from the + /// the pipeline context and beat detection unit + void update (const BeatDetect & music, const PipelineContext & context); + + private: +}; + + +/// Container class for all preset writeable engine variables. This is the important glue +/// between the presets and renderer to facilitate smooth preset switching +/// Every preset object needs a reference to one of these. +class PresetOutputs : public Pipeline { +public: + typedef std::vector cwave_container; + typedef std::vector cshape_container; + + cwave_container customWaves; + cshape_container customShapes; + + void Initialize(int gx, int gy); + PresetOutputs(); + ~PresetOutputs(); + virtual void Render(const BeatDetect &music, const PipelineContext &context); + void PerPixelMath( const PipelineContext &context); + /* PER FRAME VARIABLES BEGIN */ + + float zoom; + float zoomexp; + float rot; + float warp; + + float sx; + float sy; + float dx; + float dy; + float cx; + float cy; + + VideoEcho videoEcho; + + MilkdropWaveform wave; + Border border; + MotionVectors mv; + DarkenCenter darkenCenter; + + Brighten brighten; + Darken darken; + Invert invert; + Solarize solarize; + + + int gy,gx; + /* PER_FRAME VARIABLES END */ + + float fRating; + float fGammaAdj; + + bool bDarkenCenter; + bool bRedBlueStereo; + bool bBrighten; + bool bDarken; + bool bSolarize; + bool bInvert; + bool bMotionVectorsOn; + + float fWarpAnimSpeed; + float fWarpScale; + float fShader; + + float **zoom_mesh; + float **zoomexp_mesh; + float **rot_mesh; + + float **sx_mesh; + float **sy_mesh; + float **dx_mesh; + float **dy_mesh; + float **cx_mesh; + float **cy_mesh; + float **warp_mesh; + + float **orig_x; //original mesh + float **orig_y; + float **rad_mesh; +}; + + +#endif diff --git a/3rdparty/libprojectm/NativePresetFactory/CMakeLists.txt b/3rdparty/libprojectm/NativePresetFactory/CMakeLists.txt new file mode 100644 index 000000000..c9932a5da --- /dev/null +++ b/3rdparty/libprojectm/NativePresetFactory/CMakeLists.txt @@ -0,0 +1,23 @@ +PROJECT(NativePresetFactory) +cmake_minimum_required(VERSION 2.4.0) + + if(COMMAND cmake_policy) + cmake_policy(SET CMP0003 NEW) + endif(COMMAND cmake_policy) + +SET(NativePresetFactory_SOURCES NativePresetFactory.cpp) + +IF(NOT MSVC) + SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") +ENDIF(NOT MSVC) + +if(MSVC) + SET (MATH_LIBRARIES ) +else(MSVC) + SET (MATH_LIBRARIES m) +endif(MSVC) + +INCLUDE_DIRECTORIES(${projectM_SOURCE_DIR} ${Renderer_SOURCE_DIR}) +ADD_LIBRARY(NativePresetFactory STATIC ${NativePresetFactory_SOURCES}) +SET_TARGET_PROPERTIES(NativePresetFactory PROPERTIES VERSION 2.00 SOVERSION 2) +TARGET_LINK_LIBRARIES(NativePresetFactory Renderer ${MATH_LIBRARIES}) diff --git a/3rdparty/libprojectm/NativePresetFactory/MilkdropCompatability.hpp b/3rdparty/libprojectm/NativePresetFactory/MilkdropCompatability.hpp new file mode 100644 index 000000000..f5517e147 --- /dev/null +++ b/3rdparty/libprojectm/NativePresetFactory/MilkdropCompatability.hpp @@ -0,0 +1,42 @@ +/* + * MilkdropCompatability.hpp + * + * Created on: Jun 18, 2008 + * Author: pete + */ + +#ifndef MILKDROPCOMPATABILITY_HPP_ +#define MILKDROPCOMPATABILITY_HPP_ + +inline float sign(float a) +{ + return a < 0.0 ? -1.0 : 1.0; +} + +inline float above(float a, float b) +{ + return a > b ? 1 : 0; +} +inline float equal(float a, float b) +{ + return a == b ? 1 : 0; +} +inline float below(float a, float b) +{ + return a < b ? 1 : 0; +} +inline float min(float a, float b) +{ + return a < b ? a : b; +} + +inline float max(float a, float b) +{ + return a > b ? a : b; +} + +inline float if_milk(float a, float b, float c) +{ + return (a==1.0) ? b : c; +} +#endif /* MILKDROPCOMPATABILITY_HPP_ */ diff --git a/3rdparty/libprojectm/NativePresetFactory/NativePreset.hpp b/3rdparty/libprojectm/NativePresetFactory/NativePreset.hpp new file mode 100644 index 000000000..6b2d6cf38 --- /dev/null +++ b/3rdparty/libprojectm/NativePresetFactory/NativePreset.hpp @@ -0,0 +1,38 @@ +/* + * Preset.hpp + * + * Created on: Aug 5, 2008 + * Author: carm + */ + +#ifndef __NATIVE_PRESET_HPP_ +#define __NATIVE_PRESET_HPP_ + +#include + +#include "BeatDetect.hpp" +#include "Pipeline.hpp" +#include "PipelineContext.hpp" +#include "Preset.hpp" + +/// A templated preset class to build different various hard coded presets and +/// compile them into object files to be loaded into a playlist +template +class NativePreset : public Preset { +public: + + inline NativePreset(const std::string & name=std::string(), + const std::string & author = std::string()) : Preset(name, author) {} + + virtual ~NativePreset() {} + + inline PipelineT & pipeline() { return _pipeline; } + inline virtual void Render(const BeatDetect &music, const PipelineContext &context) { + _pipeline.Render(music, context); + } + +private: + PipelineT _pipeline; +}; + +#endif diff --git a/3rdparty/libprojectm/NativePresetFactory/NativePresetFactory.cpp b/3rdparty/libprojectm/NativePresetFactory/NativePresetFactory.cpp new file mode 100644 index 000000000..5306a8390 --- /dev/null +++ b/3rdparty/libprojectm/NativePresetFactory/NativePresetFactory.cpp @@ -0,0 +1,116 @@ +// +// C++ Implementation: NativePresetFactory +// +// Description: +// +// +// Author: Carmelo Piccione , (C) 2008 +// +// Copyright: See COPYING file that comes with this distribution +// +// + +#include +#include "NativePresetFactory.hpp" + +typedef void Handle; +typedef void DestroyFunctor(Preset*); +typedef Preset * CreateFunctor(const char * url); + +class LibraryPreset : public Preset { +public: + LibraryPreset(Preset * preset, DestroyFunctor * destroyFun) : Preset(preset->name(), preset->author()), _internalPreset(preset), _destroyFunctor(destroyFun) {} + inline Pipeline & pipeline() { return _internalPreset->pipeline(); } + inline virtual ~LibraryPreset() { _destroyFunctor(_internalPreset); } + inline void Render(const BeatDetect &music, const PipelineContext &context) { + return _internalPreset->Render(music, context); + } +private: + Preset * _internalPreset; + DestroyFunctor * _destroyFunctor; +}; + +class PresetLibrary { + + public: + PresetLibrary(Handle * h, CreateFunctor * create, DestroyFunctor * destroy) : + _handle(h), _createFunctor(create), _destroyFunctor(destroy) {} + + Handle * handle() { return _handle; } + CreateFunctor * createFunctor() { return _createFunctor; } + DestroyFunctor * destroyFunctor() { return _destroyFunctor; } + + ~PresetLibrary() { + dlclose(handle()); + } + + private: + Handle * _handle; + CreateFunctor * _createFunctor; + DestroyFunctor * _destroyFunctor; + +}; + +NativePresetFactory::NativePresetFactory() {} + +NativePresetFactory::~NativePresetFactory() { + +for (PresetLibraryMap::iterator pos = _libraries.begin(); pos != _libraries.end(); ++pos) { + std::cerr << "deleting preset library" << std::endl; + delete(pos->second); +} + + +} + +PresetLibrary * NativePresetFactory::loadLibrary(const std::string & url) { + + if (_libraries.count(url)) + return _libraries[url]; + + // load the preset library + void* handle = dlopen(url.c_str(), RTLD_LAZY); + if (!handle) { + std::cerr << "[NativePresetFactory] Cannot load library: " << dlerror() << '\n'; + return 0; + } + + // reset errors + dlerror(); + + // load the symbols + CreateFunctor * create = (CreateFunctor*) dlsym(handle, "create"); + const char * dlsym_error = dlerror(); + if (dlsym_error) { + std::cerr << "[NativePresetFactory] Cannot load symbol create: " << dlsym_error << '\n'; + return 0; + } + + DestroyFunctor * destroy = (DestroyFunctor*) dlsym(handle, "destroy"); + dlsym_error = dlerror(); + if (dlsym_error) { + std::cerr << "[NativePresetFactory] Cannot load symbol destroy: " << dlsym_error << '\n'; + return 0; + } + + std::cerr << "[NativePresetFactory] creating preset library from url " << url << std::endl; + + PresetLibrary * library = new PresetLibrary(handle, create, destroy); + + _libraries.insert(std::make_pair(url, library)); + return library; +} + + +std::auto_ptr NativePresetFactory::allocate + (const std::string & url, const std::string & name, const std::string & author) { + + PresetLibrary * library; + + if ((library = loadLibrary(url)) == 0) + return std::auto_ptr(0); + + return std::auto_ptr(new LibraryPreset + (library->createFunctor()(url.c_str()), library->destroyFunctor())); + +} diff --git a/3rdparty/libprojectm/NativePresetFactory/NativePresetFactory.hpp b/3rdparty/libprojectm/NativePresetFactory/NativePresetFactory.hpp new file mode 100644 index 000000000..3e8febd4c --- /dev/null +++ b/3rdparty/libprojectm/NativePresetFactory/NativePresetFactory.hpp @@ -0,0 +1,41 @@ +// +// C++ Interface: NativePresetFactory +// +// Description: +// +// +// Author: Carmelo Piccione , (C) 2008 +// +// Copyright: See COPYING file that comes with this distribution +// +// + +#ifndef __NATIVE_PRESET_FACTORY_HPP +#define __NATIVE_PRESET_FACTORY_HPP + +#include +#include "PresetFactory.hpp" + +class PresetLibrary; + +class NativePresetFactory : public PresetFactory { + +public: + + NativePresetFactory(); + + virtual ~NativePresetFactory(); + + virtual std::auto_ptr allocate(const std::string & url, const std::string & name = std::string(), + const std::string & author = std::string()); + + virtual std::string supportedExtensions() const { return "so"; } + +private: + PresetLibrary * loadLibrary(const std::string & url); + typedef std::map PresetLibraryMap; + PresetLibraryMap _libraries; + +}; + +#endif diff --git a/3rdparty/libprojectm/PCM.cpp b/3rdparty/libprojectm/PCM.cpp new file mode 100755 index 000000000..5ce9d9a71 --- /dev/null +++ b/3rdparty/libprojectm/PCM.cpp @@ -0,0 +1,361 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2004 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id: PCM.c,v 1.3 2006/03/13 20:35:26 psperl Exp $ + * + * Takes sound data from wherever and hands it back out. + * Returns PCM Data or spectrum data, or the derivative of the PCM data + */ + +#include +#include + +#include "Common.hpp" +#include "wipemalloc.h" +#include "fftsg.h" +#include "PCM.hpp" +#include + +int PCM::maxsamples = 2048; + +//initPCM(int samples) +// +//Initializes the PCM buffer to +// number of samples specified. +#include +PCM::PCM() { + initPCM( 2048 ); + + #ifdef DEBUG + std::cerr << "[PCM] MAX SAMPLES:" << maxsamples << std::endl; + #endif + } + +void PCM::initPCM(int samples) { + int i; + + waveSmoothing = 0; + + //Allocate memory for PCM data buffer + assert(samples == 2048); + PCMd = (float **)wipemalloc(2 * sizeof(float *)); + PCMd[0] = (float *)wipemalloc(samples * sizeof(float)); + PCMd[1] = (float *)wipemalloc(samples * sizeof(float)); + + //maxsamples=samples; + newsamples=0; + numsamples = maxsamples; + + //Initialize buffers to 0 + for (i=0;imaxsamples = 2048; +// this->numsamples = 0; +// this->pcmdataL = NULL; +// this->pcmdataR = NULL; + + /** Allocate PCM data structures */ + pcmdataL=(float *)wipemalloc(this->maxsamples*sizeof(float)); + pcmdataR=(float *)wipemalloc(this->maxsamples*sizeof(float)); + +} + +PCM::~PCM() { + + free(pcmdataL); + free(pcmdataR); + free(w); + free(ip); + + free(PCMd[0]); + free(PCMd[1]); + free(PCMd); + +} + +#include + +void PCM::addPCMfloat(const float *PCMdata, int samples) +{ + int i,j; + + for(i=0;imaxsamples) newsamples=maxsamples; + numsamples = getPCMnew(pcmdataR,1,0,waveSmoothing,0,0); + getPCMnew(pcmdataL,0,0,waveSmoothing,0,1); + getPCM(vdataL,512,0,1,0,0); + getPCM(vdataR,512,1,1,0,0); +} + +void PCM::addPCM16Data(const short* pcm_data, short samples) { + int i, j; + + for (i = 0; i < samples; ++i) { + j=i+start; + PCMd[0][j % maxsamples]=(pcm_data[i * 2 + 0]/16384.0); + PCMd[1][j % maxsamples]=(pcm_data[i * 2 + 1]/16384.0); + } + + start = (start + samples) % maxsamples; + + newsamples+=samples; + if (newsamples>maxsamples) newsamples=maxsamples; + numsamples = getPCMnew(pcmdataR,1,0,waveSmoothing,0,0); + getPCMnew(pcmdataL,0,0,waveSmoothing,0,1); + getPCM(vdataL,512,0,1,0,0); + getPCM(vdataR,512,1,1,0,0); +} + + +void PCM::addPCM16(short PCMdata[2][512]) +{ + int i,j; + int samples=512; + + for(i=0;imaxsamples) newsamples=maxsamples; + + numsamples = getPCMnew(pcmdataR,1,0,waveSmoothing,0,0); + getPCMnew(pcmdataL,0,0,waveSmoothing,0,1); + getPCM(vdataL,512,0,1,0,0); + getPCM(vdataR,512,1,1,0,0); +} + + +void PCM::addPCM8( unsigned char PCMdata[2][1024]) +{ + int i,j; + int samples=1024; + + + for(i=0;imaxsamples) newsamples=maxsamples; + numsamples = getPCMnew(pcmdataR,1,0,waveSmoothing,0,0); + getPCMnew(pcmdataL,0,0,waveSmoothing,0,1); + getPCM(vdataL,512,0,1,0,0); + getPCM(vdataR,512,1,1,0,0); +} + +void PCM::addPCM8_512( const unsigned char PCMdata[2][512]) +{ + int i,j; + int samples=512; + + + for(i=0;imaxsamples) newsamples=maxsamples; + numsamples = getPCMnew(pcmdataR,1,0,waveSmoothing,0,0); + getPCMnew(pcmdataL,0,0,waveSmoothing,0,1); + getPCM(vdataL,512,0,1,0,0); + getPCM(vdataR,512,1,1,0,0); +} + + +//puts sound data requested at provided pointer +// +//samples is number of PCM samples to return +//freq = 0 gives PCM data +//freq = 1 gives FFT data +//smoothing is the smoothing coefficient + +//returned values are normalized from -1 to 1 + +void PCM::getPCM(float *PCMdata, int samples, int channel, int freq, float smoothing, int derive) +{ + int i,index; + + index=start-1; + + if (index<0) index=maxsamples+index; + + PCMdata[0]=PCMd[channel][index]; + + for(i=1;i::const_iterator pos = a.drawables.begin(); + pos != a.drawables.end(); ++pos ) + { + ( *pos )->masterAlpha = invratio; + out.drawables.push_back ( *pos ); + } + + for ( std::vector::const_iterator pos = b.drawables.begin(); + pos != b.drawables.end();++pos ) + { + ( *pos )->masterAlpha = ratio; + out.drawables.push_back ( *pos ); + } + + if(ratio < 0.5) + { + const double local_ratio = (invratio - 0.5) * 2; + + for (std::vector::const_iterator pos = a.compositeDrawables.begin(); + pos != a.compositeDrawables.end(); ++pos) + { + (*pos)->masterAlpha = local_ratio; + out.compositeDrawables.push_back(*pos); + } + } + else + { + const double local_ratio = (ratio - 0.5) * 2; + + for (std::vector::const_iterator pos = b.compositeDrawables.begin(); + pos != b.compositeDrawables.end();++pos) + { + (*pos)->masterAlpha = local_ratio; + out.compositeDrawables.push_back(*pos); + } + } + + /* + for (RenderItemMatchList::iterator pos = results.matches.begin(); pos != results.matches.end(); ++pos) { + + RenderItem * itemA = pos->first; + RenderItem * itemB = pos->second; + + RenderItem * itemC = mergeFunction(itemA, itemB, ratio); + + if (itemC == 0) { + itemA->masterAlpha = ratio; + out.drawables.push_back(itemA); + itemB->masterAlpha = invratio; + out.drawables.push_back(itemB); + } else + out.drawables.push_back(itemC); + + } + + + for (std::vector::const_iterator pos = results.unmatchedLeft.begin(); + pos != results.unmatchedLeft.end(); ++pos) + { + (*pos)->masterAlpha = invratio; + out.drawables.push_back(*pos); + } + + for (std::vector::const_iterator pos = results.unmatchedRight.begin(); + pos != results.unmatchedRight.end(); ++pos) + { + (*pos)->masterAlpha = ratio; + out.drawables.push_back(*pos); + } + */ + + if (a.staticPerPixel && b.staticPerPixel) + { + out.staticPerPixel = true; + for (int x=0;x inline static T lerp(T a, T b, float ratio) +{ + return a * ratio + b * (1 - ratio); +} + +public: + + static void mergePipelines(const Pipeline &a, const Pipeline &b, Pipeline &out, + RenderItemMatcher::MatchResults & matching, RenderItemMergeFunction & merger, float ratio); + +private : + +static const double s; +static const double e; + +}; + + +#endif diff --git a/3rdparty/libprojectm/Preset.cpp b/3rdparty/libprojectm/Preset.cpp new file mode 100755 index 000000000..84e823af6 --- /dev/null +++ b/3rdparty/libprojectm/Preset.cpp @@ -0,0 +1,23 @@ +/* + * Preset.cpp + * + * Created on: Aug 5, 2008 + * Author: struktured + */ + +#include "Preset.hpp" + +Preset::~Preset() {} + +Preset::Preset(const std::string & presetName, const std::string & presetAuthor): + _name(presetName), _author(presetAuthor) {} + +void Preset::setName(const std::string & value) { _name = value; } + +const std::string & Preset::name() const { return _name; } + +void Preset::setAuthor(const std::string & value) { _author = value; } + +const std::string & Preset::author() const { return _author; } + + diff --git a/3rdparty/libprojectm/Preset.hpp b/3rdparty/libprojectm/Preset.hpp new file mode 100644 index 000000000..4171e9757 --- /dev/null +++ b/3rdparty/libprojectm/Preset.hpp @@ -0,0 +1,38 @@ +/* + * Preset.hpp + * + * Created on: Aug 5, 2008 + * Author: carm + */ + +#ifndef PRESET_HPP_ +#define PRESET_HPP_ + +#include + +#include "Renderer/BeatDetect.hpp" +#include "Renderer/Pipeline.hpp" +#include "Renderer/PipelineContext.hpp" + +class Preset { +public: + + + Preset(const std::string & name=std::string(), const std::string & author = std::string()); + virtual ~Preset(); + + void setName(const std::string & value); + const std::string & name() const; + + void setAuthor(const std::string & value); + const std::string & author() const; + + virtual Pipeline & pipeline() = 0; + virtual void Render(const BeatDetect &music, const PipelineContext &context) = 0; + +private: + std::string _name; + std::string _author; +}; + +#endif /* PRESET_HPP_ */ diff --git a/3rdparty/libprojectm/PresetChooser.cpp b/3rdparty/libprojectm/PresetChooser.cpp new file mode 100644 index 000000000..b2397590e --- /dev/null +++ b/3rdparty/libprojectm/PresetChooser.cpp @@ -0,0 +1,14 @@ +// +// C++ Implementation: PresetChooser +// +// Description: +// +// +// Author: Carmelo Piccione , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// + +#include "PresetChooser.hpp" + diff --git a/3rdparty/libprojectm/PresetChooser.hpp b/3rdparty/libprojectm/PresetChooser.hpp new file mode 100644 index 000000000..ab88b2a6e --- /dev/null +++ b/3rdparty/libprojectm/PresetChooser.hpp @@ -0,0 +1,241 @@ +#ifndef PRESET_CHOOSER_HPP +#define PRESET_CHOOSER_HPP + +#include "Preset.hpp" + +#include "PresetLoader.hpp" +#include "RandomNumberGenerators.hpp" +#include +#include +#include +class PresetChooser; + +/// A simple iterator class to traverse back and forth a preset directory +class PresetIterator { + +public: + PresetIterator() {} + + /// Instantiate a preset iterator at the given starting position + PresetIterator(std::size_t start); + + /// Move iterator forward + void operator++(); + + /// Move iterator backword + void operator--() ; + + /// Not equal comparator + bool operator !=(const PresetIterator & presetPos) const ; + + /// Equality comparator + bool operator ==(const PresetIterator & presetPos) const ; + + /// Returns an integer value representing the iterator position + /// @bug might become internal + /// \brief Returns the indexing value used by the current iterator. + std::size_t operator*() const; + + /// Allocate a new preset given this iterator's associated preset name + /// \param presetInputs the preset inputs to associate with the preset upon construction + /// \param presetOutputs the preset outputs to associate with the preset upon construction + /// \returns an autopointer of the newly allocated preset + std::auto_ptr allocate(); + + /// Set the chooser asocciated with this iterator + void setChooser(const PresetChooser & chooser); + +private: + std::size_t _currentIndex; + const PresetChooser * _presetChooser; + +}; + +/// Provides functions and iterators to select presets. Requires a preset loader upon construction +class PresetChooser { + +public: + typedef PresetIterator iterator; + + /// Initializes a chooser with an established preset loader. + /// \param presetLoader an initialized preset loader to choose presets from + /// \note The preset loader is refreshed via events or otherwise outside this class's scope + PresetChooser(const PresetLoader & presetLoader, bool softCutRatingsEnabled); + + inline void setSoftCutRatingsEnabled(bool enabled) { + _softCutRatingsEnabled = enabled; + } + + /// Choose a preset via the passed in index. Must be between 0 and num valid presets in directory + /// \param index An index lying in the interval [0, this->getNumPresets()) + /// \param presetInputs the preset inputs to associate with the preset upon construction + /// \param presetOutputs the preset outputs to associate with the preset upon construction + /// \returns an auto pointer of the newly allocated preset + std::auto_ptr directoryIndex(std::size_t index) const; + + /// Gets the number of presets last believed to exist in the preset loader's filename collection + /// \returns the number of presets in the collection + std::size_t size() const; + + /// An STL-esque iterator to begin traversing presets from a directory + /// \param index the index to begin iterating at. Assumed valid between [0, num presets) + /// \returns the position of the first preset in the collection + PresetIterator begin(unsigned int index) const; + + /// An STL-esque iterator to begin traversing presets from a directory + /// \returns the position of the first preset in the collection + PresetIterator begin(); + + /// An STL-esque iterator to retrieve an end position from a directory + /// \returns the end position of the collection + PresetIterator end() const; + + /// Perform a weighted sample to select a preset (uses preset rating values) + /// \returns an iterator to the randomly selected preset + iterator weightedRandom(bool hardCut) const; + + /// True if no presets in directory + bool empty() const; + + + inline void nextPreset(PresetIterator & presetPos); + inline void previousPreset(PresetIterator & presetPos); + +private: + std::vector sampleWeights; + const PresetLoader * _presetLoader; + bool _softCutRatingsEnabled; +}; + + +inline PresetChooser::PresetChooser(const PresetLoader & presetLoader, bool softCutRatingsEnabled):_presetLoader(&presetLoader), _softCutRatingsEnabled(softCutRatingsEnabled) { + +} + +inline std::size_t PresetChooser::size() const { + return _presetLoader->size(); +} + +inline void PresetIterator::setChooser(const PresetChooser & chooser) { + _presetChooser = &chooser; +} + +inline std::size_t PresetIterator::operator*() const { + return _currentIndex; +} + +inline PresetIterator::PresetIterator(std::size_t start):_currentIndex(start) {} + +inline void PresetIterator::operator++() { + assert(_currentIndex < _presetChooser->size()); + _currentIndex++; +} + +inline void PresetIterator::operator--() { + assert(_currentIndex > 0); + _currentIndex--; +} + +inline bool PresetIterator::operator !=(const PresetIterator & presetPos) const { + return (*presetPos != **this); +} + + +inline bool PresetIterator::operator ==(const PresetIterator & presetPos) const { + return (*presetPos == **this); +} + +inline std::auto_ptr PresetIterator::allocate() { + return _presetChooser->directoryIndex(_currentIndex); +} + +inline void PresetChooser::nextPreset(PresetIterator & presetPos) { + + if (this->empty()) { + return; + } + + // Case: idle preset currently running, selected first preset of chooser + else if (presetPos == this->end()) + presetPos = this->begin(); + else + ++(presetPos); + + // Case: already at last preset, loop to beginning + if (((presetPos) == this->end())) { + presetPos = this->begin(); + } + +} + + +inline void PresetChooser::previousPreset(PresetIterator & presetPos) { + if (this->empty()) + return; + + // Case: idle preset currently running, selected last preset of chooser + else if (presetPos == this->end()) { + --(presetPos); + } + + else if (presetPos != this->begin()) { + --(presetPos); + } + + else { + presetPos = this->end(); + --(presetPos); + } +} + +inline PresetIterator PresetChooser::begin() { + PresetIterator pos(0); + pos.setChooser(*this); + return pos; +} + +inline PresetIterator PresetChooser::begin(unsigned int index) const{ + PresetIterator pos(index); + pos.setChooser(*this); + return pos; +} + +inline PresetIterator PresetChooser::end() const { + PresetIterator pos(_presetLoader->size()); + pos.setChooser(*this); + return pos; +} + + +inline bool PresetChooser::empty() const { + return _presetLoader->size() == 0; +} + +inline std::auto_ptr PresetChooser::directoryIndex(std::size_t index) const { + + return _presetLoader->loadPreset(index); +} + + +inline PresetChooser::iterator PresetChooser::weightedRandom(bool hardCut) const { + + + + + // TODO make a sophisticated function object interface to determine why a certain rating + // category is chosen, or weighted distribution thereover. + const PresetRatingType ratingType = hardCut || (!_softCutRatingsEnabled) ? + HARD_CUT_RATING_TYPE : SOFT_CUT_RATING_TYPE; + + const std::size_t ratingsTypeIndex = static_cast(ratingType); + + const std::vector & weights = _presetLoader->getPresetRatings()[ratingsTypeIndex]; + + const std::size_t index = RandomNumberGenerators::weightedRandom + (weights, + _presetLoader->getPresetRatingsSums()[ratingsTypeIndex]); + + return begin(index); +} + +#endif diff --git a/3rdparty/libprojectm/PresetFactory.cpp b/3rdparty/libprojectm/PresetFactory.cpp new file mode 100644 index 000000000..bd7ac16da --- /dev/null +++ b/3rdparty/libprojectm/PresetFactory.cpp @@ -0,0 +1,24 @@ +#include "PresetFactory.hpp" + +const std::string PresetFactory::IDLE_PRESET_PROTOCOL("idle"); + +std::string PresetFactory::protocol(const std::string & url, std::string & path) { + +#ifdef __APPLE__ + // NOTE: Brian changed this from url.find_first_of to url.find, since presumably we want to find the first occurence of + // :// and not the first occurence of any colon or forward slash. At least that fixed a bug in the Mac OS X build. + std::size_t pos = url.find("://"); +#else + std::size_t pos = url.find_first_of("://"); +#endif + if (pos == std::string::npos) + return std::string(); + else { + path = url.substr(pos + 3, url.length()); + std::cout << "[PresetFactory] path is " << path << std::endl; + std::cout << "[PresetFactory] url is " << url << std::endl; + return url.substr(0, pos); + } + +} + diff --git a/3rdparty/libprojectm/PresetFactory.hpp b/3rdparty/libprojectm/PresetFactory.hpp new file mode 100644 index 000000000..e9c8a4cd0 --- /dev/null +++ b/3rdparty/libprojectm/PresetFactory.hpp @@ -0,0 +1,42 @@ +// +// C++ Interface: PresetFactory +// +// Description: +// +// +// Author: Carmelo Piccione , (C) 2008 +// +// Copyright: See COPYING file that comes with this distribution +// +// + +#include "Preset.hpp" +#include + +#ifndef __PRESET_FACTORY_HPP +#define __PRESET_FACTORY_HPP + +class PresetFactory { + +public: + static const std::string IDLE_PRESET_PROTOCOL; + static std::string protocol(const std::string & url, std::string & path); + + inline PresetFactory() {} + + inline virtual ~PresetFactory() {} + + /// Constructs a new preset given an url and optional meta data + /// \param url a locational identifier referencing the preset + /// \param name the preset name + /// \param author the preset author + /// \returns a valid preset object + virtual std::auto_ptr allocate(const std::string & url, const std::string & name=std::string(), + const std::string & author=std::string()) = 0; + + /// Returns a space separated list of supported extensions + virtual std::string supportedExtensions() const = 0; + +}; + +#endif diff --git a/3rdparty/libprojectm/PresetFactoryManager.cpp b/3rdparty/libprojectm/PresetFactoryManager.cpp new file mode 100644 index 000000000..75f4e66f7 --- /dev/null +++ b/3rdparty/libprojectm/PresetFactoryManager.cpp @@ -0,0 +1,81 @@ +// +// C++ Implementation: PresetFactoryManager +// +// Description: +// +// +// Author: Carmelo Piccione , (C) 2008 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "PresetFactoryManager.hpp" + +#ifndef DISABLE_MILKDROP_PRESETS +#include "MilkdropPresetFactory/MilkdropPresetFactory.hpp" +#endif + +#ifndef DISABLE_NATIVE_PRESETS +#include "NativePresetFactory/NativePresetFactory.hpp" +#endif + +#include +PresetFactoryManager::PresetFactoryManager() : _gx(0), _gy(0) {} + +PresetFactoryManager::~PresetFactoryManager() { + for (std::vector::iterator pos = _factoryList.begin(); + pos != _factoryList.end(); ++pos) { + assert(*pos); + delete(*pos); + } + + +} +void PresetFactoryManager::initialize(int gx, int gy) { + _gx = gx; + _gy = gy; + PresetFactory * factory; + + #ifndef DISABLE_MILKDROP_PRESETS + factory = new MilkdropPresetFactory(_gx, _gy); + registerFactory(factory->supportedExtensions(), factory); + #endif + + #ifndef DISABLE_NATIVE_PRESETS + factory = new NativePresetFactory(); + registerFactory(factory->supportedExtensions(), factory); + #endif +} + +// Current behavior if a conflict is occurs is to override the previous request + +void PresetFactoryManager::registerFactory(const std::string & extensions, PresetFactory * factory) { + + std::stringstream ss(extensions); + std::string extension; + + _factoryList.push_back(factory); + + while (ss >> extension) { + if (_factoryMap.count(extension)) { + std::cerr << "[PresetFactoryManager] Warning: extension \"" << extension << + "\" already has a factory. New factory handler ignored." << std::endl; + } else { + _factoryMap.insert(std::make_pair(extension, factory)); + } + } +} + +PresetFactory & PresetFactoryManager::factory(const std::string & extension) { + + if (!_factoryMap.count(extension)) { + std::ostringstream os; + os << "No factory associated with \"" << extension << "\"." << std::endl; + throw PresetFactoryException(os.str()); + } + return *_factoryMap[extension]; +} + +bool PresetFactoryManager::extensionHandled(const std::string & extension) const { + return _factoryMap.count(extension); +} diff --git a/3rdparty/libprojectm/PresetFactoryManager.hpp b/3rdparty/libprojectm/PresetFactoryManager.hpp new file mode 100644 index 000000000..4d204e009 --- /dev/null +++ b/3rdparty/libprojectm/PresetFactoryManager.hpp @@ -0,0 +1,59 @@ +// +// C++ Implementation: PresetFactoryManager +// +// Description: +// +// +// Author: Carmelo Piccione , (C) 2008 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef __PRESET_FACTORY_MANAGER_HPP +#define __PRESET_FACTORY_MANAGER_HPP +#include "PresetFactory.hpp" + +/// A simple exception class to strongly type all preset factory related issues +class PresetFactoryException : public std::exception +{ + public: + inline PresetFactoryException(const std::string & message) : _message(message) {} + virtual ~PresetFactoryException() throw() {} + const std::string & message() const { return _message; } + + private: + std::string _message; +}; + +/// A manager of preset factories +class PresetFactoryManager { + + public: + PresetFactoryManager(); + ~PresetFactoryManager(); + + /// Initializes the manager with mesh sizes specified + /// \param gx the width of the mesh + /// \param gy the height of the mesh + /// \note This must be called once before any other methods + void initialize(int gx, int gy); + + /// Requests a factory given a preset extension type + /// \param extension a string denoting the preset suffix type + /// \throws PresetFactoryException if the extension is unhandled + /// \returns a valid preset factory associated with the extension + PresetFactory & factory(const std::string & extension); + + /// Tests if an extension has been registered with a factory + /// \param extension the file name extension to verify + /// \returns true if a factory exists, false otherwise + bool extensionHandled(const std::string & extension) const; + + private: + int _gx, _gy; + mutable std::map _factoryMap; + mutable std::vector _factoryList; + void registerFactory(const std::string & extension, PresetFactory * factory); + +}; +#endif diff --git a/3rdparty/libprojectm/PresetLoader.cpp b/3rdparty/libprojectm/PresetLoader.cpp new file mode 100644 index 000000000..94e46b925 --- /dev/null +++ b/3rdparty/libprojectm/PresetLoader.cpp @@ -0,0 +1,281 @@ +// +// C++ Implementation: PresetLoader +// +// Description: +// +// +// Author: Carmelo Piccione , (C) 2007 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "PresetLoader.hpp" +#include "Preset.hpp" +#include "PresetFactory.hpp" +#include +#include +#include + +#ifdef LINUX +extern "C" +{ +#include +} +#endif + +#ifdef MACOS +extern "C" +{ +#include +} +#endif + +#include +#include "fatal.h" + +#include "Common.hpp" + +PresetLoader::PresetLoader (int gx, int gy, std::string dirname = std::string()) :_dirname ( dirname ), _dir ( 0 ) +{ + _presetFactoryManager.initialize(gx,gy); + // Do one scan + if ( _dirname != std::string() ) + rescan(); + else + clear(); +} + +PresetLoader::~PresetLoader() +{ + if ( _dir ) + closedir ( _dir ); +} + +void PresetLoader::setScanDirectory ( std::string dirname ) +{ + _dirname = dirname; +} + + +void PresetLoader::rescan() +{ + // std::cerr << "Rescanning..." << std::endl; + + // Clear the directory entry collection + clear(); + + // If directory already opened, close it first + if ( _dir ) + { + closedir ( _dir ); + _dir = 0; + } + + // Allocate a new a stream given the current directory name + if ( ( _dir = opendir ( _dirname.c_str() ) ) == NULL ) + { + handleDirectoryError(); + return; // no files loaded. _entries is empty + } + + struct dirent * dir_entry; + std::set alphaSortedFileSet; + std::set alphaSortedPresetNameSet; + + while ( ( dir_entry = readdir ( _dir ) ) != NULL ) + { + + std::ostringstream out; + // Convert char * to friendly string + std::string filename ( dir_entry->d_name ); + + // Verify extension is projectm or milkdrop + if (!_presetFactoryManager.extensionHandled(parseExtension(filename))) + continue; + + if ( filename.length() > 0 && filename[0] == '.' ) + continue; + + // Create full path name + out << _dirname << PATH_SEPARATOR << filename; + + // Add to our directory entry collection + alphaSortedFileSet.insert ( out.str() ); + alphaSortedPresetNameSet.insert ( filename ); + + // the directory entry struct is freed elsewhere + } + + // Push all entries in order from the file set to the file entries member (which is an indexed vector) + for ( std::set::iterator pos = alphaSortedFileSet.begin(); + pos != alphaSortedFileSet.end();++pos ) + _entries.push_back ( *pos ); + + // Push all preset names in similar fashion + for ( std::set::iterator pos = alphaSortedPresetNameSet.begin(); + pos != alphaSortedPresetNameSet.end();++pos ) + _presetNames.push_back ( *pos ); + + // Give all presets equal rating of 3 - why 3? I don't know + _ratings = std::vector(TOTAL_RATING_TYPES, RatingList( _presetNames.size(), 3 )); + _ratingsSums = std::vector(TOTAL_RATING_TYPES, 3 * _presetNames.size()); + + + assert ( _entries.size() == _presetNames.size() ); + + + +} + + +std::auto_ptr PresetLoader::loadPreset ( unsigned int index ) const +{ + + // Check that index isn't insane + assert ( index >= 0 ); + assert ( index < _entries.size() ); + + // Return a new autopointer to a preset + const std::string extension = parseExtension ( _entries[index] ); + + return _presetFactoryManager.factory(extension).allocate + ( _entries[index], _presetNames[index] ); + +} + + +std::auto_ptr PresetLoader::loadPreset ( const std::string & url ) const +{ + + // Return a new autopointer to a preset + const std::string extension = parseExtension ( url ); + + /// @bug probably should not use url for preset name + return _presetFactoryManager.factory(extension).allocate + (url, url); + +} + +void PresetLoader::handleDirectoryError() +{ + +#ifdef WIN32 + std::cerr << "[PresetLoader] warning: errno unsupported on win32 platforms. fix me" << std::endl; +#else + + switch ( errno ) + { + case ENOENT: + std::cerr << "[PresetLoader] ENOENT error. The path \"" << this->_dirname << "\" probably does not exist. \"man open\" for more info." << std::endl; + break; + case ENOMEM: + std::cerr << "[PresetLoader] out of memory! Are you running Windows?" << std::endl; + abort(); + case ENOTDIR: + std::cerr << "[PresetLoader] directory specified is not a preset directory! Trying to continue..." << std::endl; + break; + case ENFILE: + std::cerr << "[PresetLoader] Your system has reached its open file limit. Trying to continue..." << std::endl; + break; + case EMFILE: + std::cerr << "[PresetLoader] too many files in use by projectM! Bailing!" << std::endl; + break; + case EACCES: + std::cerr << "[PresetLoader] permissions issue reading the specified preset directory." << std::endl; + break; + default: + break; + } +#endif +} + +void PresetLoader::setRating(unsigned int index, int rating, const PresetRatingType ratingType) +{ + assert ( index >=0 ); + + const unsigned int ratingTypeIndex = static_cast(ratingType); + assert (index < _ratings[ratingTypeIndex].size()); + + _ratingsSums[ratingTypeIndex] -= _ratings[ratingTypeIndex][index]; + + _ratings[ratingTypeIndex][index] = rating; + _ratingsSums[ratingType] += rating; + +} + + +unsigned int PresetLoader::addPresetURL ( const std::string & url, const std::string & presetName, const std::vector & ratings) +{ + _entries.push_back(url); + _presetNames.push_back ( presetName ); + + assert(ratings.size() == TOTAL_RATING_TYPES); + assert(ratings.size() == _ratings.size()); + + for (int i = 0; i < _ratings.size(); i++) + _ratings[i].push_back(ratings[i]); + + for (int i = 0; i < ratings.size(); i++) + _ratingsSums[i] += ratings[i]; + + return _entries.size()-1; +} + +void PresetLoader::removePreset ( unsigned int index ) +{ + + _entries.erase ( _entries.begin() + index ); + _presetNames.erase ( _presetNames.begin() + index ); + + for (int i = 0; i < _ratingsSums.size(); i++) { + _ratingsSums[i] -= _ratings[i][index]; + _ratings[i].erase ( _ratings[i].begin() + index ); + } + + +} + +const std::string & PresetLoader::getPresetURL ( unsigned int index ) const +{ + return _entries[index]; +} + +const std::string & PresetLoader::getPresetName ( unsigned int index ) const +{ + return _presetNames[index]; +} + +int PresetLoader::getPresetRating ( unsigned int index, const PresetRatingType ratingType ) const +{ + return _ratings[ratingType][index]; +} + +const std::vector & PresetLoader::getPresetRatings () const +{ + return _ratings; +} + +const std::vector & PresetLoader::getPresetRatingsSums() const { + return _ratingsSums; +} + +void PresetLoader::setPresetName(unsigned int index, std::string name) { + _presetNames[index] = name; +} + +void PresetLoader::insertPresetURL ( unsigned int index, const std::string & url, const std::string & presetName, const RatingList & ratings) +{ + _entries.insert ( _entries.begin() + index, url ); + _presetNames.insert ( _presetNames.begin() + index, presetName ); + + + + for (int i = 0; i < _ratingsSums.size();i++) { + _ratingsSums[i] += _ratings[i][index]; + _ratings[i].insert ( _ratings[i].begin() + index, ratings[i] ); + } + + assert ( _entries.size() == _presetNames.size() ); + + +} diff --git a/3rdparty/libprojectm/PresetLoader.hpp b/3rdparty/libprojectm/PresetLoader.hpp new file mode 100644 index 000000000..02d43c18f --- /dev/null +++ b/3rdparty/libprojectm/PresetLoader.hpp @@ -0,0 +1,118 @@ +#ifndef __PRESET_LOADER_HPP +#define __PRESET_LOADER_HPP + +#include // used for path / filename stuff +#include // for auto pointers +#include + +#ifdef WIN32 +#include "win32-dirent.h" +#endif + +#ifdef LINUX +#include +#endif + +#ifdef MACOS +#include +#endif + +#include +#include +#include "PresetFactoryManager.hpp" + +class Preset; +class PresetFactory; + + +class PresetLoader { + public: + + + /// Initializes the preset loader with the target directory specified + PresetLoader(int gx, int gy, std::string dirname); + + ~PresetLoader(); + + /// Load a preset by specifying it's unique identifier given when the preset url + /// was added to this loader + std::auto_ptr loadPreset(unsigned int index) const; + std::auto_ptr loadPreset ( const std::string & url ) const; + /// Add a preset to the loader's collection. + /// \param url an url referencing the preset + /// \param presetName a name for the preset + /// \param rating an integer representing the goodness of the preset + /// \returns The unique index assigned to the preset in the collection. Used with loadPreset + unsigned int addPresetURL ( const std::string & url, const std::string & presetName, const RatingList & ratings); + + /// Add a preset to the loader's collection. + /// \param index insertion index + /// \param url an url referencing the preset + /// \param presetName a name for the preset + /// \param rating an integer representing the goodness of the preset + void insertPresetURL (unsigned int index, const std::string & url, const std::string & presetName, const RatingList & ratings); + + /// Clears all presets from the collection + inline void clear() { + _entries.clear(); _presetNames.clear(); + _ratings = std::vector(TOTAL_RATING_TYPES, RatingList()); + clearRatingsSum(); + } + + inline void clearRatingsSum() { + _ratingsSums = std::vector(TOTAL_RATING_TYPES, 0); + } + + const std::vector & getPresetRatings() const; + const std::vector & getPresetRatingsSums() const; + + /// Removes a preset from the loader + /// \param index the unique identifier of the preset url to be removed + void removePreset(unsigned int index); + + /// Sets the rating of a preset to a new value + void setRating(unsigned int index, int rating, const PresetRatingType ratingType); + + /// Get a preset rating given an index + int getPresetRating ( unsigned int index, const PresetRatingType ratingType) const; + + /// Get a preset url given an index + const std::string & getPresetURL ( unsigned int index) const; + + /// Get a preset name given an index + const std::string & getPresetName ( unsigned int index) const; + + /// Returns the number of presets in the active directory + inline std::size_t size() const { + return _entries.size(); + } + + /// Sets the directory where the loader will search for files + void setScanDirectory(std::string pathname); + + /// Returns the directory path associated with this preset chooser + inline const std::string & directoryName() const { + return _dirname; + } + + /// Rescans the active preset directory + void rescan(); + void setPresetName(unsigned int index, std::string name); + private: + void handleDirectoryError(); + std::string _dirname; + DIR * _dir; + std::vector _ratingsSums; + mutable PresetFactoryManager _presetFactoryManager; + + // vector chosen for speed, but not great for reverse index lookups + std::vector _entries; + std::vector _presetNames; + + // Indexed by ratingType, preset position. + std::vector _ratings; + + +}; + +#endif diff --git a/3rdparty/libprojectm/RandomNumberGenerators.hpp b/3rdparty/libprojectm/RandomNumberGenerators.hpp new file mode 100644 index 000000000..862e43bba --- /dev/null +++ b/3rdparty/libprojectm/RandomNumberGenerators.hpp @@ -0,0 +1,122 @@ +#ifndef RANDOM_NUMBER_GENERATORS_HPP +#define RANDOM_NUMBER_GENERATORS_HPP +#include +#include +#include +#include + +#define WEIGHTED_RANDOM_DEBUG 0 + +namespace RandomNumberGenerators { + +inline float uniform() +/* Uniform random number generator x(n+1)= a*x(n) mod c + with a = pow(7,5) and c = pow(2,31)-1. + Copyright (c) Tao Pang 1997. */ + { + const int ia=16807,ic=2147483647,iq=127773,ir=2836; + int il,ih,it; + float rc; + static int iseed = rand(); + ih = iseed/iq; + il = iseed%iq; + it = ia*il-ir*ih; + if (it > 0) + { + iseed = it; + } + else + { + iseed = ic+it; + } + rc = ic; + return iseed/rc; + } + +inline float gaussian(float mean, float sigma) +{ + + float x1, x2, w, y1, y2; + + do { + x1 = 2.0 * uniform() - 1.0; + x2 = 2.0 * uniform() - 1.0; + w = x1 * x1 + x2 * x2; + } while ( w >= 1.0 ); + + w = sqrt( (-2.0 * log( w ) ) / w ); + y1 = x1 * w; + y2 = x2 * w; + + float ret = y1*sigma + mean; + + return ret; +} + +inline std::size_t uniformInteger(std::size_t upperBound=1) { + + + /// @bug there was a man entry about how this leads to a lousy uniform + /// @bug distribution in practice. should probably review + assert(upperBound > 0); + return ((rand()) % ((int)upperBound)); +} + + + + +/// Randomizes from probabilistically weighted distribution. Thus, +/// sum of passed in weights should be 1.0 +inline std::size_t weightedRandomNormalized(std::vector weights) { + + // Choose a random bounded mass between 0 and 1 + float cutoff = ((float)(rand())) / (float)RAND_MAX; + + //std::cout << "cutoff : " << cutoff << std::endl; + + // Sum up mass, stopping when cutoff is reached. This is the typical + // weighted sampling algorithm. + float mass = 0; + for (std::size_t i = 0; i< weights.size() ; i++) { + mass += weights[i]; + //std::cout << "mass: " << mass << std::endl; + if (mass >= cutoff) + return i; + } + + // Just in case something slips through the cracks + return weights.size()-1; +} + +inline std::size_t weightedRandom(const std::vector & weights, unsigned int weightTotalHint = 0) { + + + if (weightTotalHint == 0) { + for (std::size_t i = 0; i < weights.size();i++) + weightTotalHint += weights[i]; + } + + const int sampledSum = uniformInteger(weightTotalHint); + int sum = 0; + if (WEIGHTED_RANDOM_DEBUG) std::cout << "[RNG::weightedRandom()] weightTotal = " << weightTotalHint << + std::endl; + + for (std::size_t i = 0; i < weights.size();i++) { + if (WEIGHTED_RANDOM_DEBUG) + std::cout << "[RNG::weightedRandom()] weight[" << i << "] = " << weights[i] << + std::endl; + + sum += weights[i]; + if (sampledSum <= sum) { + if (WEIGHTED_RANDOM_DEBUG) + std::cout << "[RNG::weightedRandom()] sampled index " << i << "(" << + "running sum = " << sum << ", sampled sum = " << sampledSum << std::endl; + return i; + } + } + + return weights.size()-1; +} + +} +#endif diff --git a/3rdparty/libprojectm/Renderer/BeatDetect.cpp b/3rdparty/libprojectm/Renderer/BeatDetect.cpp new file mode 100755 index 000000000..106b544d5 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/BeatDetect.cpp @@ -0,0 +1,186 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2004 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * Takes sound data from wherever and returns beat detection values + * Uses statistical Energy-Based methods. Very simple + * + * Some stuff was taken from Frederic Patin's beat-detection article, + * you'll find it online + */ + +#include +#include + +#include "wipemalloc.h" + +#include "Common.hpp" +#include "PCM.hpp" +#include +#include "BeatDetect.hpp" + +BeatDetect::BeatDetect(PCM *pcm) { + int x,y; + + this->pcm=pcm; + + this->vol_instant=0; + this->vol_history=0; + + for (y=0;y<80;y++) + { + this->vol_buffer[y]=0; + } + + this->beat_buffer_pos=0; + + for (x=0;x<32;x++) { + this->beat_instant[x]=0; + this->beat_history[x]=0; + this->beat_val[x]=1.0; + this->beat_att[x]=1.0; + this->beat_variance[x]=0; + for (y=0;y<80;y++) { + this->beat_buffer[x][y]=0; + } + } + + this->treb = 0; + this->mid = 0; + this->bass = 0; + this->vol_old = 0; + this->beat_sensitivity = 10.00; + this->treb_att = 0; + this->mid_att = 0; + this->bass_att = 0; + this->vol = 0; + + + } + +BeatDetect::~BeatDetect() +{ + +} + +void BeatDetect::reset() { + this->treb = 0; + this->mid = 0; + this->bass = 0; + this->treb_att = 0; + this->mid_att = 0; + this->bass_att = 0; + } + +void BeatDetect::detectFromSamples() { + vol_old = vol; + bass=0;mid=0;treb=0; + + getBeatVals(pcm->pcmdataL,pcm->pcmdataR); + } + +void BeatDetect::getBeatVals( float *vdataL,float *vdataR ) { + + int linear=0; + int x,y; + float temp2=0; + + vol_instant=0; + for ( x=0;x<16;x++) + { + + beat_instant[x]=0; + for ( y=linear*2;y<(linear+8+x)*2;y++) + { + beat_instant[x]+=((vdataL[y]*vdataL[y])+(vdataR[y]*vdataR[y]))*(1.0/(8+x)); +// printf( "beat_instant[%d]: %f %f %f\n", x, beat_instant[x], vdataL[y], vdataR[y] ); + vol_instant+=((vdataL[y]*vdataL[y])+(vdataR[y]*vdataR[y]))*(1.0/512.0); + + } +//printf("1"); + linear=y/2; + beat_history[x]-=(beat_buffer[x][beat_buffer_pos])*.0125; + beat_buffer[x][beat_buffer_pos]=beat_instant[x]; + beat_history[x]+=(beat_instant[x])*.0125; + + beat_val[x]=(beat_instant[x])/(beat_history[x]); + + beat_att[x]+=(beat_instant[x])/(beat_history[x]); + +//printf("2\n"); + + } +//printf("b\n"); + vol_history-=(vol_buffer[beat_buffer_pos])*.0125; + vol_buffer[beat_buffer_pos]=vol_instant; + vol_history+=(vol_instant)*.0125; + + mid=0; + for(x=1;x<10;x++) + { + mid+=(beat_instant[x]); + temp2+=(beat_history[x]); + + } + + mid=mid/(1.5*temp2); + temp2=0; + treb=0; + for(x=10;x<16;x++) + { + treb+=(beat_instant[x]); + temp2+=(beat_history[x]); + } +//printf("c\n"); + treb=treb/(1.5*temp2); +// *vol=vol_instant/(1.5*vol_history); + vol=vol_instant/(1.5*vol_history); + + bass=(beat_instant[0])/(1.5*beat_history[0]); + + + if ( projectM_isnan( treb ) ) { + treb = 0.0; + } + if ( projectM_isnan( mid ) ) { + mid = 0.0; + } + if ( projectM_isnan( bass ) ) { + bass = 0.0; + } + treb_att=.6 * treb_att + .4 * treb; + mid_att=.6 * mid_att + .4 * mid; + bass_att=.6 * bass_att + .4 * bass; + + if(bass_att>100)bass_att=100; + if(bass >100)bass=100; + if(mid_att>100)mid_att=100; + if(mid >100)mid=100; + if(treb_att>100)treb_att=100; + if(treb >100)treb=100; + if(vol>100)vol=100; + + // *vol=(beat_instant[3])/(beat_history[3]); + beat_buffer_pos++; + if( beat_buffer_pos>79)beat_buffer_pos=0; + +} + + diff --git a/3rdparty/libprojectm/Renderer/BeatDetect.hpp b/3rdparty/libprojectm/Renderer/BeatDetect.hpp new file mode 100755 index 000000000..4dc3881ae --- /dev/null +++ b/3rdparty/libprojectm/Renderer/BeatDetect.hpp @@ -0,0 +1,74 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id$ + * + * Beat detection class. Takes decompressed sound buffers and returns + * various characteristics + * + * $Log$ + * + */ + +#ifndef _BEAT_DETECT_H +#define _BEAT_DETECT_H + +#include "../PCM.hpp" +#include "../dlldefs.h" + + +class DLLEXPORT BeatDetect +{ + public: + float treb ; + float mid ; + float bass ; + float vol_old ; + float beat_sensitivity; + float treb_att ; + float mid_att ; + float bass_att ; + float vol; + + PCM *pcm; + + /** Methods */ + BeatDetect(PCM *pcm); + ~BeatDetect(); + void initBeatDetect(); + void reset(); + void detectFromSamples(); + void getBeatVals ( float *vdataL, float *vdataR ); + private: + /** Vars */ + float beat_buffer[32][80], + beat_instant[32], + beat_history[32]; + float beat_val[32], + beat_att[32], + beat_variance[32]; + int beat_buffer_pos; + float vol_buffer[80], + vol_instant, + vol_history; +}; + +#endif /** !_BEAT_DETECT_H */ diff --git a/3rdparty/libprojectm/Renderer/CMakeLists.txt b/3rdparty/libprojectm/Renderer/CMakeLists.txt new file mode 100644 index 000000000..ede2c06ef --- /dev/null +++ b/3rdparty/libprojectm/Renderer/CMakeLists.txt @@ -0,0 +1,28 @@ +PROJECT(Renderer) +cmake_minimum_required(VERSION 2.4.0) + +if(COMMAND cmake_policy) + cmake_policy(SET CMP0003 NEW) +endif(COMMAND cmake_policy) + +SET(SOIL_SOURCES SOIL/image_DXT.c SOIL/image_helper.c SOIL/SOIL.c SOIL/stb_image_aug.c) + +SET(Renderer_SOURCES FBO.cpp MilkdropWaveform.cpp PerPixelMesh.cpp Pipeline.cpp Renderer.cpp ShaderEngine.cpp UserTexture.cpp Waveform.cpp +Filters.cpp PerlinNoise.cpp PipelineContext.cpp Renderable.cpp BeatDetect.cpp Shader.cpp TextureManager.cpp VideoEcho.cpp +RenderItemDistanceMetric.cpp RenderItemMatcher.cpp ${SOIL_SOURCES}) + +IF(NOT MSVC) + SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") + SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") +ENDIF(NOT MSVC) + +if(MSVC) + SET (MATH_LIBRARIES ) +else(MSVC) + SET (MATH_LIBRARIES m) +endif(MSVC) + +INCLUDE_DIRECTORIES(${projectM_SOURCE_DIR}) +ADD_LIBRARY(Renderer STATIC ${Renderer_SOURCES}) +SET_TARGET_PROPERTIES(Renderer PROPERTIES VERSION 2.00 SOVERSION 2) +TARGET_LINK_LIBRARIES(Renderer ${MATH_LIBRARIES} projectM) diff --git a/3rdparty/libprojectm/Renderer/FBO.cpp b/3rdparty/libprojectm/Renderer/FBO.cpp new file mode 100755 index 000000000..97e482a85 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/FBO.cpp @@ -0,0 +1,293 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2004 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id: FBO.c,v 1.1.1.1 2005/12/23 18:05:00 psperl Exp $ + * + * Render this methods + */ + +#include +//#include +#include +#include "Common.hpp" +#include "FBO.hpp" + + + +RenderTarget::~RenderTarget() { + + + glDeleteTextures( 1, &this->textureID[0]); + +#ifdef USE_FBO + if (useFBO) + { + glDeleteTextures( 1, &this->textureID[1] ); + glDeleteRenderbuffersEXT(1, &this->depthb[0]); + glDeleteFramebuffersEXT(1, &this->fbuffer[0]); + if(renderToTexture) + { + glDeleteTextures( 1, &this->textureID[2] ); + glDeleteRenderbuffersEXT(1, &this->depthb[1]); + glDeleteFramebuffersEXT(1, &this->fbuffer[1]); + } + } +#endif + +} + +GLuint RenderTarget::initRenderToTexture() +{ +#ifdef USE_FBO + + if (this->useFBO==1) + { + this->renderToTexture=1; + + GLuint fb2, depth_rb2; + glGenFramebuffersEXT(1, &fb2); + glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, fb2 ); + glGenRenderbuffersEXT(1, &depth_rb2); + glBindRenderbufferEXT( GL_RENDERBUFFER_EXT, depth_rb2 ); + + glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, this->texsize,this->texsize ); + glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depth_rb2 ); + this->fbuffer[1] = fb2; + this->depthb[1]= depth_rb2; + glGenTextures(1, &this->textureID[2]); + glBindTexture(GL_TEXTURE_2D, this->textureID[2]); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, texsize, texsize, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL ); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, this->textureID[2], 0 ); + return this->textureID[2]; + } +#endif +return -1; + +} + +/** Creates new pbuffers */ +RenderTarget::RenderTarget(int texsize, int width, int height) : useFBO(false) { + + int mindim = 0; + int origtexsize = 0; + + this->renderToTexture = 0; + this->texsize = texsize; + +#ifdef USE_FBO + glewInit(); + // Forceably disable FBO if user requested it but the video card / driver lacks + // the appropraite frame buffer extension. + if (useFBO = glewIsSupported("GL_EXT_framebuffer_object")) + { + + GLuint fb, depth_rb, rgba_tex, other_tex; + glGenFramebuffersEXT(1, &fb); + glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, fb ); + + glGenRenderbuffersEXT(1, &depth_rb); + glBindRenderbufferEXT( GL_RENDERBUFFER_EXT, depth_rb ); + glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, this->texsize,this->texsize ); + glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depth_rb ); + this->fbuffer[0] = fb; + this->depthb[0]= depth_rb; + + glGenTextures(1, &other_tex); + glBindTexture(GL_TEXTURE_2D,other_tex); + glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, texsize, texsize, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL ); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + //glGenerateMipmapEXT(GL_TEXTURE_2D); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + + + + glGenTextures(1, &rgba_tex); + glBindTexture(GL_TEXTURE_2D, rgba_tex); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, texsize, texsize, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL ); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + //glGenerateMipmapEXT(GL_TEXTURE_2D); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + + + + glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, rgba_tex, 0 ); + this->textureID[0] = rgba_tex; + this->textureID[1] = other_tex; + + GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); + if (status == GL_FRAMEBUFFER_COMPLETE_EXT) { + return; + } + std::cerr << "[projecM] warning: FBO support not detected. Using fallback." << std::endl; + } + +#endif + +// Can reach here via two code paths: +// (1) useFBO was set to false externally by cmake / system setting / etc. +// (2) useFBO was true but forced to false as it failed to pass all the GLU extension checks. + + /** Fallback pbuffer creation via teximage hack */ + /** Check the texture size against the viewport size */ + /** If the viewport is smaller, then we'll need to scale the texture size down */ + /** If the viewport is larger, scale it up */ + mindim = width < height ? width : height; + origtexsize = this->texsize; + this->texsize = nearestPower2( mindim, SCALE_MINIFY ); + glGenTextures(1, &this->textureID[0] ); + + glBindTexture(GL_TEXTURE_2D, this->textureID[0] ); + //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + glTexImage2D(GL_TEXTURE_2D, + 0, + GL_RGB, + this->texsize, this->texsize, + 0, + GL_RGBA, + GL_UNSIGNED_BYTE, + NULL); + + + + return; + } + + void RenderTarget::fallbackRescale(int width, int height) + { + int mindim = width < height ? width : height; + int origtexsize = this->texsize; + this->texsize = nearestPower2( mindim, SCALE_MINIFY ); + + /* Create the texture that will be bound to the render this */ + /* + + if ( this->texsize != origtexsize ) { + + glDeleteTextures( 1, &this->textureID[0] ); + } + */ + + glGenTextures(1, &this->textureID[0] ); + + glBindTexture(GL_TEXTURE_2D, this->textureID[0] ); + //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + glTexImage2D(GL_TEXTURE_2D, + 0, + GL_RGB, + this->texsize, this->texsize, + 0, + GL_RGBA, + GL_UNSIGNED_BYTE, + NULL); + + + } + +/** Destroys the pbuffer */ + +/** Locks the pbuffer */ +void RenderTarget::lock() { + +#ifdef USE_FBO + if(this->useFBO) + { + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, this->fbuffer[0]); + } +#endif + } + +/** Unlocks the pbuffer */ +void RenderTarget::unlock() { + +#ifdef USE_FBO + if(this->useFBO) + { + glBindTexture( GL_TEXTURE_2D, this->textureID[1] ); + glCopyTexSubImage2D( GL_TEXTURE_2D, + 0, 0, 0, 0, 0, + this->texsize, this->texsize ); + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + return; + } +#endif + /** Fallback texture path */ + + glBindTexture( GL_TEXTURE_2D, this->textureID[0] ); + + glCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, this->texsize, this->texsize ); + } + +/** + * Calculates the nearest power of two to the given number using the + * appropriate rule + */ +int RenderTarget::nearestPower2( int value, TextureScale scaleRule ) { + + int x = value; + int power = 0; + + while ( ( x & 0x01 ) != 1 ) { + x >>= 1; + } + + if ( x == 1 ) { + return value; + } else { + x = value; + while ( x != 0 ) { + x >>= 1; + power++; + } + switch ( scaleRule ) { + case SCALE_NEAREST: + if ( ( ( 1 << power ) - value ) <= ( value - ( 1 << ( power - 1 ) ) ) ) { + return 1 << power; + } else { + return 1 << ( power - 1 ); + } + case SCALE_MAGNIFY: + return 1 << power; + case SCALE_MINIFY: + return 1 << ( power - 1 ); + default: + break; + } + } + return 0; + } diff --git a/3rdparty/libprojectm/Renderer/FBO.hpp b/3rdparty/libprojectm/Renderer/FBO.hpp new file mode 100755 index 000000000..e79954da9 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/FBO.hpp @@ -0,0 +1,96 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id: FBO.hpp,v 1.1.1.1 2005/12/23 18:05:00 psperl Exp $ + * + * Opaque render target + * + */ + +#ifndef _RENDERTARGET_H +#define _RENDERTARGET_H + +#ifdef USE_FBO +#ifdef USE_NATIVE_GLEW +#include "glew.h" +#else +#include +#endif +#endif + +#ifdef MACOS +#include +#include +#endif /** MACOS */ + +#ifdef WIN32 +#include +#endif /** WIN32 */ + +#ifdef LINUX +#ifdef USE_GLES1 +#include +#else +#include +#include +#endif +#endif + +typedef enum { SCALE_NEAREST, SCALE_MAGNIFY, SCALE_MINIFY } TextureScale; + +class RenderTarget { + + +public: + /** Texture size */ + int texsize; + + int useFBO; + int renderToTexture; + + ~RenderTarget(); + + RenderTarget( int texsize, int width, int height ); + void lock(); + void unlock(); + GLuint initRenderToTexture(); + int nearestPower2( int value, TextureScale scaleRule ); + void fallbackRescale(int width, int height); + + /** Opaque pbuffer context and pbuffer */ +/* +#ifdef MACOS + void *origContext; + void *pbufferContext; + void *pbuffer; +#endif +*/ + /** Render target texture ID for non-pbuffer systems */ + GLuint textureID[3]; +#ifdef USE_FBO + GLuint fbuffer[2]; + GLuint depthb[2]; +#endif + }; + + + +#endif /** !_RENDERTARGET_H */ diff --git a/3rdparty/libprojectm/Renderer/Filters.cpp b/3rdparty/libprojectm/Renderer/Filters.cpp new file mode 100644 index 000000000..3e831f9d7 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/Filters.cpp @@ -0,0 +1,98 @@ +/* + * Filters.cpp + * + * Created on: Jun 18, 2008 + * Author: pete + */ + +#include "Common.hpp" + +#ifdef USE_GLES1 +#include +#else +#ifdef __APPLE__ +#include +#include +#else +#include +#include +#endif +#endif + +#include "Filters.hpp" + +void Brighten::Draw(RenderContext &context) +{ + float points[4][2] = {{-0.5, -0.5}, + {-0.5, 0.5}, + { 0.5, 0.5}, + { 0.5, -0.5}}; + + glEnableClientState(GL_VERTEX_ARRAY); + glVertexPointer(2,GL_FLOAT,0,points); + + glColor4f(1.0, 1.0, 1.0, 1.0); + glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO); + glDrawArrays(GL_TRIANGLE_FAN,0,4); + glBlendFunc(GL_ZERO, GL_DST_COLOR); + glDrawArrays(GL_TRIANGLE_FAN,0,4); + glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO); + glDrawArrays(GL_TRIANGLE_FAN,0,4); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glDisableClientState(GL_VERTEX_ARRAY); +} + +void Darken::Draw(RenderContext &context) +{ + float points[4][2] = {{-0.5, -0.5}, + {-0.5, 0.5}, + { 0.5, 0.5}, + { 0.5, -0.5}}; + + glEnableClientState(GL_VERTEX_ARRAY); + glVertexPointer(2,GL_FLOAT,0,points); + glColor4f(1.0, 1.0, 1.0, 1.0); + glBlendFunc(GL_ZERO, GL_DST_COLOR); + glDrawArrays(GL_TRIANGLE_FAN,0,4); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glDisableClientState(GL_VERTEX_ARRAY); +} + +void Invert::Draw(RenderContext &context) +{ + float points[4][2] = {{-0.5, -0.5}, + {-0.5, 0.5}, + { 0.5, 0.5}, + { 0.5, -0.5}}; + + glEnableClientState(GL_VERTEX_ARRAY); + glVertexPointer(2,GL_FLOAT,0,points); + glColor4f(1.0, 1.0, 1.0, 1.0); + glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO); + glDrawArrays(GL_TRIANGLE_FAN,0,4); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glDisableClientState(GL_VERTEX_ARRAY); +} + +void Solarize::Draw(RenderContext &context) +{ + float points[4][2] = {{-0.5, -0.5}, + {-0.5, 0.5}, + { 0.5, 0.5}, + { 0.5, -0.5}}; + + glEnableClientState(GL_VERTEX_ARRAY); + glVertexPointer(2,GL_FLOAT,0,points); + + glColor4f(1.0, 1.0, 1.0, 1.0); + glBlendFunc(GL_ZERO, GL_ONE_MINUS_DST_COLOR); + glDrawArrays(GL_TRIANGLE_FAN,0,4); + glBlendFunc(GL_DST_COLOR, GL_ONE); + glDrawArrays(GL_TRIANGLE_FAN,0,4); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glDisableClientState(GL_VERTEX_ARRAY); +} + diff --git a/3rdparty/libprojectm/Renderer/Filters.hpp b/3rdparty/libprojectm/Renderer/Filters.hpp new file mode 100644 index 000000000..6ce64da13 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/Filters.hpp @@ -0,0 +1,41 @@ +/* + * Filters.hpp + * + * Created on: Jun 18, 2008 + * Author: pete + */ + +#ifndef FILTERS_HPP_ +#define FILTERS_HPP_ + +#include "Renderable.hpp" + +class Brighten : public RenderItem +{ +public: + Brighten(){} + void Draw(RenderContext &context); +}; + +class Darken : public RenderItem +{ +public: + Darken(){} + void Draw(RenderContext &context); +}; + +class Invert : public RenderItem +{ +public: + Invert(){} + void Draw(RenderContext &context); +}; + +class Solarize : public RenderItem +{ +public: + Solarize(){} + void Draw(RenderContext &context); +}; + +#endif /* FILTERS_HPP_ */ diff --git a/3rdparty/libprojectm/Renderer/MilkdropWaveform.cpp b/3rdparty/libprojectm/Renderer/MilkdropWaveform.cpp new file mode 100644 index 000000000..b2d7dbec1 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/MilkdropWaveform.cpp @@ -0,0 +1,370 @@ +/* + * MilkdropWaveform.cpp + * + * Created on: Jun 25, 2008 + * Author: pete + */ +#include + +#ifdef LINUX +#include +#endif +#ifdef WIN32 +#include "glew.h" +#endif +#ifdef __APPLE__ +#include +#endif + +#include "MilkdropWaveform.hpp" +#include "math.h" +#include "BeatDetect.hpp" + +MilkdropWaveform::MilkdropWaveform(): RenderItem(), + x(0.5), y(0.5), r(1), g(0), b(0), a(1), mystery(0), mode(Line), scale(10), smoothing(0), rot(0), samples(0),modOpacityStart(0),modOpacityEnd(1), + modulateAlphaByVolume(false), maximizeColors(false), additive(false), dots(false), thick(false), loop(false) {} + +void MilkdropWaveform::Draw(RenderContext &context) +{ + WaveformMath(context); + + glMatrixMode( GL_MODELVIEW ); + glPushMatrix(); + glLoadIdentity(); + + if(modulateAlphaByVolume) ModulateOpacityByVolume(context); + else temp_a = a; + MaximizeColors(context); + + #ifndef USE_GLES1 + if(dots==1) glEnable(GL_LINE_STIPPLE); + #endif + + //Thick wave drawing + if (thick==1) glLineWidth( (context.texsize < 512 ) ? 2 : 2*context.texsize/512); + else glLineWidth( (context.texsize < 512 ) ? 1 : context.texsize/512); + + //Additive wave drawing (vice overwrite) + if (additive==1)glBlendFunc(GL_SRC_ALPHA, GL_ONE); + else glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + + glTranslatef(.5, .5, 0); + glRotatef(rot, 0, 0, 1); + glScalef(aspectScale, 1.0, 1.0); + glTranslatef(-.5, -.5, 0); + + + glEnableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + glVertexPointer(2,GL_FLOAT,0,wavearray); + + if (loop) + glDrawArrays(GL_LINE_LOOP,0,samples); + else + glDrawArrays(GL_LINE_STRIP,0,samples); + + + if (two_waves) + { + glVertexPointer(2,GL_FLOAT,0,wavearray2); + if (loop) + glDrawArrays(GL_LINE_LOOP,0,samples); + else + glDrawArrays(GL_LINE_STRIP,0,samples); + } + + + #ifndef USE_GLES1 + if(dots==1) glDisable(GL_LINE_STIPPLE); + #endif + + glPopMatrix(); +} + +void MilkdropWaveform::ModulateOpacityByVolume(RenderContext &context) +{ + + //modulate volume by opacity + // + //set an upper and lower bound and linearly + //calculate the opacity from 0=lower to 1=upper + //based on current volume + + if (context.beatDetect->vol<= modOpacityStart) temp_a=0.0; + else if (context.beatDetect->vol>=modOpacityEnd) temp_a=a; + else temp_a=a*((context.beatDetect->vol-modOpacityStart)/(modOpacityEnd-modOpacityStart)); + +} + +void MilkdropWaveform::MaximizeColors(RenderContext &context) +{ + + float wave_r_switch=0, wave_g_switch=0, wave_b_switch=0; + //wave color brightening + // + //forces max color value to 1.0 and scales + // the rest accordingly + if(mode==Blob2 || mode==Blob5) + switch(context.texsize) + { + case 256: temp_a *= 0.07f; break; + case 512: temp_a *= 0.09f; break; + case 1024: temp_a *= 0.11f; break; + case 2048: temp_a *= 0.13f; break; + } + else if(mode==Blob3) + { + switch(context.texsize) + { + case 256: temp_a *= 0.075f; break; + case 512: temp_a *= 0.15f; break; + case 1024: temp_a *= 0.22f; break; + case 2048: temp_a *= 0.33f; break; + } + temp_a*=1.3f; + temp_a*=powf(context.beatDetect->treb , 2.0f); + } + + if (maximizeColors==true) + { + if(r>=g && r>=b) //red brightest + { + wave_b_switch=b*(1/r); + wave_g_switch=g*(1/r); + wave_r_switch=1.0; + } + else if (b>=g && b>=r) //blue brightest + { + wave_r_switch=r*(1/b); + wave_g_switch=g*(1/b); + wave_b_switch=1.0; + + } + + else if (g>=b && g>=r) //green brightest + { + wave_b_switch=b*(1/g); + wave_r_switch=r*(1/g); + wave_g_switch=1.0; + } + + + glColor4f(wave_r_switch, wave_g_switch, wave_b_switch, temp_a * masterAlpha); + } + else + { + glColor4f(r, g, b, temp_a * masterAlpha); + } +} + + +void MilkdropWaveform::WaveformMath(RenderContext &context) +{ + + int i; + + float r, theta; + + float offset; + + float wave_x_temp=0; + float wave_y_temp=0; + + float cos_rot; + float sin_rot; + + offset=x-.5; + float temp_y; + + two_waves = false; + loop = false; + + switch(mode) + { + + case Circle: + { + loop = true; + rot = 0; + aspectScale=1.0; + temp_y=-1*(y-1.0); + + + samples = 0? 512-32 : context.beatDetect->pcm->numsamples; + + float inv_nverts_minus_one = 1.0f/(float)(samples); + + float last_value = context.beatDetect->pcm->pcmdataR[samples-1]+context.beatDetect->pcm->pcmdataL[samples-1]; + float first_value = context.beatDetect->pcm->pcmdataR[0]+context.beatDetect->pcm->pcmdataL[0]; + float offset = first_value-last_value; + + for ( int i=0;ipcm->pcmdataR[i]+context.beatDetect->pcm->pcmdataL[i]; + value += offset * (i/(float)samples); + + r=(0.5 + 0.4f*.12*value*scale + mystery)*.5; + theta=i*inv_nverts_minus_one*6.28f + context.time*0.2f; + + wavearray[i][0]=(r*cos(theta)*(context.aspectCorrect? context.aspectRatio : 1.0)+x); + wavearray[i][1]=(r*sin(theta)+temp_y); + } + } + + break; + + case RadialBlob://circularly moving waveform + + rot = 0; + aspectScale = context.aspectRatio; + + temp_y=-1*(y-1.0); + + samples = 512-32; + for ( int i=0;i<512-32;i++) + { + theta=context.beatDetect->pcm->pcmdataL[i+32]*0.06*scale * 1.57 + context.time*2.3; + r=(0.53 + 0.43*context.beatDetect->pcm->pcmdataR[i]*0.12*scale+ mystery)*.5; + + wavearray[i][0]=(r*cos(theta)*(context.aspectCorrect ? context.aspectRatio : 1.0)+x); + wavearray[i][1]=(r*sin(theta)+temp_y); + } + + break; + + case Blob2://EXPERIMENTAL + + temp_y=-1*(y-1.0); + rot = 0; + aspectScale =1.0; + samples = 512-32; + + for ( int i=0;i<512-32;i++) + { + wavearray[i][0]=(context.beatDetect->pcm->pcmdataR[i]*scale*0.5*(context.aspectCorrect ? context.aspectRatio : 1.0) + x); + wavearray[i][1]=(context.beatDetect->pcm->pcmdataL[i+32]*scale*0.5 + temp_y); + } + + break; + + case Blob3://EXPERIMENTAL + + temp_y=-1*(y-1.0); + + rot = 0; + aspectScale =1.0; + + samples = 512-32; + + for ( int i=0;i<512-32;i++) + { + wavearray[i][0]=(context.beatDetect->pcm->pcmdataR[i] * scale*0.5 + x); + wavearray[i][1]=( (context.beatDetect->pcm->pcmdataL[i+32]*scale*0.5 + temp_y)); + } + + break; + + case DerivativeLine://single x-axis derivative waveform + { + rot =-mystery*90; + aspectScale=1.0; + + temp_y=-1*(y-1.0); + + float w1 = 0.45f + 0.5f*(mystery*0.5f + 0.5f); + float w2 = 1.0f - w1; + float xx[512], yy[512]; + samples = 512-32; + + for (int i=0; i<512-32; i++) + { + xx[i] = -1.0f + 2.0f*(i/(512.0-32.0)) + x; + yy[i] =0.4* context.beatDetect->pcm->pcmdataL[i]*0.47f*scale + temp_y; + xx[i] += 0.4*context.beatDetect->pcm->pcmdataR[i]*0.44f*scale; + + if (i>1) + { + xx[i] = xx[i]*w2 + w1*(xx[i-1]*2.0f - xx[i-2]); + yy[i] = yy[i]*w2 + w1*(yy[i-1]*2.0f - yy[i-2]); + } + wavearray[i][0]=xx[i]; + wavearray[i][1]=yy[i]; + } } + break; + + case Blob5://EXPERIMENTAL + + rot = 0; + aspectScale =1.0; + + temp_y=-1*(y-1.0); + + cos_rot = cosf(context.time*0.3f); + sin_rot = sinf(context.time*0.3f); + samples = 512-32; + + for ( int i=0;i<512-32;i++) + { + float x0 = (context.beatDetect->pcm->pcmdataR[i]*context.beatDetect->pcm->pcmdataL[i+32] + context.beatDetect->pcm->pcmdataL[i+32]*context.beatDetect->pcm->pcmdataR[i]); + float y0 = (context.beatDetect->pcm->pcmdataR[i]*context.beatDetect->pcm->pcmdataR[i] - context.beatDetect->pcm->pcmdataL[i+32]*context.beatDetect->pcm->pcmdataL[i+32]); + wavearray[i][0]=((x0*cos_rot - y0*sin_rot)*scale*0.5*(context.aspectCorrect ? context.aspectRatio : 1.0) + x); + wavearray[i][1]=( (x0*sin_rot + y0*cos_rot)*scale*0.5 + temp_y); + } + break; + + case Line://single waveform + + + wave_x_temp=-2*0.4142*(fabs(fabs(mystery)-.5)-.5); + + rot = -mystery*90; + aspectScale =1.0+wave_x_temp; + wave_x_temp=-1*(x-1.0); + samples = 0 ? 512-32 : context.beatDetect->pcm->numsamples; + + for ( int i=0;i< samples;i++) + { + + wavearray[i][0]=i/(float) samples; + wavearray[i][1]=context.beatDetect->pcm->pcmdataR[i]*.04*scale+wave_x_temp; + + } + // printf("%f %f\n",renderTarget->texsize*wave_y_temp,wave_y_temp); + + break; + + case DoubleLine://dual waveforms + + + wave_x_temp=-2*0.4142*(fabs(fabs(mystery)-.5)-.5); + + rot = -mystery*90; + aspectScale =1.0+wave_x_temp; + + + samples = 0 ? 512-32 : context.beatDetect->pcm->numsamples; + two_waves = true; + + double y_adj = y*y*.5; + + wave_y_temp=-1*(x-1); + + for ( int i=0;ipcm->pcmdataL[i]*.04*scale+(wave_y_temp+y_adj); + } + + for ( int i=0;ipcm->pcmdataR[i]*.04*scale+(wave_y_temp-y_adj); + } + + break; + + } +} diff --git a/3rdparty/libprojectm/Renderer/MilkdropWaveform.hpp b/3rdparty/libprojectm/Renderer/MilkdropWaveform.hpp new file mode 100644 index 000000000..cdafd93ac --- /dev/null +++ b/3rdparty/libprojectm/Renderer/MilkdropWaveform.hpp @@ -0,0 +1,65 @@ +/* + * MilkdropWaveform.hpp + * + * Created on: Jun 25, 2008 + * Author: pete + */ + +#ifndef MILKDROPWAVEFORM_HPP_ +#define MILKDROPWAVEFORM_HPP_ + +#include "Renderable.hpp" + +enum MilkdropWaveformMode + { + Circle=0, RadialBlob, Blob2, Blob3, DerivativeLine, Blob5, Line, DoubleLine + }; + + +class MilkdropWaveform : public RenderItem +{ +public: + + + float x; + float y; + + float r; + float g; + float b; + float a; + + float mystery; + + MilkdropWaveformMode mode; + + bool additive; + bool dots; + bool thick; + bool modulateAlphaByVolume; + bool maximizeColors; + float scale; + float smoothing; + + MilkdropWaveform(); + void Draw(RenderContext &context); + + float modOpacityStart; + float modOpacityEnd; + +private: + float temp_a; + float rot; + float aspectScale; + int samples; + bool two_waves; + bool loop; + float wavearray[2048][2]; + float wavearray2[2048][2]; + + void MaximizeColors(RenderContext &context); + void ModulateOpacityByVolume(RenderContext &context); + void WaveformMath(RenderContext &context); + +}; +#endif /* MILKDROPWAVEFORM_HPP_ */ diff --git a/3rdparty/libprojectm/Renderer/PerPixelMesh.cpp b/3rdparty/libprojectm/Renderer/PerPixelMesh.cpp new file mode 100644 index 000000000..971fae0be --- /dev/null +++ b/3rdparty/libprojectm/Renderer/PerPixelMesh.cpp @@ -0,0 +1,48 @@ +#include +#include +#include "PerPixelMesh.hpp" +#include "omptl/omptl" +#include "omptl/omptl_algorithm" + +PerPixelMesh::PerPixelMesh(int width, int height) : width(width), height(height), size (width * height), + p(width * height, Point(0,0)), + p_original(width * height, Point(0,0)), + identity(width * height, PerPixelContext(0,0,0,0,0,0)) + { + for (int j=0;j + +struct Point +{ + float x; + float y; + + Point(float x, float y); +}; + +struct PerPixelContext +{ + float x; + float y; + float rad; + float theta; + + int i; + int j; + + PerPixelContext(float x, float y, float rad, float theta, int i, int j); +}; + +class PerPixelMesh +{ +public: + int width; + int height; + int size; + + std::vector p; + std::vector p_original; + std::vector identity; + + PerPixelMesh(int width, int height); + + void Reset(); +}; + + + +#endif diff --git a/3rdparty/libprojectm/Renderer/PerlinNoise.cpp b/3rdparty/libprojectm/Renderer/PerlinNoise.cpp new file mode 100644 index 000000000..a6bda550e --- /dev/null +++ b/3rdparty/libprojectm/Renderer/PerlinNoise.cpp @@ -0,0 +1,53 @@ +/* + * PerlinNoise.cpp + * + * Created on: Jul 11, 2008 + * Author: pete + */ + +#include "PerlinNoise.hpp" +#include +#include + +PerlinNoise::PerlinNoise() +{ + for (int x = 0; x < 256;x++) + for (int y = 0; y < 256;y++) + noise_lq[x][y] = noise(x , y); + + for (int x = 0; x < 32;x++) + for (int y = 0; y < 32;y++) + noise_lq_lite[x][y] = noise(4*x,16*y); + + for (int x = 0; x < 256;x++) + for (int y = 0; y < 256;y++) + noise_mq[x][y] = InterpolatedNoise((float)x/(float)2.0,(float)y/(float)2.0); + + for (int x = 0; x < 256;x++) + for (int y = 0; y < 256;y++) + noise_hq[x][y] = InterpolatedNoise((float)x/(float)3.0,(float)y/(float)3.0); + + for (int x = 0; x < 32;x++) + for (int y = 0; y < 32;y++) + for (int z = 0; z < 32;z++) + noise_lq_vol[x][y][z] = noise(x,y,z); + + for (int x = 0; x < 32;x++) + for (int y = 0; y < 32;y++) + for (int z = 0; z < 32;z++) + noise_hq_vol[x][y][z] = noise(x,y,z);//perlin_noise_3d(x,y,z,6121,7,seed3,0.5,64); + + int seed = rand()%1000; + + int size = 512; + int octaves = sqrt((double)size); + + for (int x = 0; x < size;x++) + for (int y = 0; y < size;y++) + noise_perlin[x][y] = perlin_noise_2d(x,y,6321,octaves,seed,0.5,size/4); +} + +PerlinNoise::~PerlinNoise() +{ + // TODO Auto-generated destructor stub +} diff --git a/3rdparty/libprojectm/Renderer/PerlinNoise.hpp b/3rdparty/libprojectm/Renderer/PerlinNoise.hpp new file mode 100644 index 000000000..e1193d722 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/PerlinNoise.hpp @@ -0,0 +1,241 @@ +/* + * PerlinNoise.hpp + * + * Created on: Jul 11, 2008 + * Author: pete + */ + +#ifndef PERLINNOISE_HPP_ +#define PERLINNOISE_HPP_ + +#include + +class PerlinNoise +{ +public: + + float noise_lq[256][256]; + float noise_lq_lite[32][32]; + float noise_mq[256][256]; + float noise_hq[256][256]; + float noise_perlin[512][512]; + float noise_lq_vol[32][32][32]; + float noise_hq_vol[32][32][32]; + + + PerlinNoise(); + virtual ~PerlinNoise(); + +private: + + static inline float noise( int x) + { + x = (x<<13)^x; + return (((x * (x * x * 15731 + 789221) + 1376312589) & 0x7fffffff) / 2147483648.0); + } + + static inline float noise(int x, int y) + { + int n = x + y * 57; + return noise(n); + } + + static inline float noise(int x, int y, int z) + { + int n = x + y * 57 + z * 141; + return noise(n); + } + + static inline float cos_interp(float a, float b, float x) + { + float ft = x * 3.1415927; + float f = (1 - cos(ft)) * .5; + + return a*(1-f) + b*f; + } + + static inline float cubic_interp(float v0, float v1, float v2, float v3, float x) + { + float P = (v3 - v2) - (v0 - v1); + float Q = (v0 - v1) - P; + float R = v2 - v0; + + return P*pow(x,3) + Q * pow(x,2) + R*x + v1; + } + + static inline float InterpolatedNoise(float x, float y) + { + int integer_X = int(x); + float fractional_X = x - integer_X; + + int integer_Y = int(y); + float fractional_Y = y - integer_Y; + + float a0 = noise(integer_X - 1, integer_Y - 1); + float a1 = noise(integer_X, integer_Y - 1); + float a2 = noise(integer_X + 1, integer_Y - 1); + float a3 = noise(integer_X + 2, integer_Y - 1); + + float x0 = noise(integer_X - 1, integer_Y); + float x1 = noise(integer_X, integer_Y); + float x2 = noise(integer_X + 1, integer_Y); + float x3 = noise(integer_X + 2, integer_Y); + + float y0 = noise(integer_X + 0, integer_Y + 1); + float y1 = noise(integer_X, integer_Y + 1); + float y2 = noise(integer_X + 1, integer_Y + 1); + float y3 = noise(integer_X + 2, integer_Y + 1); + + float b0 = noise(integer_X - 1, integer_Y + 2); + float b1 = noise(integer_X, integer_Y + 2); + float b2 = noise(integer_X + 1, integer_Y + 2); + float b3 = noise(integer_X + 2, integer_Y + 2); + + float i0 = cubic_interp(a0 , a1, a2, a3, fractional_X); + float i1 = cubic_interp(x0 , x1, x2, x3, fractional_X); + float i2 = cubic_interp(y0 , y1, y2, y3, fractional_X); + float i3 = cubic_interp(b0 , b1, b2, b3, fractional_X); + + return cubic_interp(i0, i1 , i2 , i3, fractional_Y); + + } + + static inline float perlin_octave_2d(float x,float y, int width, int seed, float period) + { + + float freq=1/(float)(period); + + int num=(int)(width*freq); + int step_x=(int)(x*freq); + int step_y=(int)(y*freq); + float zone_x=x*freq-step_x; + float zone_y=y*freq-step_y; + int box=step_x+step_y*num; + int noisedata=(box+seed); + + float u=cubic_interp(noise(noisedata-num-1),noise(noisedata-num),noise(noisedata-num+1),noise(noisedata-num+2),zone_x); + float a=cubic_interp(noise(noisedata-1),noise(noisedata),noise(noisedata+1),noise(noisedata+2),zone_x); + float b=cubic_interp(noise(noisedata+num -1),noise(noisedata+num),noise(noisedata+1+num),noise(noisedata+2+num),zone_x); + float v=cubic_interp(noise(noisedata+2*num -1),noise(noisedata+2*num),noise(noisedata+1+2*num),noise(noisedata+2+2*num),zone_x); + + float value=cubic_interp(u,a,b,v,zone_y); + + return value; + } + + + static inline float perlin_octave_2d_cos(float x,float y, int width, int seed, float period) + { + + float freq=1/(float)(period); + + int num=(int)(width*freq); + int step_x=(int)(x*freq); + int step_y=(int)(y*freq); + float zone_x=x*freq-step_x; + float zone_y=y*freq-step_y; + int box=step_x+step_y*num; + int noisedata=(box+seed); + + float a=cos_interp(noise(noisedata),noise(noisedata+1),zone_x); + float b=cos_interp(noise(noisedata+num),noise(noisedata+1+num),zone_x); + + float value=cos_interp(a,b,zone_y); + + return value; + } + + + + static inline float perlin_octave_3d(float x,float y, float z,int width, int seed, float period) + { + float freq=1/(float)(period); + + int num=(int)(width*freq); + int step_x=(int)(x*freq); + int step_y=(int)(y*freq); + int step_z=(int)(z*freq); + float zone_x=x*freq-step_x; + float zone_y=y*freq-step_y; + float zone_z=z*freq-step_z; + + int boxB=step_x+step_y+step_z*num; + int boxC=step_x+step_y+step_z*(num+1); + int boxD=step_x+step_y+step_z*(num+2); + int boxA=step_x+step_y+step_z*(num-1); + + float u,a,b,v,noisedata,box; + + box = boxA; + noisedata=(box+seed); + u=cubic_interp(noise(noisedata-num-1),noise(noisedata-num),noise(noisedata-num+1),noise(noisedata-num+2),zone_x); + a=cubic_interp(noise(noisedata-1),noise(noisedata),noise(noisedata+1),noise(noisedata+2),zone_x); + b=cubic_interp(noise(noisedata+num -1),noise(noisedata+num),noise(noisedata+1+num),noise(noisedata+2+num),zone_x); + v=cubic_interp(noise(noisedata+2*num -1),noise(noisedata+2*num),noise(noisedata+1+2*num),noise(noisedata+2+2*num),zone_x); + float A=cubic_interp(u,a,b,v,zone_y); + + box = boxB; + noisedata=(box+seed); + u=cubic_interp(noise(noisedata-num-1),noise(noisedata-num),noise(noisedata-num+1),noise(noisedata-num+2),zone_x); + a=cubic_interp(noise(noisedata-1),noise(noisedata),noise(noisedata+1),noise(noisedata+2),zone_x); + b=cubic_interp(noise(noisedata+num -1),noise(noisedata+num),noise(noisedata+1+num),noise(noisedata+2+num),zone_x); + v=cubic_interp(noise(noisedata+2*num -1),noise(noisedata+2*num),noise(noisedata+1+2*num),noise(noisedata+2+2*num),zone_x); + float B=cubic_interp(u,a,b,v,zone_y); + + box = boxC; + noisedata=(box+seed); + u=cubic_interp(noise(noisedata-num-1),noise(noisedata-num),noise(noisedata-num+1),noise(noisedata-num+2),zone_x); + a=cubic_interp(noise(noisedata-1),noise(noisedata),noise(noisedata+1),noise(noisedata+2),zone_x); + b=cubic_interp(noise(noisedata+num -1),noise(noisedata+num),noise(noisedata+1+num),noise(noisedata+2+num),zone_x); + v=cubic_interp(noise(noisedata+2*num -1),noise(noisedata+2*num),noise(noisedata+1+2*num),noise(noisedata+2+2*num),zone_x); + float C=cubic_interp(u,a,b,v,zone_y); + + box = boxD; + noisedata=(box+seed); + u=cubic_interp(noise(noisedata-num-1),noise(noisedata-num),noise(noisedata-num+1),noise(noisedata-num+2),zone_x); + a=cubic_interp(noise(noisedata-1),noise(noisedata),noise(noisedata+1),noise(noisedata+2),zone_x); + b=cubic_interp(noise(noisedata+num -1),noise(noisedata+num),noise(noisedata+1+num),noise(noisedata+2+num),zone_x); + v=cubic_interp(noise(noisedata+2*num -1),noise(noisedata+2*num),noise(noisedata+1+2*num),noise(noisedata+2+2*num),zone_x); + float D=cubic_interp(u,a,b,v,zone_y); + + float value =cubic_interp(A,B,C,D,zone_z); + + return value; + } + + + static inline float perlin_noise_2d(int x, int y, int width, int octaves, int seed, float persistance, float basePeriod) + { + float p = persistance; + float val = 0.0; + + for (int i = 0; igx = gx; + this->gy = gy; + + this->x_mesh= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( int x = 0; x < gx; x++ ) + { + this->x_mesh[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + this->y_mesh= ( float ** ) wipemalloc ( gx * sizeof ( float * ) ); + for ( int x = 0; x < gx; x++ ) + { + this->y_mesh[x] = ( float * ) wipemalloc ( gy * sizeof ( float ) ); + } + +} + +Pipeline::~Pipeline() +{ +if (staticPerPixel) +{ + for ( int x = 0; x < this->gx; x++ ) + { + free(this->x_mesh[x]); + free(this->y_mesh[x]); + } + free(x_mesh); + free(y_mesh); +} +} + +//void Pipeline::Render(const BeatDetect &music, const PipelineContext &context){} +Point Pipeline::PerPixel(Point p, const PerPixelContext context) +{return p;} diff --git a/3rdparty/libprojectm/Renderer/Pipeline.hpp b/3rdparty/libprojectm/Renderer/Pipeline.hpp new file mode 100644 index 000000000..ecbda5a42 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/Pipeline.hpp @@ -0,0 +1,56 @@ +#ifndef Pipeline_HPP +#define Pipeline_HPP + +#include +#include "PerPixelMesh.hpp" +#include "Renderable.hpp" +#include "Filters.hpp" +#include "PipelineContext.hpp" +#include "Shader.hpp" +#include "../Common.hpp" +//This class is the input to projectM's renderer +// +//Most implemenatations should implement PerPixel in order to get multi-threaded +//dynamic PerPixel equations. If you MUST (ie Milkdrop compatability), you can use the +//setStaticPerPixel function and fill in x_mesh and y_mesh yourself. +class Pipeline +{ +public: + + //static per pixel stuff + bool staticPerPixel; + int gx; + int gy; + + float** x_mesh; + float** y_mesh; + //end static per pixel + + bool textureWrap; + float screenDecay; + + //variables passed to pixel shaders + float q[NUM_Q_VARIABLES]; + + //blur settings n=bias x=scale + float blur1n; + float blur2n; + float blur3n; + float blur1x; + float blur2x; + float blur3x; + float blur1ed; + + Shader warpShader; + Shader compositeShader; + + std::vector drawables; + std::vector compositeDrawables; + + Pipeline(); + void setStaticPerPixel(int gx, int gy); + virtual ~Pipeline(); + virtual Point PerPixel(Point p, const PerPixelContext context); +}; + +#endif diff --git a/3rdparty/libprojectm/Renderer/PipelineContext.cpp b/3rdparty/libprojectm/Renderer/PipelineContext.cpp new file mode 100644 index 000000000..223314756 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/PipelineContext.cpp @@ -0,0 +1,11 @@ +/* + * PipelineContext.cpp + * + * Created on: Jun 22, 2008 + * Author: pete + */ + +#include "PipelineContext.hpp" + +PipelineContext::PipelineContext() {} +PipelineContext::~PipelineContext() {} diff --git a/3rdparty/libprojectm/Renderer/PipelineContext.hpp b/3rdparty/libprojectm/Renderer/PipelineContext.hpp new file mode 100644 index 000000000..1b7f899e4 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/PipelineContext.hpp @@ -0,0 +1,23 @@ +/* + * PipelineContext.hpp + * + * Created on: Jun 22, 2008 + * Author: pete + */ + +#ifndef PIPELINECONTEXT_HPP_ +#define PIPELINECONTEXT_HPP_ + +class PipelineContext +{ +public: + int fps; + float time; + int frame; + float progress; + + PipelineContext(); + virtual ~PipelineContext(); +}; + +#endif /* PIPELINECONTEXT_HPP_ */ diff --git a/3rdparty/libprojectm/Renderer/RenderItemDistanceMetric.cpp b/3rdparty/libprojectm/Renderer/RenderItemDistanceMetric.cpp new file mode 100644 index 000000000..e032ba558 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/RenderItemDistanceMetric.cpp @@ -0,0 +1,13 @@ +/* + * RenderItemDistanceMetric.cpp + * + * Created on: Feb 18, 2009 + * Author: struktured + */ + +#include "RenderItemDistanceMetric.hpp" + +// Assumes [0, 1] distance space because it's easy to manage with overflow +// Underflow is obviously possible though. +const double RenderItemDistanceMetric::NOT_COMPARABLE_VALUE + (1.0); diff --git a/3rdparty/libprojectm/Renderer/RenderItemDistanceMetric.hpp b/3rdparty/libprojectm/Renderer/RenderItemDistanceMetric.hpp new file mode 100644 index 000000000..1f9e0bbd3 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/RenderItemDistanceMetric.hpp @@ -0,0 +1,145 @@ +/* + * RenderItemDistanceMetric.h + * + * Created on: Feb 16, 2009 + * Author: struktured + */ + +#ifndef RenderItemDISTANCEMETRIC_H_ +#define RenderItemDISTANCEMETRIC_H_ + +#include "Common.hpp" +#include "Renderable.hpp" +#include +#include +#include + + +/// Compares two render items and returns zero if they are virtually equivalent and large values +/// when they are dissimilar. If two render items cannot be compared, NOT_COMPARABLE_VALUE is returned. +class RenderItemDistanceMetric : public std::binary_function { +public: + const static double NOT_COMPARABLE_VALUE; + virtual double operator()(const RenderItem * r1, const RenderItem * r2) const = 0; + virtual TypeIdPair typeIdPair() const = 0; +}; + +// A base class to construct render item distance metrics. Just specify your two concrete +// render item types as template parameters and override the computeDistance() function. +template +class RenderItemDistance : public RenderItemDistanceMetric { + +protected: +// Override to create your own distance fmetric for your specified custom types. +virtual double computeDistance(const R1 * r1, const R2 * r2) const = 0; + +public: + +inline virtual double operator()(const RenderItem * r1, const RenderItem * r2) const { + if (supported(r1, r2)) + return computeDistance(dynamic_cast(r1), dynamic_cast(r2)); + else if (supported(r2,r1)) + return computeDistance(dynamic_cast(r2), dynamic_cast(r1)); + else + return NOT_COMPARABLE_VALUE; +} + +// Returns true if and only if r1 and r2 are the same type as or derived from R1, R2 respectively +inline bool supported(const RenderItem * r1, const RenderItem * r2) const { + return dynamic_cast(r1) && dynamic_cast(r2); + //return typeid(r1) == typeid(const R1 *) && typeid(r2) == typeid(const R2 *); +} + +inline TypeIdPair typeIdPair() const { + return TypeIdPair(typeid(const R1*).name(), typeid(const R2*).name()); +} + +}; + + +class RTIRenderItemDistance : public RenderItemDistance { +public: + + RTIRenderItemDistance() {} + virtual ~RTIRenderItemDistance() {} + +protected: + virtual inline double computeDistance(const RenderItem * lhs, const RenderItem * rhs) const { + if (typeid(*lhs) == typeid(*rhs)) { + //std::cerr << typeid(*lhs).name() << " and " << typeid(*rhs).name() << "are comparable" << std::endl; + + return 0.0; + } + else { + //std::cerr << typeid(*lhs).name() << " and " << typeid(*rhs).name() << "not comparable" << std::endl; + return NOT_COMPARABLE_VALUE; + } + } + + +}; + + + +class ShapeXYDistance : public RenderItemDistance { + +public: + + ShapeXYDistance() {} + virtual ~ShapeXYDistance() {} + +protected: + + virtual inline double computeDistance(const Shape * lhs, const Shape * rhs) const { + return (meanSquaredError(lhs->x, rhs->x) + meanSquaredError(lhs->y, rhs->y)) / 2; + } + +}; + + +class MasterRenderItemDistance : public RenderItemDistance { + +typedef std::map DistanceMetricMap; +public: + + MasterRenderItemDistance() {} + virtual ~MasterRenderItemDistance() {} + + inline void addMetric(RenderItemDistanceMetric * fun) { + _distanceMetricMap[fun->typeIdPair()] = fun; + } + +protected: + virtual inline double computeDistance(const RenderItem * lhs, const RenderItem * rhs) const { + + RenderItemDistanceMetric * metric; + + TypeIdPair pair(typeid(lhs), typeid(rhs)); + + + // If specialized metric exists, use it to get higher granularity + // of correctness + if (_distanceMetricMap.count(pair)) { + metric = _distanceMetricMap[pair]; + } else if (_distanceMetricMap.count(pair = TypeIdPair(typeid(rhs), typeid(lhs)))) { + metric = _distanceMetricMap[pair]; + } else { // Failing that, use rtti && shape distance if its a shape type + + const double rttiError = _rttiDistance(lhs,rhs); + + /// @bug This is a non elegant approach to supporting shape distance + if (rttiError == 0 && _shapeXYDistance.supported(lhs,rhs)) + return _shapeXYDistance(lhs, rhs); + else return rttiError; + } + + return (*metric)(lhs, rhs); + } + +private: + mutable RTIRenderItemDistance _rttiDistance; + mutable ShapeXYDistance _shapeXYDistance; + mutable DistanceMetricMap _distanceMetricMap; +}; + +#endif /* RenderItemDISTANCEMETRIC_H_ */ diff --git a/3rdparty/libprojectm/Renderer/RenderItemMatcher.cpp b/3rdparty/libprojectm/Renderer/RenderItemMatcher.cpp new file mode 100644 index 000000000..cf107502a --- /dev/null +++ b/3rdparty/libprojectm/Renderer/RenderItemMatcher.cpp @@ -0,0 +1,34 @@ +#include "RenderItemMatcher.hpp" + +double RenderItemMatcher::computeMatching(const RenderItemList & lhs, const RenderItemList & rhs) const { + for (int i = 0; i < lhs.size();i++) { + int j; + for (j = 0; j < rhs.size();j++) + _weights[i][j] = _distanceFunction(lhs[i], rhs[j]); + for (; j < lhs.size();j++) + _weights[i][j] = RenderItemDistanceMetric::NOT_COMPARABLE_VALUE; + } + + + const double error = _hungarianMethod(_weights, lhs.size()); + //std::cout << "[computeMatching] total error is " << error << std::endl; + return error; +} + + + +void RenderItemMatcher::setMatches + (const RenderItemList & lhs_src, const RenderItemList & rhs_src) const { + + for (int i = 0; i < lhs_src.size();i++) { + const int j = _hungarianMethod.matching(i); + + // hack + if (true || _weights[i][j] == RenderItemDistanceMetric::NOT_COMPARABLE_VALUE) { + _results.unmatchedLeft.push_back(lhs_src[i]); + _results.unmatchedRight.push_back(rhs_src[i]); + } else { + _results.matches.push_back(std::make_pair(lhs_src[i], rhs_src[j])); + } + } +} \ No newline at end of file diff --git a/3rdparty/libprojectm/Renderer/RenderItemMatcher.hpp b/3rdparty/libprojectm/Renderer/RenderItemMatcher.hpp new file mode 100644 index 000000000..387d36966 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/RenderItemMatcher.hpp @@ -0,0 +1,77 @@ +/* + * RenderItemMatcher.hpp + * + * Created on: Feb 16, 2009 + * Author: struktured + */ + +#ifndef RenderItemMatcher_HPP +#define RenderItemMatcher_HPP + +#include "RenderItemDistanceMetric.hpp" +#include +#include +#include +#include "HungarianMethod.hpp" + +typedef std::vector > RenderItemMatchList; + +class MatchResults; + +class RenderItemMatcher : public std::binary_function { + +public: + +struct MatchResults { + RenderItemMatchList matches; + std::vector unmatchedLeft; + std::vector unmatchedRight; + + double error; +}; + + static const std::size_t MAXIMUM_SET_SIZE = 1000; + + /// Computes an optimal matching between two renderable item sets. + /// @param lhs the "left-hand side" list of render items. + /// @param rhs the "right-hand side" list of render items. + /// @returns a list of match pairs, possibly self referencing, and an error estimate of the matching. + inline virtual void operator()(const RenderItemList & lhs, const RenderItemList & rhs) const { + + // Ensure the first argument is greater than next to aid the helper function's logic. + if (lhs.size() >= rhs.size()) { + _results.error = computeMatching(lhs, rhs); + setMatches(lhs, rhs); + } else { + _results.error = computeMatching(rhs, lhs); + setMatches(rhs, lhs); + } + + + } + + RenderItemMatcher() {} + virtual ~RenderItemMatcher() {} + + inline MatchResults & matchResults() { return _results; } + + inline double weight(int i, int j) const { return _weights[i][j]; } + + MasterRenderItemDistance & distanceFunction() { return _distanceFunction; } + +private: + mutable HungarianMethod _hungarianMethod; + mutable double _weights[MAXIMUM_SET_SIZE][MAXIMUM_SET_SIZE]; + + mutable MatchResults _results; + + /// @idea interface this entirely allow overriding of its type. + mutable MasterRenderItemDistance _distanceFunction; + + double computeMatching(const RenderItemList & lhs, const RenderItemList & rhs) const; + + void setMatches(const RenderItemList & lhs_src, const RenderItemList & rhs_src) const; + +}; + +#endif diff --git a/3rdparty/libprojectm/Renderer/RenderItemMergeFunction.hpp b/3rdparty/libprojectm/Renderer/RenderItemMergeFunction.hpp new file mode 100644 index 000000000..6316641e6 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/RenderItemMergeFunction.hpp @@ -0,0 +1,236 @@ +/* + * RenderItemMergeFunction.hpp + * + * Created on: Feb 16, 2009 + * Author: struktured + */ + +#ifndef RenderItemMergeFunction_HPP_ +#define RenderItemMergeFunction_HPP_ + +#include "Common.hpp" +#include "Renderable.hpp" +#include "Waveform.hpp" +#include +#include +#include + + +template +inline T interpolate(T a, T b, float ratio) +{ + return (ratio*a + (1-ratio)*b) * 0.5; +} + +template <> +inline int interpolate(int a, int b, float ratio) +{ + return (int)(ratio*(float)a + (1-ratio)*(float)b) * 0.5; +} + +template <> +inline bool interpolate(bool a, bool b, float ratio) +{ + return (ratio >= 0.5) ? a : b; +} + + +/// Merges two render items and returns zero if they are virtually equivalent and large values +/// when they are dissimilar. If two render items cannot be compared, NOT_COMPARABLE_VALUE is returned. +class RenderItemMergeFunction { +public: + virtual RenderItem * operator()(const RenderItem * r1, const RenderItem * r2, double ratio) const = 0; + virtual TypeIdPair typeIdPair() const = 0; +}; + +/// A base class to construct render item distance mergeFunctions. Just specify your two concrete +/// render item types as template parameters and override the computeMerge() function. +template +class RenderItemMerge : public RenderItemMergeFunction { + +protected: +/// Override to create your own distance mergeFunction for your specified custom types. +virtual R3 * computeMerge(const R1 * r1, const R2 * r2, double ratio) const = 0; + +public: + +inline virtual R3 * operator()(const RenderItem * r1, const RenderItem * r2, double ratio) const { + if (supported(r1, r2)) + return computeMerge(dynamic_cast(r1), dynamic_cast(r2), ratio); + else if (supported(r2,r1)) + return computeMerge(dynamic_cast(r2), dynamic_cast(r1), ratio); + else + return 0; +} + +/// Returns true if and only if r1 and r2 are of type R1 and R2 respectively. +inline bool supported(const RenderItem * r1, const RenderItem * r2) const { + return typeid(r1) == typeid(const R1 *) && typeid(r2) == typeid(const R2 *); +} + +inline TypeIdPair typeIdPair() const { + return TypeIdPair(typeid(const R1*).name(), typeid(const R2*).name()); +} + +}; + + +class ShapeMerge : public RenderItemMerge { + +public: + + ShapeMerge() {} + virtual ~ShapeMerge() {} + +protected: + + virtual inline Shape * computeMerge(const Shape * lhs, const Shape * rhs, double ratio) const { + + Shape * ret = new Shape(); + Shape & target = *ret; + + target.x = interpolate(lhs->x, rhs->x, ratio); + target.y = interpolate(lhs->y, rhs->y, ratio); + target.a = interpolate(lhs->a, rhs->a, ratio); + target.a2 = interpolate(lhs->a2, rhs->a2, ratio); + target.r = interpolate(lhs->r, rhs->r, ratio); + target.r2 = interpolate(lhs->r2, rhs->r2, ratio); + target.g = interpolate(lhs->g, rhs->g, ratio); + target.g2 = interpolate(lhs->g2, rhs->g2, ratio); + target.b = interpolate(lhs->b, rhs->b, ratio); + target.b2 = interpolate(lhs->b2, rhs->b2, ratio); + + target.ang = interpolate(lhs->ang, rhs->ang, ratio); + target.radius = interpolate(lhs->radius, rhs->radius, ratio); + + target.tex_ang = interpolate(lhs->tex_ang, rhs->tex_ang, ratio); + target.tex_zoom = interpolate(lhs->tex_zoom, rhs->tex_zoom, ratio); + + target.border_a = interpolate(lhs->border_a, rhs->border_a, ratio); + target.border_r = interpolate(lhs->border_r, rhs->border_r, ratio); + target.border_g = interpolate(lhs->border_g, rhs->border_g, ratio); + target.border_b = interpolate(lhs->border_b, rhs->border_b, ratio); + + target.sides = interpolate(lhs->sides, rhs->sides, ratio); + + target.additive = interpolate(lhs->additive, rhs->additive, ratio); + target.textured = interpolate(lhs->textured, rhs->textured, ratio); + target.thickOutline = interpolate(lhs->thickOutline, rhs->thickOutline, ratio); + target.enabled = interpolate(lhs->enabled, rhs->enabled, ratio); + + target.masterAlpha = interpolate(lhs->masterAlpha, rhs->masterAlpha, ratio); + target.imageUrl = (ratio > 0.5) ? lhs->imageUrl : rhs->imageUrl, ratio; + + return ret; + } +}; + +class BorderMerge : public RenderItemMerge { + + public: + + BorderMerge() {} + virtual ~BorderMerge() {} + + protected: + + virtual inline Border * computeMerge(const Border * lhs, const Border * rhs, double ratio) const + { + Border * ret = new Border(); + + Border & target = *ret; + + target.inner_a = interpolate(lhs->inner_a, rhs->inner_a, ratio); + target.inner_r = interpolate(lhs->inner_r, rhs->inner_r, ratio); + target.inner_g = interpolate(lhs->inner_g, rhs->inner_g, ratio); + target.inner_b = interpolate(lhs->inner_b, rhs->inner_b, ratio); + target.inner_size = interpolate(lhs->inner_size, rhs->inner_size, ratio); + + target.outer_a = interpolate(lhs->outer_a, rhs->outer_a, ratio); + target.outer_r = interpolate(lhs->outer_r, rhs->outer_r, ratio); + target.outer_g = interpolate(lhs->outer_g, rhs->outer_g, ratio); + target.outer_b = interpolate(lhs->outer_b, rhs->outer_b, ratio); + target.outer_size = interpolate(lhs->outer_size, rhs->outer_size, ratio); + + target.masterAlpha = interpolate(lhs->masterAlpha, rhs->masterAlpha, ratio); + + return ret; + } +}; + + +class WaveformMerge : public RenderItemMerge { + + public: + + WaveformMerge() {} + virtual ~WaveformMerge() {} + + protected: + + /// @BUG unimplemented + virtual inline Waveform * computeMerge(const Waveform * lhs, const Waveform * rhs, double ratio) const + { + return 0; +/* + Waveform * ret = new Waveform(); + Waveform & target = *ret; + + target.additive = interpolate(lhs->additive, rhs->additive, ratio); + target.dots = interpolate(lhs->dots, rhs->dots, ratio); + target.samples = (rhs->samples > lhs-> samples) ? lhs->samples : rhs->samples; + target.scaling = interpolate(lhs->scaling, rhs->scaling, ratio); + target.sep = interpolate(lhs->sep, rhs->sep, ratio); + target.smoothing = interpolate(lhs->smoothing, rhs->smoothing, ratio); + target.spectrum = interpolate(lhs->spectrum, rhs->spectrum, ratio); + target.thick = interpolate(lhs->thick, rhs->thick, ratio); + target.masterAlpha = interpolate(lhs->masterAlpha, rhs->masterAlpha, ratio); + + return ret; +*/ + } +}; + + +/// Use as the top level merge function. It stores a map of all other +/// merge functions, using the function that fits best with the +/// incoming type parameters. +class MasterRenderItemMerge : public RenderItemMerge { + +typedef std::map MergeFunctionMap; +public: + + MasterRenderItemMerge() {} + virtual ~MasterRenderItemMerge() {} + + inline void add(RenderItemMergeFunction * fun) { + _mergeFunctionMap[fun->typeIdPair()] = fun; + } + +protected: + virtual inline RenderItem * computeMerge(const RenderItem * lhs, const RenderItem * rhs, double ratio) const { + + RenderItemMergeFunction * mergeFunction; + + TypeIdPair pair(typeid(lhs), typeid(rhs)); + if (_mergeFunctionMap.count(pair)) { + mergeFunction = _mergeFunctionMap[pair]; + } else if (_mergeFunctionMap.count(pair = TypeIdPair(typeid(rhs), typeid(lhs)))) { + mergeFunction = _mergeFunctionMap[pair]; + } else { + mergeFunction = 0; + } + + // If specialized mergeFunction exists, use it to get higher granularity + // of correctness + if (mergeFunction) + return (*mergeFunction)(lhs, rhs, ratio); + else + return 0; + } + +private: + mutable MergeFunctionMap _mergeFunctionMap; +}; + +#endif /* RenderItemMergeFunction_HPP_ */ diff --git a/3rdparty/libprojectm/Renderer/Renderable.cpp b/3rdparty/libprojectm/Renderer/Renderable.cpp new file mode 100644 index 000000000..3693858dd --- /dev/null +++ b/3rdparty/libprojectm/Renderer/Renderable.cpp @@ -0,0 +1,355 @@ + +#include "Common.hpp" + +#ifdef USE_GLES1 +#include +#else +#ifdef __APPLE__ +#include +#include +#else +#include +#include +#endif +#endif + +#include "Renderable.hpp" +#include + +typedef float floatPair[2]; +typedef float floatTriple[3]; +typedef float floatQuad[4]; + +RenderContext::RenderContext() + : time(0),texsize(512), aspectRatio(1), aspectCorrect(false){}; + +RenderItem::RenderItem():masterAlpha(1){} + +DarkenCenter::DarkenCenter():RenderItem(){} +MotionVectors::MotionVectors():RenderItem(){} +Border::Border():RenderItem(){} + +void DarkenCenter::Draw(RenderContext &context) + { + //float unit=0.05f; + + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + float colors[6][4] = {{0, 0, 0, (3.0f/32.0f) * masterAlpha}, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + {0, 0, 0, 0}}; + + float points[6][2] = {{ 0.5, 0.5}, + { 0.45, 0.5}, + { 0.5, 0.45}, + { 0.55, 0.5}, + { 0.5, 0.55}, + { 0.45, 0.5}}; + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + + glVertexPointer(2,GL_FLOAT,0,points); + glColorPointer(4,GL_FLOAT,0,colors); + + glDrawArrays(GL_TRIANGLE_FAN,0,6); + + } + +Shape::Shape():RenderItem() +{ + std::string imageUrl = ""; + sides = 4; + thickOutline = false; + enabled = true; + additive = false; + textured = false; + + tex_zoom = 1.0; + tex_ang = 0.0; + + x = 0.5; + y = 0.5; + radius = 1.0; + ang = 0.0; + + r = 0.0; /* red color value */ + g = 0.0; /* green color value */ + b = 0.0; /* blue color value */ + a = 0.0; /* alpha color value */ + + r2 = 0.0; /* red color value */ + g2 = 0.0; /* green color value */ + b2 = 0.0; /* blue color value */ + a2 = 0.0; /* alpha color value */ + + border_r = 0.0; /* red color value */ + border_g = 0.0; /* green color value */ + border_b = 0.0; /* blue color value */ + border_a = 0.0; /* alpha color value */ + + +} + +void Shape::Draw(RenderContext &context) +{ + + float xval, yval; + float t; + + // printf("drawing shape %f\n", ang); + + float temp_radius= radius*(.707*.707*.707*1.04); + //Additive Drawing or Overwrite + if ( additive==0) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + else glBlendFunc(GL_SRC_ALPHA, GL_ONE); + + xval= x; + yval= -(y-1); + + if ( textured) + { + if (imageUrl !="") + { + GLuint tex= context.textureManager->getTexture(imageUrl); + if (tex != 0) + { + glBindTexture(GL_TEXTURE_2D, tex); + context.aspectRatio=1.0; + } + } + + glMatrixMode(GL_TEXTURE); + glPushMatrix(); + glLoadIdentity(); + + glEnable(GL_TEXTURE_2D); + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + + floatQuad *colors = new float[sides+2][4]; + floatPair *tex = new float[sides+2][2]; + floatPair *points = new float[sides+2][2]; + + //Define the center point of the shape + colors[0][0] = r; + colors[0][1] = g; + colors[0][2] = b; + colors[0][3] = a * masterAlpha; + tex[0][0] = 0.5; + tex[0][1] = 0.5; + points[0][0] = xval; + points[0][1] = yval; + + for ( int i=1;i< sides+2;i++) + { + colors[i][0]= r2; + colors[i][1]=g2; + colors[i][2]=b2; + colors[i][3]=a2 * masterAlpha; + + t = (i-1)/(float) sides; + tex[i][0] =0.5f + 0.5f*cosf(t*3.1415927f*2 + tex_ang + 3.1415927f*0.25f)*(context.aspectCorrect ? context.aspectRatio : 1.0)/ tex_zoom; + tex[i][1] = 0.5f + 0.5f*sinf(t*3.1415927f*2 + tex_ang + 3.1415927f*0.25f)/ tex_zoom; + points[i][0]=temp_radius*cosf(t*3.1415927f*2 + ang + 3.1415927f*0.25f)*(context.aspectCorrect ? context.aspectRatio : 1.0)+xval; + points[i][1]=temp_radius*sinf(t*3.1415927f*2 + ang + 3.1415927f*0.25f)+yval; + + + } + + glVertexPointer(2,GL_FLOAT,0,points); + glColorPointer(4,GL_FLOAT,0,colors); + glTexCoordPointer(2,GL_FLOAT,0,tex); + + glDrawArrays(GL_TRIANGLE_FAN,0,sides+2); + + glDisable(GL_TEXTURE_2D); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + + //Reset Texture state since we might have changed it +/* + if(this->renderTarget->useFBO) + { + glBindTexture( GL_TEXTURE_2D, renderTarget->textureID[1] ); + } + else + { + glBindTexture( GL_TEXTURE_2D, renderTarget->textureID[0] ); + } +*/ + + delete[] colors; + delete[] tex; + delete[] points; + } + else + {//Untextured (use color values) + + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + + floatQuad *colors = new float[sides+2][4]; + floatPair *points = new float[sides+2][2]; + + //Define the center point of the shape + colors[0][0]=r; + colors[0][1]=g; + colors[0][2]=b; + colors[0][3]=a * masterAlpha; + points[0][0]=xval; + points[0][1]=yval; + + + + for ( int i=1;i< sides+2;i++) + { + colors[i][0]=r2; + colors[i][1]=g2; + colors[i][2]=b2; + colors[i][3]=a2 * masterAlpha; + t = (i-1)/(float) sides; + points[i][0]=temp_radius*cosf(t*3.1415927f*2 + ang + 3.1415927f*0.25f)*(context.aspectCorrect ? context.aspectRatio : 1.0)+xval; + points[i][1]=temp_radius*sinf(t*3.1415927f*2 + ang + 3.1415927f*0.25f)+yval; + + } + + glVertexPointer(2,GL_FLOAT,0,points); + glColorPointer(4,GL_FLOAT,0,colors); + + + glDrawArrays(GL_TRIANGLE_FAN,0,sides+2); + //draw first n-1 triangular pieces + + delete[] colors; + delete[] points; + } + if (thickOutline==1) glLineWidth(context.texsize < 512 ? 1 : 2*context.texsize/512); + + glEnableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + + floatPair *points = new float[sides+1][2]; + + glColor4f( border_r, border_g, border_b, border_a * masterAlpha); + + for ( int i=0;i< sides;i++) + { + t = (i-1)/(float) sides; + points[i][0]= temp_radius*cosf(t*3.1415927f*2 + ang + 3.1415927f*0.25f)*(context.aspectCorrect ? context.aspectRatio : 1.0)+xval; + points[i][1]= temp_radius*sinf(t*3.1415927f*2 + ang + 3.1415927f*0.25f)+yval; + + } + + glVertexPointer(2,GL_FLOAT,0,points); + glDrawArrays(GL_LINE_LOOP,0,sides); + + if (thickOutline==1) glLineWidth(context.texsize < 512 ? 1 : context.texsize/512); + + delete[] points; + + +} + +void MotionVectors::Draw(RenderContext &context) +{ + glEnableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + + float intervalx=1.0/x_num; + float intervaly=1.0/y_num; + + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glPointSize(length); + glColor4f(r, g, b, a * masterAlpha); + + if (x_num + y_num < 600) + { + int size = x_num * y_num ; + + floatPair *points = new float[size][2]; + + for (int x=0;x<(int)x_num;x++) + { + for(int y=0;y<(int)y_num;y++) + { + float lx, ly, lz; + lx = x_offset+x*intervalx; + ly = y_offset+y*intervaly; + + points[(x * (int)y_num) + y][0] = lx; + points[(x * (int)y_num) + y][1] = ly; + } + } + + glVertexPointer(2,GL_FLOAT,0,points); + glDrawArrays(GL_POINTS,0,size); + + delete[] points; + } +} + +void Border::Draw(RenderContext &context) +{ + glEnableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + //Draw Borders + float of=outer_size*.5; + float iff=inner_size*.5; + float texof=1.0-of; + + //no additive drawing for borders + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glColor4f(outer_r, outer_g, outer_b, outer_a * masterAlpha); + + float pointsA[4][2] = {{0,0},{0,1},{of,0},{of,1}}; + glVertexPointer(2,GL_FLOAT,0,pointsA); + glDrawArrays(GL_TRIANGLE_STRIP,0,4); + + float pointsB[4][2] = {{of,0},{of,of},{texof,0},{texof,of}}; + glVertexPointer(2,GL_FLOAT,0,pointsB); + glDrawArrays(GL_TRIANGLE_STRIP,0,4); + + float pointsC[4][2] = {{texof,0},{texof,1},{1,0},{1,1}}; + glVertexPointer(2,GL_FLOAT,0,pointsC); + glDrawArrays(GL_TRIANGLE_STRIP,0,4); + + float pointsD[4][2] = {{of,1},{of,texof},{texof,1},{texof,texof}}; + glVertexPointer(2,GL_FLOAT,0,pointsD); + glDrawArrays(GL_TRIANGLE_STRIP,0,4); + + glColor4f(inner_r, inner_g, inner_b, inner_a * masterAlpha); + + glRectd(of, of, of+iff, texof); + glRectd(of+iff, of, texof-iff, of+iff); + glRectd(texof-iff, of, texof, texof); + glRectd(of+iff, texof, texof-iff, texof-iff); + + float pointsE[4][2] = {{of,of},{of,texof},{of+iff,of},{of+iff,texof}}; + glVertexPointer(2,GL_FLOAT,0,pointsE); + glDrawArrays(GL_TRIANGLE_STRIP,0,4); + + float pointsF[4][2] = {{of+iff,of},{of+iff,of+iff},{texof-iff,of},{texof-iff,of+iff}}; + glVertexPointer(2,GL_FLOAT,0,pointsF); + glDrawArrays(GL_TRIANGLE_STRIP,0,4); + + float pointsG[4][2] = {{texof-iff,of},{texof-iff,texof},{texof,of},{texof,texof}}; + glVertexPointer(2,GL_FLOAT,0,pointsG); + glDrawArrays(GL_TRIANGLE_STRIP,0,4); + + float pointsH[4][2] = {{of+iff,texof},{of+iff,texof-iff},{texof-iff,texof},{texof-iff,texof-iff}}; + glVertexPointer(2,GL_FLOAT,0,pointsH); + glDrawArrays(GL_TRIANGLE_STRIP,0,4); + +} diff --git a/3rdparty/libprojectm/Renderer/Renderable.hpp b/3rdparty/libprojectm/Renderer/Renderable.hpp new file mode 100644 index 000000000..b2aa72f83 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/Renderable.hpp @@ -0,0 +1,135 @@ +#ifndef Renderable_HPP +#define Renderable_HPP +#include +#include +#include "TextureManager.hpp" +class BeatDetect; + + +class RenderContext +{ +public: + float time; + int texsize; + float aspectRatio; + bool aspectCorrect; + BeatDetect *beatDetect; + TextureManager *textureManager; + + RenderContext(); +}; + +class RenderItem +{ +public: + float masterAlpha; + virtual void Draw(RenderContext &context) = 0; + RenderItem(); +}; + +typedef std::vector RenderItemList; + +class DarkenCenter : public RenderItem +{ +public: + DarkenCenter(); + void Draw(RenderContext &context); +}; + +class Shape : public RenderItem +{ +public: + std::string imageUrl; + int sides; + bool thickOutline; + bool enabled; + bool additive; + bool textured; + + float tex_zoom; + float tex_ang; + + float x; /* x position */ + float y; /* y position */ + float radius; + float ang; + + float r; /* red color value */ + float g; /* green color value */ + float b; /* blue color value */ + float a; /* alpha color value */ + + float r2; /* red color value */ + float g2; /* green color value */ + float b2; /* blue color value */ + float a2; /* alpha color value */ + + float border_r; /* red color value */ + float border_g; /* green color value */ + float border_b; /* blue color value */ + float border_a; /* alpha color value */ + + + Shape(); + virtual void Draw(RenderContext &context); +}; + +class Text : RenderItem +{ +}; + +class MotionVectors : public RenderItem +{ +public: + float r; + float g; + float b; + float a; + float length; + float x_num; + float y_num; + float x_offset; + float y_offset; + + void Draw(RenderContext &context); + MotionVectors(); +}; + +class Border : public RenderItem +{ +public: + float outer_size; + float outer_r; + float outer_g; + float outer_b; + float outer_a; + + float inner_size; + float inner_r; + float inner_g; + float inner_b; + float inner_a; + + void Draw(RenderContext &context); + Border(); +}; + +struct TypeIdPair { + TypeIdPair(const std::type_info & info1, const std::type_info & info2): id1(info1.name()), id2(info2.name()) {} + TypeIdPair(const std::string & id1, const std::string & id2): id1(id1), id2(id2) {} + std::string id1; + std::string id2; + inline bool operator<(const TypeIdPair & rhs) const { + return this->id1 < rhs.id1 || (this->id1 == rhs.id1 && this->id2 < rhs.id2); + } + + inline bool operator>(const TypeIdPair & rhs) const { + return !operator<(rhs) && !operator==(rhs); + } + + inline bool operator==(const TypeIdPair & rhs) const { + return this->id1 == rhs.id1 && this->id2 == rhs.id2; + } +}; + +#endif diff --git a/3rdparty/libprojectm/Renderer/Renderer.cpp b/3rdparty/libprojectm/Renderer/Renderer.cpp new file mode 100644 index 000000000..d8b5bba04 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/Renderer.cpp @@ -0,0 +1,774 @@ +#include "Renderer.hpp" +#include "wipemalloc.h" +#include "math.h" +#include "Common.hpp" +#include "KeyHandler.hpp" +#include "TextureManager.hpp" +#include +#include +#include +#include "omptl/omptl" +#include "omptl/omptl_algorithm" +#include "UserTexture.hpp" + +class Preset; + +Renderer::Renderer(int width, int height, int gx, int gy, int texsize, BeatDetect *beatDetect, std::string _presetURL, + std::string _titlefontURL, std::string _menufontURL) : + title_fontURL(_titlefontURL), menu_fontURL(_menufontURL), presetURL(_presetURL), m_presetName("None"), vw(width), + vh(height), texsize(texsize), mesh(gx, gy) +{ + int x; + int y; + + this->totalframes = 1; + this->noSwitch = false; + this->showfps = false; + this->showtitle = false; + this->showpreset = false; + this->showhelp = false; + this->showstats = false; + this->studio = false; + this->realfps = 0; + + this->drawtitle = 0; + + //this->title = "Unknown"; + + /** Other stuff... */ + this->correction = true; + this->aspect = (float) height / (float) width;; + + /// @bug put these on member init list + this->renderTarget = new RenderTarget(texsize, width, height); + this->textureManager = new TextureManager(presetURL); + this->beatDetect = beatDetect; + +#ifdef USE_FTGL + /**f Load the standard fonts */ + + title_font = new FTGLPixmapFont(title_fontURL.c_str()); + other_font = new FTGLPixmapFont(menu_fontURL.c_str()); + other_font->UseDisplayList(true); + title_font->UseDisplayList(true); + + poly_font = new FTGLExtrdFont(title_fontURL.c_str()); + + poly_font->UseDisplayList(true); + poly_font->Depth(20); + poly_font->FaceSize(72); + + poly_font->UseDisplayList(true); + +#endif /** USE_FTGL */ + + + int size = (mesh.height - 1) *mesh.width * 5 * 2; + p = ( float * ) wipemalloc ( size * sizeof ( float ) ); + + + for (int j = 0; j < mesh.height - 1; j++) + { + int base = j * mesh.width * 2 * 5; + + + for (int i = 0; i < mesh.width; i++) + { + int index = j * mesh.width + i; + int index2 = (j + 1) * mesh.width + i; + + int strip = base + i * 10; + p[strip + 2] = mesh.identity[index].x; + p[strip + 3] = mesh.identity[index].y; + p[strip + 4] = 0; + + p[strip + 7] = mesh.identity[index2].x; + p[strip + 8] = mesh.identity[index2].y; + p[strip + 9] = 0; + } + } + + +#ifdef USE_CG + shaderEngine.setParams(renderTarget->texsize, renderTarget->textureID[1], aspect, beatDetect, textureManager); +#endif + +} + +void Renderer::SetPipeline(Pipeline &pipeline) +{ + currentPipe = &pipeline; +#ifdef USE_CG + shaderEngine.reset(); + shaderEngine.loadShader(pipeline.warpShader); + shaderEngine.loadShader(pipeline.compositeShader); +#endif +} + +void Renderer::ResetTextures() +{ + textureManager->Clear(); + + delete (renderTarget); + renderTarget = new RenderTarget(texsize, vw, vh); + reset(vw, vh); + + textureManager->Preload(); +} + +void Renderer::SetupPass1(const Pipeline &pipeline, const PipelineContext &pipelineContext) +{ + //glMatrixMode(GL_PROJECTION); + //glPushMatrix(); + //glMatrixMode(GL_MODELVIEW); + //glPushMatrix(); + + totalframes++; + renderTarget->lock(); + glViewport(0, 0, renderTarget->texsize, renderTarget->texsize); + + glEnable(GL_TEXTURE_2D); + + //If using FBO, switch to FBO texture + + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + +#ifdef USE_GLES1 + glOrthof(0.0, 1, 0.0, 1, -40, 40); +#else + glOrtho(0.0, 1, 0.0, 1, -40, 40); +#endif + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + +#ifdef USE_CG + shaderEngine.RenderBlurTextures(pipeline, pipelineContext, renderTarget->texsize); +#endif +} + +void Renderer::RenderItems(const Pipeline &pipeline, const PipelineContext &pipelineContext) +{ + renderContext.time = pipelineContext.time; + renderContext.texsize = texsize; + renderContext.aspectCorrect = correction; + renderContext.aspectRatio = aspect; + renderContext.textureManager = textureManager; + renderContext.beatDetect = beatDetect; + + for (std::vector::const_iterator pos = pipeline.drawables.begin(); pos != pipeline.drawables.end(); ++pos) + { + if (*pos != NULL) + { + (*pos)->Draw(renderContext); + } + } +} + +void Renderer::FinishPass1() +{ + draw_title_to_texture(); + /** Restore original view state */ + //glMatrixMode(GL_MODELVIEW); + //glPopMatrix(); + + //glMatrixMode(GL_PROJECTION); + //glPopMatrix(); + + renderTarget->unlock(); + +} + +void Renderer::Pass2(const Pipeline &pipeline, const PipelineContext &pipelineContext) +{ + //BEGIN PASS 2 + // + //end of texture rendering + //now we copy the texture from the FBO or framebuffer to + //video texture memory and render fullscreen. + + /** Reset the viewport size */ +#ifdef USE_FBO + if (renderTarget->renderToTexture) + { + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, this->renderTarget->fbuffer[1]); + glViewport(0, 0, this->renderTarget->texsize, this->renderTarget->texsize); + } + else +#endif + glViewport(0, 0, this->vw, this->vh); + + glBindTexture(GL_TEXTURE_2D, this->renderTarget->textureID[0]); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); +#ifdef USE_GLES1 + glOrthof(-0.5, 0.5, -0.5, 0.5, -40, 40); +#else + glOrtho(-0.5, 0.5, -0.5, 0.5, -40, 40); +#endif + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glLineWidth(this->renderTarget->texsize < 512 ? 1 : this->renderTarget->texsize / 512.0); + + CompositeOutput(pipeline, pipelineContext); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glTranslatef(-0.5, -0.5, 0); + + // When console refreshes, there is a chance the preset has been changed by the user + refreshConsole(); + draw_title_to_screen(false); + if (this->showhelp % 2) + draw_help(); + if (this->showtitle % 2) + draw_title(); + if (this->showfps % 2) + draw_fps(this->realfps); + if (this->showpreset % 2) + draw_preset(); + if (this->showstats % 2) + draw_stats(); + glTranslatef(0.5, 0.5, 0); + +#ifdef USE_FBO + if (renderTarget->renderToTexture) + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); +#endif +} + +void Renderer::RenderFrame(const Pipeline &pipeline, const PipelineContext &pipelineContext) +{ + + SetupPass1(pipeline, pipelineContext); + +#ifdef USE_CG + shaderEngine.enableShader(currentPipe->warpShader, pipeline, pipelineContext); +#endif + Interpolation(pipeline); +#ifdef USE_CG + shaderEngine.disableShader(); +#endif + + RenderItems(pipeline, pipelineContext); + FinishPass1(); + Pass2(pipeline, pipelineContext); +} + +void Renderer::Interpolation(const Pipeline &pipeline) +{ + if (this->renderTarget->useFBO) + glBindTexture(GL_TEXTURE_2D, renderTarget->textureID[1]); + else + glBindTexture(GL_TEXTURE_2D, renderTarget->textureID[0]); + + //Texture wrapping( clamp vs. wrap) + if (pipeline.textureWrap == 0) + { +#ifdef USE_GLES1 + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); +#else + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); +#endif + } + else + { + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + } + + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + + glBlendFunc(GL_SRC_ALPHA, GL_ZERO); + + glColor4f(1.0, 1.0, 1.0, pipeline.screenDecay); + + glEnable(GL_TEXTURE_2D); + + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + + + //glVertexPointer(2, GL_FLOAT, 0, p); + //glTexCoordPointer(2, GL_FLOAT, 0, t); + glInterleavedArrays(GL_T2F_V3F,0,p); + + + if (pipeline.staticPerPixel) + { + for (int j = 0; j < mesh.height - 1; j++) + { + int base = j * mesh.width * 2 * 5; + + for (int i = 0; i < mesh.width; i++) + { + int strip = base + i * 10; + p[strip] = pipeline.x_mesh[i][j]; + p[strip + 1] = pipeline.y_mesh[i][j]; + + p[strip + 5] = pipeline.x_mesh[i][j+1]; + p[strip + 6] = pipeline.y_mesh[i][j+1]; + } + } + + } + else + { + mesh.Reset(); + omptl::transform(mesh.p.begin(), mesh.p.end(), mesh.identity.begin(), mesh.p.begin(), &Renderer::PerPixel); + + for (int j = 0; j < mesh.height - 1; j++) + { + int base = j * mesh.width * 2 * 5; + + for (int i = 0; i < mesh.width; i++) + { + int strip = base + i * 10; + int index = j * mesh.width + i; + int index2 = (j + 1) * mesh.width + i; + + p[strip] = mesh.p[index].x; + p[strip + 1] = mesh.p[index].y; + + p[strip + 5] = mesh.p[index2].x; + p[strip + 6] = mesh.p[index2].y; + + + } + } + + } + + for (int j = 0; j < mesh.height - 1; j++) + glDrawArrays(GL_TRIANGLE_STRIP,j* mesh.width* 2,mesh.width*2); + + + glDisable(GL_TEXTURE_2D); + + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + +} +Pipeline* Renderer::currentPipe; + +Renderer::~Renderer() +{ + + int x; + + if (renderTarget) + delete (renderTarget); + if (textureManager) + delete (textureManager); + + //std::cerr << "grid assign end" << std::endl; + + free(p); + +#ifdef USE_FTGL + // std::cerr << "freeing title fonts" << std::endl; + if (title_font) + delete title_font; + if (poly_font) + delete poly_font; + if (other_font) + delete other_font; + // std::cerr << "freeing title fonts finished" << std::endl; +#endif + // std::cerr << "exiting destructor" << std::endl; +} + +void Renderer::reset(int w, int h) +{ + aspect = (float) h / (float) w; + this -> vw = w; + this -> vh = h; + +#if USE_CG + shaderEngine.setAspect(aspect); +#endif + + glShadeModel(GL_SMOOTH); + + glCullFace(GL_BACK); + //glFrontFace( GL_CCW ); + + glClearColor(0, 0, 0, 0); + + glViewport(0, 0, w, h); + + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + +#ifndef USE_GLES1 + glDrawBuffer(GL_BACK); + glReadBuffer(GL_BACK); +#endif + glEnable(GL_BLEND); + + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glEnable(GL_LINE_SMOOTH); + + glEnable(GL_POINT_SMOOTH); + glClear(GL_COLOR_BUFFER_BIT); + +#ifndef USE_GLES1 + glLineStipple(2, 0xAAAA); +#endif + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + + //glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); + //glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); + //glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); + + if (!this->renderTarget->useFBO) + { + this->renderTarget->fallbackRescale(w, h); + } +} + +GLuint Renderer::initRenderToTexture() +{ + return renderTarget->initRenderToTexture(); +} + +void Renderer::draw_title_to_texture() +{ +#ifdef USE_FTGL + if (this->drawtitle > 100) + { + draw_title_to_screen(true); + this->drawtitle = 0; + } +#endif /** USE_FTGL */ +} + +float title_y; + +void Renderer::draw_title_to_screen(bool flip) +{ + +#ifdef USE_FTGL + if (this->drawtitle > 0) + { + + //setUpLighting(); + + //glEnable(GL_POLYGON_SMOOTH); + //glEnable( GL_CULL_FACE); + glEnable(GL_DEPTH_TEST); + glClear(GL_DEPTH_BUFFER_BIT); + + int draw; + if (drawtitle >= 80) + draw = 80; + else + draw = drawtitle; + + float easein = ((80 - draw) * .0125); + float easein2 = easein * easein; + + if (drawtitle == 1) + { + title_y = (float) rand() / RAND_MAX; + title_y *= 2; + title_y -= 1; + title_y *= .6; + } + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + //glBlendFunc(GL_SRC_ALPHA_SATURATE,GL_ONE); + glColor4f(1.0, 1.0, 1.0, 1.0); + + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + + glFrustum(-1, 1, -1 * (float) vh / (float) vw, 1 * (float) vh / (float) vw, 1, 1000); + if (flip) + glScalef(1, -1, 1); + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glLoadIdentity(); + + glTranslatef(-850, title_y * 850 * vh / vw, easein2 * 900 - 900); + + glRotatef(easein2 * 360, 1, 0, 0); + + poly_font->Render(this->title.c_str()); + + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + this->drawtitle++; + + glPopMatrix(); + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + + glMatrixMode(GL_MODELVIEW); + + glDisable(GL_CULL_FACE); + glDisable(GL_DEPTH_TEST); + + glDisable(GL_COLOR_MATERIAL); + + glDisable(GL_LIGHTING); + glDisable(GL_POLYGON_SMOOTH); + } +#endif /** USE_FTGL */ +} + +void Renderer::draw_title() +{ +#ifdef USE_FTGL + //glBlendFunc(GL_ONE_MINUS_DST_COLOR,GL_ZERO); + + glColor4f(1.0, 1.0, 1.0, 1.0); + // glPushMatrix(); + // glTranslatef(this->vw*.001,this->vh*.03, -1); + // glScalef(this->vw*.015,this->vh*.025,0); + + glRasterPos2f(0.01, 0.05); + title_font->FaceSize((unsigned) (20 * (this->vh / 512.0))); + + title_font->Render(this->title.c_str()); + // glPopMatrix(); + //glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); + +#endif /** USE_FTGL */ +} + +void Renderer::draw_preset() +{ +#ifdef USE_FTGL + //glBlendFunc(GL_ONE_MINUS_DST_COLOR,GL_ZERO); + + glColor4f(1.0, 1.0, 1.0, 1.0); + // glPushMatrix(); + //glTranslatef(this->vw*.001,this->vh*-.01, -1); + //glScalef(this->vw*.003,this->vh*.004,0); + + + glRasterPos2f(0.01, 0.01); + + title_font->FaceSize((unsigned) (12 * (this->vh / 512.0))); + if (this->noSwitch) + title_font->Render("[LOCKED] "); + title_font->FaceSize((unsigned) (20 * (this->vh / 512.0))); + + title_font->Render(this->presetName().c_str()); + + //glPopMatrix(); + // glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); +#endif /** USE_FTGL */ +} + +void Renderer::draw_help() +{ + +#ifdef USE_FTGL + //glBlendFunc(GL_ONE_MINUS_DST_COLOR,GL_ZERO); + + glColor4f(1.0, 1.0, 1.0, 1.0); + glPushMatrix(); + glTranslatef(0, 1, 0); + //glScalef(this->vw*.02,this->vh*.02 ,0); + + + title_font->FaceSize((unsigned) (18 * (this->vh / 512.0))); + + glRasterPos2f(0.01, -0.05); + title_font->Render("Help"); + + glRasterPos2f(0.01, -0.09); + title_font->Render("----------------------------"); + + glRasterPos2f(0.01, -0.13); + title_font->Render("F1: This help menu"); + + glRasterPos2f(0.01, -0.17); + title_font->Render("F2: Show song title"); + + glRasterPos2f(0.01, -0.21); + title_font->Render("F3: Show preset name"); + + glRasterPos2f(0.01, -0.25); + title_font->Render("F4: Show Rendering Settings"); + + glRasterPos2f(0.01, -0.29); + title_font->Render("F5: Show FPS"); + + glRasterPos2f(0.01, -0.35); + title_font->Render("F: Fullscreen"); + + glRasterPos2f(0.01, -0.39); + title_font->Render("L: Lock/Unlock Preset"); + + glRasterPos2f(0.01, -0.43); + title_font->Render("M: Show Menu"); + + glRasterPos2f(0.01, -0.49); + title_font->Render("R: Random preset"); + glRasterPos2f(0.01, -0.53); + title_font->Render("N: Next preset"); + + glRasterPos2f(0.01, -0.57); + title_font->Render("P: Previous preset"); + + glPopMatrix(); + // glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); + +#endif /** USE_FTGL */ +} + +void Renderer::draw_stats() +{ + +#ifdef USE_FTGL + char buffer[128]; + float offset = (this->showfps % 2 ? -0.05 : 0.0); + // glBlendFunc(GL_ONE_MINUS_DST_COLOR,GL_ZERO); + + glColor4f(1.0, 1.0, 1.0, 1.0); + glPushMatrix(); + glTranslatef(0.01, 1, 0); + glRasterPos2f(0, -.05 + offset); + other_font->Render(this->correction ? " aspect: corrected" : " aspect: stretched"); + sprintf(buffer, " (%f)", this->aspect); + other_font->Render(buffer); + + glRasterPos2f(0, -.09 + offset); + other_font->FaceSize((unsigned) (18 * (vh / 512.0))); + + sprintf(buffer, " texsize: %d", renderTarget->texsize); + other_font->Render(buffer); + + glRasterPos2f(0, -.13 + offset); + sprintf(buffer, " viewport: %d x %d", vw, vh); + + other_font->Render(buffer); + glRasterPos2f(0, -.17 + offset); + other_font->Render((renderTarget->useFBO ? " FBO: on" : " FBO: off")); + + glRasterPos2f(0, -.21 + offset); + sprintf(buffer, " mesh: %d x %d", mesh.width, mesh.height); + other_font->Render(buffer); + + glRasterPos2f(0, -.25 + offset); + sprintf(buffer, " textures: %.1fkB", textureManager->getTextureMemorySize() / 1000.0f); + other_font->Render(buffer); +#ifdef USE_CG + glRasterPos2f(0, -.29 + offset); + sprintf(buffer, "shader profile: %s", shaderEngine.profileName.c_str()); + other_font->Render(buffer); + + glRasterPos2f(0, -.33 + offset); + sprintf(buffer, " warp shader: %s", currentPipe->warpShader.enabled ? "on" : "off"); + other_font->Render(buffer); + + glRasterPos2f(0, -.37 + offset); + sprintf(buffer, " comp shader: %s", currentPipe->compositeShader.enabled ? "on" : "off"); + other_font->Render(buffer); +#endif + glPopMatrix(); + // glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); + + +#endif /** USE_FTGL */ +} +void Renderer::draw_fps(float realfps) +{ +#ifdef USE_FTGL + char bufferfps[20]; + sprintf(bufferfps, "%.1f fps", realfps); + // glBlendFunc(GL_ONE_MINUS_DST_COLOR,GL_ZERO); + + glColor4f(1.0, 1.0, 1.0, 1.0); + glPushMatrix(); + glTranslatef(0.01, 1, 0); + glRasterPos2f(0, -0.05); + title_font->FaceSize((unsigned) (20 * (this->vh / 512.0))); + title_font->Render(bufferfps); + + glPopMatrix(); + // glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); + +#endif /** USE_FTGL */ +} + +void Renderer::CompositeOutput(const Pipeline &pipeline, const PipelineContext &pipelineContext) +{ + + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + //Overwrite anything on the screen + glBlendFunc(GL_ONE, GL_ZERO); + glColor4f(1.0, 1.0, 1.0, 1.0f); + + glEnable(GL_TEXTURE_2D); + +#ifdef USE_CG + shaderEngine.enableShader(currentPipe->compositeShader, pipeline, pipelineContext); +#endif + + float tex[4][2] = + { + { 0, 1 }, + { 0, 0 }, + { 1, 0 }, + { 1, 1 } }; + + float points[4][2] = + { + { -0.5, -0.5 }, + { -0.5, 0.5 }, + { 0.5, 0.5 }, + { 0.5, -0.5 } }; + + glEnableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + + glVertexPointer(2, GL_FLOAT, 0, points); + glTexCoordPointer(2, GL_FLOAT, 0, tex); + + glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + + glDisable(GL_TEXTURE_2D); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + +#ifdef USE_CG + shaderEngine.disableShader(); +#endif + + for (std::vector::const_iterator pos = pipeline.compositeDrawables.begin(); pos + != pipeline.compositeDrawables.end(); ++pos) + (*pos)->Draw(renderContext); + +} + diff --git a/3rdparty/libprojectm/Renderer/Renderer.hpp b/3rdparty/libprojectm/Renderer/Renderer.hpp new file mode 100644 index 000000000..224ae2a57 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/Renderer.hpp @@ -0,0 +1,145 @@ +#ifndef Renderer_HPP +#define Renderer_HPP + +#include "FBO.hpp" +#include "BeatDetect.hpp" +#include "Common.hpp" +#include +#include + +#ifdef USE_GLES1 +#include +#else +#ifdef __APPLE__ +#include +#include +#else +#include +#include +#endif +#endif + +#ifdef USE_FTGL +#ifdef WIN32 +#include +#include +#include +#else +#include +#include +#include +#endif +#endif /** USE_FTGL */ + + +#include "Pipeline.hpp" +#include "PerPixelMesh.hpp" +#include "Transformation.hpp" +#include "ShaderEngine.hpp" + +class UserTexture; +class BeatDetect; +class TextureManager; + +class Renderer +{ + +public: + + bool showfps; + bool showtitle; + bool showpreset; + bool showhelp; + bool showstats; + + bool studio; + bool correction; + + bool noSwitch; + + int totalframes; + float realfps; + + std::string title; + int drawtitle; + int texsize; + + + Renderer( int width, int height, int gx, int gy, int texsize, BeatDetect *beatDetect, std::string presetURL, std::string title_fontURL, std::string menu_fontURL); + ~Renderer(); + + void RenderFrame(const Pipeline &pipeline, const PipelineContext &pipelineContext); + void ResetTextures(); + void reset(int w, int h); + GLuint initRenderToTexture(); + + + void SetPipeline(Pipeline &pipeline); + + void setPresetName(const std::string& theValue) + { + m_presetName = theValue; + } + + std::string presetName() const + { + return m_presetName; + } + +private: + + PerPixelMesh mesh; + RenderTarget *renderTarget; + BeatDetect *beatDetect; + TextureManager *textureManager; + static Pipeline* currentPipe; + RenderContext renderContext; + //per pixel equation variables +#ifdef USE_CG + ShaderEngine shaderEngine; +#endif + std::string m_presetName; + + float* p; + + + int vw; + int vh; + + float aspect; + + std::string title_fontURL; + std::string menu_fontURL; + std::string presetURL; + +#ifdef USE_FTGL + FTGLPixmapFont *title_font; + FTGLPixmapFont *other_font; + FTGLExtrdFont *poly_font; +#endif /** USE_FTGL */ + + void SetupPass1(const Pipeline &pipeline, const PipelineContext &pipelineContext); + void Interpolation(const Pipeline &pipeline); + void RenderItems(const Pipeline &pipeline, const PipelineContext &pipelineContext); + void FinishPass1(); + void Pass2 (const Pipeline &pipeline, const PipelineContext &pipelineContext); + void CompositeOutput(const Pipeline &pipeline, const PipelineContext &pipelineContext); + + inline static Point PerPixel(Point p, PerPixelContext &context) + { + return currentPipe->PerPixel(p,context); + } + + void rescale_per_pixel_matrices(); + + void draw_fps( float realfps ); + void draw_stats(); + void draw_help(); + void draw_preset(); + void draw_title(); + void draw_title_to_screen(bool flip); + void draw_title_to_texture(); + +}; + +#endif diff --git a/3rdparty/libprojectm/Renderer/SOIL/SOIL.c b/3rdparty/libprojectm/Renderer/SOIL/SOIL.c new file mode 100644 index 000000000..2403db229 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/SOIL/SOIL.c @@ -0,0 +1,2040 @@ +/* + Jonathan Dummer + 2007-07-26-10.36 + + Simple OpenGL Image Library + + Public Domain + using Sean Barret's stb_image as a base + + Thanks to: + * Sean Barret - for the awesome stb_image + * Dan Venkitachalam - for finding some non-compliant DDS files, and patching some explicit casts + * everybody at gamedev.net +*/ + +#define SOIL_CHECK_FOR_GL_ERRORS 0 + +#ifdef WIN32 + #define WIN32_LEAN_AND_MEAN + #include + #include + #include +#elif defined(__APPLE__) || defined(__APPLE_CC__) + /* I can't test this Apple stuff! */ + #include + #include + #define APIENTRY +#else + #include + #include +#endif + +#include "SOIL.h" +#include "stb_image_aug.h" +#include "image_helper.h" +#include "image_DXT.h" + +#include +#include + +/* error reporting */ +char *result_string_pointer = "SOIL initialized"; + +/* for loading cube maps */ +enum{ + SOIL_CAPABILITY_UNKNOWN = -1, + SOIL_CAPABILITY_NONE = 0, + SOIL_CAPABILITY_PRESENT = 1 +}; +static int has_cubemap_capability = SOIL_CAPABILITY_UNKNOWN; +int query_cubemap_capability( void ); +#define SOIL_TEXTURE_WRAP_R 0x8072 +#define SOIL_CLAMP_TO_EDGE 0x812F +#define SOIL_NORMAL_MAP 0x8511 +#define SOIL_REFLECTION_MAP 0x8512 +#define SOIL_TEXTURE_CUBE_MAP 0x8513 +#define SOIL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define SOIL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define SOIL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define SOIL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define SOIL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define SOIL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define SOIL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +/* for non-power-of-two texture */ +static int has_NPOT_capability = SOIL_CAPABILITY_UNKNOWN; +int query_NPOT_capability( void ); +/* for texture rectangles */ +static int has_tex_rectangle_capability = SOIL_CAPABILITY_UNKNOWN; +int query_tex_rectangle_capability( void ); +#define SOIL_TEXTURE_RECTANGLE_ARB 0x84F5 +#define SOIL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 +/* for using DXT compression */ +static int has_DXT_capability = SOIL_CAPABILITY_UNKNOWN; +int query_DXT_capability( void ); +#define SOIL_RGB_S3TC_DXT1 0x83F0 +#define SOIL_RGBA_S3TC_DXT1 0x83F1 +#define SOIL_RGBA_S3TC_DXT3 0x83F2 +#define SOIL_RGBA_S3TC_DXT5 0x83F3 +typedef void (APIENTRY * P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data); +P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC soilGlCompressedTexImage2D = NULL; +unsigned int SOIL_direct_load_DDS( + const char *filename, + unsigned int reuse_texture_ID, + int flags, + int loading_as_cubemap ); +unsigned int SOIL_direct_load_DDS_from_memory( + const unsigned char *const buffer, + int buffer_length, + unsigned int reuse_texture_ID, + int flags, + int loading_as_cubemap ); +/* other functions */ +unsigned int + SOIL_internal_create_OGL_texture + ( + const unsigned char *const data, + int width, int height, int channels, + unsigned int reuse_texture_ID, + unsigned int flags, + unsigned int opengl_texture_type, + unsigned int opengl_texture_target, + unsigned int texture_check_size_enum + ); + +/* and the code magic begins here [8^) */ +unsigned int + SOIL_load_OGL_texture + ( + const char *filename, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) + +{ + int width, height; + return SOIL_load_OGL_texture_size(filename,force_channels,reuse_texture_ID,flags,&width, &height); +} + +unsigned int + SOIL_load_OGL_texture_size + ( + const char *filename, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags, + int *width, + int *height + ) +{ + /* variables */ + unsigned char* img; + int channels; + unsigned int tex_id; + /* does the user want direct uploading of the image as a DDS file? */ + if( flags & SOIL_FLAG_DDS_LOAD_DIRECT ) + { + /* 1st try direct loading of the image as a DDS file + note: direct uploading will only load what is in the + DDS file, no MIPmaps will be generated, the image will + not be flipped, etc. */ + tex_id = SOIL_direct_load_DDS( filename, reuse_texture_ID, flags, 0 ); + if( tex_id ) + { + /* hey, it worked!! */ + return tex_id; + } + } + /* try to load the image */ + img = SOIL_load_image( filename, width, height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* OK, make it a texture! */ + tex_id = SOIL_internal_create_OGL_texture( + img, *width, *height, channels, + reuse_texture_ID, flags, + GL_TEXTURE_2D, GL_TEXTURE_2D, + GL_MAX_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + /* and return the handle, such as it is */ + return tex_id; +} + +unsigned int + SOIL_load_OGL_HDR_texture + ( + const char *filename, + int fake_HDR_format, + int rescale_to_max, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* img; + int width, height, channels; + unsigned int tex_id; + /* no direct uploading of the image as a DDS file */ + /* error check */ + if( (fake_HDR_format != SOIL_HDR_RGBE) && + (fake_HDR_format != SOIL_HDR_RGBdivA) && + (fake_HDR_format != SOIL_HDR_RGBdivA2) ) + { + result_string_pointer = "Invalid fake HDR format specified"; + return 0; + } + /* try to load the image (only the HDR type) */ + img = stbi_hdr_load_rgbe( filename, &width, &height, &channels, 4 ); + /* channels holds the original number of channels, which may have been forced */ + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* the load worked, do I need to convert it? */ + if( fake_HDR_format == SOIL_HDR_RGBdivA ) + { + RGBE_to_RGBdivA( img, width, height, rescale_to_max ); + } else if( fake_HDR_format == SOIL_HDR_RGBdivA2 ) + { + RGBE_to_RGBdivA2( img, width, height, rescale_to_max ); + } + /* OK, make it a texture! */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + reuse_texture_ID, flags, + GL_TEXTURE_2D, GL_TEXTURE_2D, + GL_MAX_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + /* and return the handle, such as it is */ + return tex_id; +} + +unsigned int + SOIL_load_OGL_texture_from_memory + ( + const unsigned char *const buffer, + int buffer_length, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* img; + int width, height, channels; + unsigned int tex_id; + /* does the user want direct uploading of the image as a DDS file? */ + if( flags & SOIL_FLAG_DDS_LOAD_DIRECT ) + { + /* 1st try direct loading of the image as a DDS file + note: direct uploading will only load what is in the + DDS file, no MIPmaps will be generated, the image will + not be flipped, etc. */ + tex_id = SOIL_direct_load_DDS_from_memory( + buffer, buffer_length, + reuse_texture_ID, flags, 0 ); + if( tex_id ) + { + /* hey, it worked!! */ + return tex_id; + } + } + /* try to load the image */ + img = SOIL_load_image_from_memory( + buffer, buffer_length, + &width, &height, &channels, + force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* OK, make it a texture! */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + reuse_texture_ID, flags, + GL_TEXTURE_2D, GL_TEXTURE_2D, + GL_MAX_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + /* and return the handle, such as it is */ + return tex_id; +} + +unsigned int + SOIL_load_OGL_cubemap + ( + const char *x_pos_file, + const char *x_neg_file, + const char *y_pos_file, + const char *y_neg_file, + const char *z_pos_file, + const char *z_neg_file, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* img; + int width, height, channels; + unsigned int tex_id; + /* error checking */ + if( (x_pos_file == NULL) || + (x_neg_file == NULL) || + (y_pos_file == NULL) || + (y_neg_file == NULL) || + (z_pos_file == NULL) || + (z_neg_file == NULL) ) + { + result_string_pointer = "Invalid cube map files list"; + return 0; + } + /* capability checking */ + if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) + { + result_string_pointer = "No cube map capability present"; + return 0; + } + /* 1st face: try to load the image */ + img = SOIL_load_image( x_pos_file, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, and create a texture ID if necessary */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + reuse_texture_ID, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_X, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image( x_neg_file, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_X, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image( y_pos_file, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_Y, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image( y_neg_file, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Y, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image( z_pos_file, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_Z, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image( z_neg_file, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Z, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* and return the handle, such as it is */ + return tex_id; +} + +unsigned int + SOIL_load_OGL_cubemap_from_memory + ( + const unsigned char *const x_pos_buffer, + int x_pos_buffer_length, + const unsigned char *const x_neg_buffer, + int x_neg_buffer_length, + const unsigned char *const y_pos_buffer, + int y_pos_buffer_length, + const unsigned char *const y_neg_buffer, + int y_neg_buffer_length, + const unsigned char *const z_pos_buffer, + int z_pos_buffer_length, + const unsigned char *const z_neg_buffer, + int z_neg_buffer_length, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* img; + int width, height, channels; + unsigned int tex_id; + /* error checking */ + if( (x_pos_buffer == NULL) || + (x_neg_buffer == NULL) || + (y_pos_buffer == NULL) || + (y_neg_buffer == NULL) || + (z_pos_buffer == NULL) || + (z_neg_buffer == NULL) ) + { + result_string_pointer = "Invalid cube map buffers list"; + return 0; + } + /* capability checking */ + if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) + { + result_string_pointer = "No cube map capability present"; + return 0; + } + /* 1st face: try to load the image */ + img = SOIL_load_image_from_memory( + x_pos_buffer, x_pos_buffer_length, + &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, and create a texture ID if necessary */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + reuse_texture_ID, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_X, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image_from_memory( + x_neg_buffer, x_neg_buffer_length, + &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_X, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image_from_memory( + y_pos_buffer, y_pos_buffer_length, + &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_Y, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image_from_memory( + y_neg_buffer, y_neg_buffer_length, + &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Y, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image_from_memory( + z_pos_buffer, z_pos_buffer_length, + &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_POSITIVE_Z, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* continue? */ + if( tex_id != 0 ) + { + /* 1st face: try to load the image */ + img = SOIL_load_image_from_memory( + z_neg_buffer, z_neg_buffer_length, + &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* upload the texture, but reuse the assigned texture ID */ + tex_id = SOIL_internal_create_OGL_texture( + img, width, height, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Z, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + /* and nuke the image data */ + SOIL_free_image_data( img ); + } + /* and return the handle, such as it is */ + return tex_id; +} + +unsigned int + SOIL_load_OGL_single_cubemap + ( + const char *filename, + const char face_order[6], + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* img; + int width, height, channels, i; + unsigned int tex_id = 0; + /* error checking */ + if( filename == NULL ) + { + result_string_pointer = "Invalid single cube map file name"; + return 0; + } + /* does the user want direct uploading of the image as a DDS file? */ + if( flags & SOIL_FLAG_DDS_LOAD_DIRECT ) + { + /* 1st try direct loading of the image as a DDS file + note: direct uploading will only load what is in the + DDS file, no MIPmaps will be generated, the image will + not be flipped, etc. */ + tex_id = SOIL_direct_load_DDS( filename, reuse_texture_ID, flags, 1 ); + if( tex_id ) + { + /* hey, it worked!! */ + return tex_id; + } + } + /* face order checking */ + for( i = 0; i < 6; ++i ) + { + if( (face_order[i] != 'N') && + (face_order[i] != 'S') && + (face_order[i] != 'W') && + (face_order[i] != 'E') && + (face_order[i] != 'U') && + (face_order[i] != 'D') ) + { + result_string_pointer = "Invalid single cube map face order"; + return 0; + }; + } + /* capability checking */ + if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) + { + result_string_pointer = "No cube map capability present"; + return 0; + } + /* 1st off, try to load the full image */ + img = SOIL_load_image( filename, &width, &height, &channels, force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* now, does this image have the right dimensions? */ + if( (width != 6*height) && + (6*width != height) ) + { + SOIL_free_image_data( img ); + result_string_pointer = "Single cubemap image must have a 6:1 ratio"; + return 0; + } + /* try the image split and create */ + tex_id = SOIL_create_OGL_single_cubemap( + img, width, height, channels, + face_order, reuse_texture_ID, flags + ); + /* nuke the temporary image data and return the texture handle */ + SOIL_free_image_data( img ); + return tex_id; +} + +unsigned int + SOIL_load_OGL_single_cubemap_from_memory + ( + const unsigned char *const buffer, + int buffer_length, + const char face_order[6], + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* img; + int width, height, channels, i; + unsigned int tex_id = 0; + /* error checking */ + if( buffer == NULL ) + { + result_string_pointer = "Invalid single cube map buffer"; + return 0; + } + /* does the user want direct uploading of the image as a DDS file? */ + if( flags & SOIL_FLAG_DDS_LOAD_DIRECT ) + { + /* 1st try direct loading of the image as a DDS file + note: direct uploading will only load what is in the + DDS file, no MIPmaps will be generated, the image will + not be flipped, etc. */ + tex_id = SOIL_direct_load_DDS_from_memory( + buffer, buffer_length, + reuse_texture_ID, flags, 1 ); + if( tex_id ) + { + /* hey, it worked!! */ + return tex_id; + } + } + /* face order checking */ + for( i = 0; i < 6; ++i ) + { + if( (face_order[i] != 'N') && + (face_order[i] != 'S') && + (face_order[i] != 'W') && + (face_order[i] != 'E') && + (face_order[i] != 'U') && + (face_order[i] != 'D') ) + { + result_string_pointer = "Invalid single cube map face order"; + return 0; + }; + } + /* capability checking */ + if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) + { + result_string_pointer = "No cube map capability present"; + return 0; + } + /* 1st off, try to load the full image */ + img = SOIL_load_image_from_memory( + buffer, buffer_length, + &width, &height, &channels, + force_channels ); + /* channels holds the original number of channels, which may have been forced */ + if( (force_channels >= 1) && (force_channels <= 4) ) + { + channels = force_channels; + } + if( NULL == img ) + { + /* image loading failed */ + result_string_pointer = stbi_failure_reason(); + return 0; + } + /* now, does this image have the right dimensions? */ + if( (width != 6*height) && + (6*width != height) ) + { + SOIL_free_image_data( img ); + result_string_pointer = "Single cubemap image must have a 6:1 ratio"; + return 0; + } + /* try the image split and create */ + tex_id = SOIL_create_OGL_single_cubemap( + img, width, height, channels, + face_order, reuse_texture_ID, flags + ); + /* nuke the temporary image data and return the texture handle */ + SOIL_free_image_data( img ); + return tex_id; +} + +unsigned int + SOIL_create_OGL_single_cubemap + ( + const unsigned char *const data, + int width, int height, int channels, + const char face_order[6], + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* variables */ + unsigned char* sub_img; + int dw, dh, sz, i; + unsigned int tex_id; + /* error checking */ + if( data == NULL ) + { + result_string_pointer = "Invalid single cube map image data"; + return 0; + } + /* face order checking */ + for( i = 0; i < 6; ++i ) + { + if( (face_order[i] != 'N') && + (face_order[i] != 'S') && + (face_order[i] != 'W') && + (face_order[i] != 'E') && + (face_order[i] != 'U') && + (face_order[i] != 'D') ) + { + result_string_pointer = "Invalid single cube map face order"; + return 0; + }; + } + /* capability checking */ + if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) + { + result_string_pointer = "No cube map capability present"; + return 0; + } + /* now, does this image have the right dimensions? */ + if( (width != 6*height) && + (6*width != height) ) + { + result_string_pointer = "Single cubemap image must have a 6:1 ratio"; + return 0; + } + /* which way am I stepping? */ + if( width > height ) + { + dw = height; + dh = 0; + } else + { + dw = 0; + dh = width; + } + sz = dw+dh; + sub_img = (unsigned char *)malloc( sz*sz*channels ); + /* do the splitting and uploading */ + tex_id = reuse_texture_ID; + for( i = 0; i < 6; ++i ) + { + int x, y, idx = 0; + unsigned int cubemap_target = 0; + /* copy in the sub-image */ + for( y = i*dh; y < i*dh+sz; ++y ) + { + for( x = i*dw*channels; x < (i*dw+sz)*channels; ++x ) + { + sub_img[idx++] = data[y*width*channels+x]; + } + } + /* what is my texture target? + remember, this coordinate system is + LHS if viewed from inside the cube! */ + switch( face_order[i] ) + { + case 'N': + cubemap_target = SOIL_TEXTURE_CUBE_MAP_POSITIVE_Z; + break; + case 'S': + cubemap_target = SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Z; + break; + case 'W': + cubemap_target = SOIL_TEXTURE_CUBE_MAP_NEGATIVE_X; + break; + case 'E': + cubemap_target = SOIL_TEXTURE_CUBE_MAP_POSITIVE_X; + break; + case 'U': + cubemap_target = SOIL_TEXTURE_CUBE_MAP_POSITIVE_Y; + break; + case 'D': + cubemap_target = SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Y; + break; + } + /* upload it as a texture */ + tex_id = SOIL_internal_create_OGL_texture( + sub_img, sz, sz, channels, + tex_id, flags, + SOIL_TEXTURE_CUBE_MAP, + cubemap_target, + SOIL_MAX_CUBE_MAP_TEXTURE_SIZE ); + } + /* and nuke the image and sub-image data */ + SOIL_free_image_data( sub_img ); + /* and return the handle, such as it is */ + return tex_id; +} + +unsigned int + SOIL_create_OGL_texture + ( + const unsigned char *const data, + int width, int height, int channels, + unsigned int reuse_texture_ID, + unsigned int flags + ) +{ + /* wrapper function for 2D textures */ + return SOIL_internal_create_OGL_texture( + data, width, height, channels, + reuse_texture_ID, flags, + GL_TEXTURE_2D, GL_TEXTURE_2D, + GL_MAX_TEXTURE_SIZE ); +} + +#if SOIL_CHECK_FOR_GL_ERRORS +void check_for_GL_errors( const char *calling_location ) +{ + /* check for errors */ + GLenum err_code = glGetError(); + while( GL_NO_ERROR != err_code ) + { + printf( "OpenGL Error @ %s: %i", calling_location, err_code ); + err_code = glGetError(); + } +} +#else +void check_for_GL_errors( const char *calling_location ) +{ + /* no check for errors */ +} +#endif + +unsigned int + SOIL_internal_create_OGL_texture + ( + const unsigned char *const data, + int width, int height, int channels, + unsigned int reuse_texture_ID, + unsigned int flags, + unsigned int opengl_texture_type, + unsigned int opengl_texture_target, + unsigned int texture_check_size_enum + ) +{ + /* variables */ + unsigned char* img; + unsigned int tex_id; + unsigned int internal_texture_format = 0, original_texture_format = 0; + int DXT_mode = SOIL_CAPABILITY_UNKNOWN; + int max_supported_size; + /* If the user wants to use the texture rectangle I kill a few flags */ + if( flags & SOIL_FLAG_TEXTURE_RECTANGLE ) + { + /* well, the user asked for it, can we do that? */ + if( query_tex_rectangle_capability() == SOIL_CAPABILITY_PRESENT ) + { + /* only allow this if the user in _NOT_ trying to do a cubemap! */ + if( opengl_texture_type == GL_TEXTURE_2D ) + { + /* clean out the flags that cannot be used with texture rectangles */ + flags &= ~( + SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | + SOIL_FLAG_TEXTURE_REPEATS + ); + /* and change my target */ + opengl_texture_target = SOIL_TEXTURE_RECTANGLE_ARB; + opengl_texture_type = SOIL_TEXTURE_RECTANGLE_ARB; + } else + { + /* not allowed for any other uses (yes, I'm looking at you, cubemaps!) */ + flags &= ~SOIL_FLAG_TEXTURE_RECTANGLE; + } + + } else + { + /* can't do it, and that is a breakable offense (uv coords use pixels instead of [0,1]!) */ + result_string_pointer = "Texture Rectangle extension unsupported"; + return 0; + } + } + /* create a copy the image data */ + img = (unsigned char*)malloc( width*height*channels ); + memcpy( img, data, width*height*channels ); + /* does the user want me to invert the image? */ + if( flags & SOIL_FLAG_INVERT_Y ) + { + int i, j; + for( j = 0; j*2 < height; ++j ) + { + int index1 = j * width * channels; + int index2 = (height - 1 - j) * width * channels; + for( i = width * channels; i > 0; --i ) + { + unsigned char temp = img[index1]; + img[index1] = img[index2]; + img[index2] = temp; + ++index1; + ++index2; + } + } + } + /* does the user want me to scale the colors into the NTSC safe RGB range? */ + if( flags & SOIL_FLAG_NTSC_SAFE_RGB ) + { + scale_image_RGB_to_NTSC_safe( img, width, height, channels ); + } + /* does the user want me to convert from straight to pre-multiplied alpha? + (and do we even _have_ alpha?) */ + if( flags & SOIL_FLAG_MULTIPLY_ALPHA ) + { + int i; + switch( channels ) + { + case 2: + for( i = 0; i < 2*width*height; i += 2 ) + { + img[i] = (img[i] * img[i+1] + 128) >> 8; + } + break; + case 4: + for( i = 0; i < 4*width*height; i += 4 ) + { + img[i+0] = (img[i+0] * img[i+3] + 128) >> 8; + img[i+1] = (img[i+1] * img[i+3] + 128) >> 8; + img[i+2] = (img[i+2] * img[i+3] + 128) >> 8; + } + break; + default: + /* no other number of channels contains alpha data */ + break; + } + } + /* if the user can't support NPOT textures, make sure we force the POT option */ + if( (query_NPOT_capability() == SOIL_CAPABILITY_NONE) && + !(flags & SOIL_FLAG_TEXTURE_RECTANGLE) ) + { + /* add in the POT flag */ + flags |= SOIL_FLAG_POWER_OF_TWO; + } + /* how large of a texture can this OpenGL implementation handle? */ + /* texture_check_size_enum will be GL_MAX_TEXTURE_SIZE or SOIL_MAX_CUBE_MAP_TEXTURE_SIZE */ + glGetIntegerv( texture_check_size_enum, &max_supported_size ); + /* do I need to make it a power of 2? */ + if( + (flags & SOIL_FLAG_POWER_OF_TWO) || /* user asked for it */ + (flags & SOIL_FLAG_MIPMAPS) || /* need it for the MIP-maps */ + (width > max_supported_size) || /* it's too big, (make sure it's */ + (height > max_supported_size) ) /* 2^n for later down-sampling) */ + { + int new_width = 1; + int new_height = 1; + while( new_width < width ) + { + new_width *= 2; + } + while( new_height < height ) + { + new_height *= 2; + } + /* still? */ + if( (new_width != width) || (new_height != height) ) + { + /* yep, resize */ + unsigned char *resampled = (unsigned char*)malloc( channels*new_width*new_height ); + up_scale_image( + img, width, height, channels, + resampled, new_width, new_height ); + /* OJO this is for debug only! */ + /* + SOIL_save_image( "\\showme.bmp", SOIL_SAVE_TYPE_BMP, + new_width, new_height, channels, + resampled ); + */ + /* nuke the old guy, then point it at the new guy */ + SOIL_free_image_data( img ); + img = resampled; + width = new_width; + height = new_height; + } + } + /* now, if it is too large... */ + if( (width > max_supported_size) || (height > max_supported_size) ) + { + /* I've already made it a power of two, so simply use the MIPmapping + code to reduce its size to the allowable maximum. */ + unsigned char *resampled; + int reduce_block_x = 1, reduce_block_y = 1; + int new_width, new_height; + if( width > max_supported_size ) + { + reduce_block_x = width / max_supported_size; + } + if( height > max_supported_size ) + { + reduce_block_y = height / max_supported_size; + } + new_width = width / reduce_block_x; + new_height = height / reduce_block_y; + resampled = (unsigned char*)malloc( channels*new_width*new_height ); + /* perform the actual reduction */ + mipmap_image( img, width, height, channels, + resampled, reduce_block_x, reduce_block_y ); + /* nuke the old guy, then point it at the new guy */ + SOIL_free_image_data( img ); + img = resampled; + width = new_width; + height = new_height; + } + /* does the user want us to use YCoCg color space? */ + if( flags & SOIL_FLAG_CoCg_Y ) + { + /* this will only work with RGB and RGBA images */ + convert_RGB_to_YCoCg( img, width, height, channels ); + /* + save_image_as_DDS( "CoCg_Y.dds", width, height, channels, img ); + */ + } + /* create the OpenGL texture ID handle + (note: allowing a forced texture ID lets me reload a texture) */ + tex_id = reuse_texture_ID; + if( tex_id == 0 ) + { + glGenTextures( 1, &tex_id ); + } + check_for_GL_errors( "glGenTextures" ); + /* Note: sometimes glGenTextures fails (usually no OpenGL context) */ + if( tex_id ) + { + /* and what type am I using as the internal texture format? */ + switch( channels ) + { + case 1: + original_texture_format = GL_LUMINANCE; + break; + case 2: + original_texture_format = GL_LUMINANCE_ALPHA; + break; + case 3: + original_texture_format = GL_RGB; + break; + case 4: + original_texture_format = GL_RGBA; + break; + } + internal_texture_format = original_texture_format; + /* does the user want me to, and can I, save as DXT? */ + if( flags & SOIL_FLAG_COMPRESS_TO_DXT ) + { + DXT_mode = query_DXT_capability(); + if( DXT_mode == SOIL_CAPABILITY_PRESENT ) + { + /* I can use DXT, whether I compress it or OpenGL does */ + if( (channels & 1) == 1 ) + { + /* 1 or 3 channels = DXT1 */ + internal_texture_format = SOIL_RGB_S3TC_DXT1; + } else + { + /* 2 or 4 channels = DXT5 */ + internal_texture_format = SOIL_RGBA_S3TC_DXT5; + } + } + } + /* bind an OpenGL texture ID */ + glBindTexture( opengl_texture_type, tex_id ); + check_for_GL_errors( "glBindTexture" ); + /* upload the main image */ + if( DXT_mode == SOIL_CAPABILITY_PRESENT ) + { + /* user wants me to do the DXT conversion! */ + int DDS_size; + unsigned char *DDS_data = NULL; + if( (channels & 1) == 1 ) + { + /* RGB, use DXT1 */ + DDS_data = convert_image_to_DXT1( img, width, height, channels, &DDS_size ); + } else + { + /* RGBA, use DXT5 */ + DDS_data = convert_image_to_DXT5( img, width, height, channels, &DDS_size ); + } + if( DDS_data ) + { + soilGlCompressedTexImage2D( + opengl_texture_target, 0, + internal_texture_format, width, height, 0, + DDS_size, DDS_data ); + check_for_GL_errors( "glCompressedTexImage2D" ); + SOIL_free_image_data( DDS_data ); + /* printf( "Internal DXT compressor\n" ); */ + } else + { + /* my compression failed, try the OpenGL driver's version */ + glTexImage2D( + opengl_texture_target, 0, + internal_texture_format, width, height, 0, + original_texture_format, GL_UNSIGNED_BYTE, img ); + check_for_GL_errors( "glTexImage2D" ); + /* printf( "OpenGL DXT compressor\n" ); */ + } + } else + { + /* user want OpenGL to do all the work! */ + glTexImage2D( + opengl_texture_target, 0, + internal_texture_format, width, height, 0, + original_texture_format, GL_UNSIGNED_BYTE, img ); + check_for_GL_errors( "glTexImage2D" ); + /*printf( "OpenGL DXT compressor\n" ); */ + } + /* are any MIPmaps desired? */ + if( flags & SOIL_FLAG_MIPMAPS ) + { + int MIPlevel = 1; + int MIPwidth = (width+1) / 2; + int MIPheight = (height+1) / 2; + unsigned char *resampled = (unsigned char*)malloc( channels*MIPwidth*MIPheight ); + while( ((1< 0; --i ) + { + unsigned char temp = pixel_data[index1]; + pixel_data[index1] = pixel_data[index2]; + pixel_data[index2] = temp; + ++index1; + ++index2; + } + } + + /* save the image */ + save_result = SOIL_save_image( filename, image_type, width, height, 3, pixel_data); + + /* And free the memory */ + SOIL_free_image_data( pixel_data ); + return save_result; +} + +unsigned char* + SOIL_load_image + ( + const char *filename, + int *width, int *height, int *channels, + int force_channels + ) +{ + unsigned char *result = stbi_load( filename, + width, height, channels, force_channels ); + if( result == NULL ) + { + result_string_pointer = stbi_failure_reason(); + } else + { + result_string_pointer = "Image loaded"; + } + return result; +} + +unsigned char* + SOIL_load_image_from_memory + ( + const unsigned char *const buffer, + int buffer_length, + int *width, int *height, int *channels, + int force_channels + ) +{ + unsigned char *result = stbi_load_from_memory( + buffer, buffer_length, + width, height, channels, + force_channels ); + if( result == NULL ) + { + result_string_pointer = stbi_failure_reason(); + } else + { + result_string_pointer = "Image loaded from memory"; + } + return result; +} + +int + SOIL_save_image + ( + const char *filename, + int image_type, + int width, int height, int channels, + const unsigned char *const data + ) +{ + int save_result; + + /* error check */ + if( (width < 1) || (height < 1) || + (channels < 1) || (channels > 4) || + (data == NULL) || + (filename == NULL) ) + { + return 0; + } + if( image_type == SOIL_SAVE_TYPE_BMP ) + { + save_result = stbi_write_bmp( filename, + width, height, channels, (void*)data ); + } else + if( image_type == SOIL_SAVE_TYPE_TGA ) + { + save_result = stbi_write_tga( filename, + width, height, channels, (void*)data ); + } else + if( image_type == SOIL_SAVE_TYPE_DDS ) + { + save_result = save_image_as_DDS( filename, + width, height, channels, (const unsigned char *const)data ); + } else + { + save_result = 0; + } + if( save_result == 0 ) + { + result_string_pointer = "Saving the image failed"; + } else + { + result_string_pointer = "Image saved"; + } + return save_result; +} + +void + SOIL_free_image_data + ( + unsigned char *img_data + ) +{ + free( (void*)img_data ); +} + +const char* + SOIL_last_result + ( + void + ) +{ + return result_string_pointer; +} + +unsigned int SOIL_direct_load_DDS_from_memory( + const unsigned char *const buffer, + int buffer_length, + unsigned int reuse_texture_ID, + int flags, + int loading_as_cubemap ) +{ + /* variables */ + DDS_header header; + unsigned int buffer_index = 0; + unsigned int tex_ID = 0; + /* file reading variables */ + unsigned int S3TC_type = 0; + unsigned char *DDS_data; + unsigned int DDS_main_size; + unsigned int DDS_full_size; + unsigned int width, height; + int mipmaps, cubemap, uncompressed, block_size = 16; + unsigned int flag; + unsigned int cf_target, ogl_target_start, ogl_target_end; + unsigned int opengl_texture_type; + int i; + /* 1st off, does the filename even exist? */ + if( NULL == buffer ) + { + /* we can't do it! */ + result_string_pointer = "NULL buffer"; + return 0; + } + if( buffer_length < sizeof( DDS_header ) ) + { + /* we can't do it! */ + result_string_pointer = "DDS file was too small to contain the DDS header"; + return 0; + } + /* try reading in the header */ + memcpy ( (void*)(&header), (const void *)buffer, sizeof( DDS_header ) ); + buffer_index = sizeof( DDS_header ); + /* guilty until proven innocent */ + result_string_pointer = "Failed to read a known DDS header"; + /* validate the header (warning, "goto"'s ahead, shield your eyes!!) */ + flag = ('D'<<0)|('D'<<8)|('S'<<16)|(' '<<24); + if( header.dwMagic != flag ) {goto quick_exit;} + if( header.dwSize != 124 ) {goto quick_exit;} + /* I need all of these */ + flag = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT; + if( (header.dwFlags & flag) != flag ) {goto quick_exit;} + /* According to the MSDN spec, the dwFlags should contain + DDSD_LINEARSIZE if it's compressed, or DDSD_PITCH if + uncompressed. Some DDS writers do not conform to the + spec, so I need to make my reader more tolerant */ + /* I need one of these */ + flag = DDPF_FOURCC | DDPF_RGB; + if( (header.sPixelFormat.dwFlags & flag) == 0 ) {goto quick_exit;} + if( header.sPixelFormat.dwSize != 32 ) {goto quick_exit;} + if( (header.sCaps.dwCaps1 & DDSCAPS_TEXTURE) == 0 ) {goto quick_exit;} + /* make sure it is a type we can upload */ + if( (header.sPixelFormat.dwFlags & DDPF_FOURCC) && + !( + (header.sPixelFormat.dwFourCC == (('D'<<0)|('X'<<8)|('T'<<16)|('1'<<24))) || + (header.sPixelFormat.dwFourCC == (('D'<<0)|('X'<<8)|('T'<<16)|('3'<<24))) || + (header.sPixelFormat.dwFourCC == (('D'<<0)|('X'<<8)|('T'<<16)|('5'<<24))) + ) ) + { + goto quick_exit; + } + /* OK, validated the header, let's load the image data */ + result_string_pointer = "DDS header loaded and validated"; + width = header.dwWidth; + height = header.dwHeight; + uncompressed = 1 - (header.sPixelFormat.dwFlags & DDPF_FOURCC) / DDPF_FOURCC; + cubemap = (header.sCaps.dwCaps2 & DDSCAPS2_CUBEMAP) / DDSCAPS2_CUBEMAP; + if( uncompressed ) + { + S3TC_type = GL_RGB; + block_size = 3; + if( header.sPixelFormat.dwFlags & DDPF_ALPHAPIXELS ) + { + S3TC_type = GL_RGBA; + block_size = 4; + } + DDS_main_size = width * height * block_size; + } else + { + /* can we even handle direct uploading to OpenGL DXT compressed images? */ + if( query_DXT_capability() != SOIL_CAPABILITY_PRESENT ) + { + /* we can't do it! */ + result_string_pointer = "Direct upload of S3TC images not supported by the OpenGL driver"; + return 0; + } + /* well, we know it is DXT1/3/5, because we checked above */ + switch( (header.sPixelFormat.dwFourCC >> 24) - '0' ) + { + case 1: + S3TC_type = SOIL_RGBA_S3TC_DXT1; + block_size = 8; + break; + case 3: + S3TC_type = SOIL_RGBA_S3TC_DXT3; + block_size = 16; + break; + case 5: + S3TC_type = SOIL_RGBA_S3TC_DXT5; + block_size = 16; + break; + } + DDS_main_size = ((width+3)>>2)*((height+3)>>2)*block_size; + } + if( cubemap ) + { + /* does the user want a cubemap? */ + if( !loading_as_cubemap ) + { + /* we can't do it! */ + result_string_pointer = "DDS image was a cubemap"; + return 0; + } + /* can we even handle cubemaps with the OpenGL driver? */ + if( query_cubemap_capability() != SOIL_CAPABILITY_PRESENT ) + { + /* we can't do it! */ + result_string_pointer = "Direct upload of cubemap images not supported by the OpenGL driver"; + return 0; + } + ogl_target_start = SOIL_TEXTURE_CUBE_MAP_POSITIVE_X; + ogl_target_end = SOIL_TEXTURE_CUBE_MAP_NEGATIVE_Z; + opengl_texture_type = SOIL_TEXTURE_CUBE_MAP; + } else + { + /* does the user want a non-cubemap? */ + if( loading_as_cubemap ) + { + /* we can't do it! */ + result_string_pointer = "DDS image was not a cubemap"; + return 0; + } + ogl_target_start = GL_TEXTURE_2D; + ogl_target_end = GL_TEXTURE_2D; + opengl_texture_type = GL_TEXTURE_2D; + } + if( (header.sCaps.dwCaps1 & DDSCAPS_MIPMAP) && (header.dwMipMapCount > 1) ) + { + int shift_offset; + mipmaps = header.dwMipMapCount - 1; + DDS_full_size = DDS_main_size; + if( uncompressed ) + { + /* uncompressed DDS, simple MIPmap size calculation */ + shift_offset = 0; + } else + { + /* compressed DDS, MIPmap size calculation is block based */ + shift_offset = 2; + } + for( i = 1; i <= mipmaps; ++ i ) + { + int w, h; + w = width >> (shift_offset + i); + h = height >> (shift_offset + i); + if( w < 1 ) + { + w = 1; + } + if( h < 1 ) + { + h = 1; + } + DDS_full_size += w*h*block_size; + } + } else + { + mipmaps = 0; + DDS_full_size = DDS_main_size; + } + DDS_data = (unsigned char*)malloc( DDS_full_size ); + /* got the image data RAM, create or use an existing OpenGL texture handle */ + tex_ID = reuse_texture_ID; + if( tex_ID == 0 ) + { + glGenTextures( 1, &tex_ID ); + } + /* bind an OpenGL texture ID */ + glBindTexture( opengl_texture_type, tex_ID ); + /* do this for each face of the cubemap! */ + for( cf_target = ogl_target_start; cf_target <= ogl_target_end; ++cf_target ) + { + if( buffer_index + DDS_full_size <= buffer_length ) + { + unsigned int byte_offset = DDS_main_size; + memcpy( (void*)DDS_data, (const void*)(&buffer[buffer_index]), DDS_full_size ); + buffer_index += DDS_full_size; + /* upload the main chunk */ + if( uncompressed ) + { + /* and remember, DXT uncompressed uses BGR(A), + so swap to RGB(A) for ALL MIPmap levels */ + for( i = 0; i < DDS_full_size; i += block_size ) + { + unsigned char temp = DDS_data[i]; + DDS_data[i] = DDS_data[i+2]; + DDS_data[i+2] = temp; + } + glTexImage2D( + cf_target, 0, + S3TC_type, width, height, 0, + S3TC_type, GL_UNSIGNED_BYTE, DDS_data ); + } else + { + soilGlCompressedTexImage2D( + cf_target, 0, + S3TC_type, width, height, 0, + DDS_main_size, DDS_data ); + } + /* upload the mipmaps, if we have them */ + for( i = 1; i <= mipmaps; ++i ) + { + int w, h, mip_size; + w = width >> i; + h = height >> i; + if( w < 1 ) + { + w = 1; + } + if( h < 1 ) + { + h = 1; + } + /* upload this mipmap */ + if( uncompressed ) + { + mip_size = w*h*block_size; + glTexImage2D( + cf_target, i, + S3TC_type, w, h, 0, + S3TC_type, GL_UNSIGNED_BYTE, &DDS_data[byte_offset] ); + } else + { + mip_size = ((w+3)/4)*((h+3)/4)*block_size; + soilGlCompressedTexImage2D( + cf_target, i, + S3TC_type, w, h, 0, + mip_size, &DDS_data[byte_offset] ); + } + /* and move to the next mipmap */ + byte_offset += mip_size; + } + /* it worked! */ + result_string_pointer = "DDS file loaded"; + } else + { + glDeleteTextures( 1, & tex_ID ); + tex_ID = 0; + cf_target = ogl_target_end + 1; + result_string_pointer = "DDS file was too small for expected image data"; + } + }/* end reading each face */ + SOIL_free_image_data( DDS_data ); + if( tex_ID ) + { + /* did I have MIPmaps? */ + if( mipmaps > 0 ) + { + /* instruct OpenGL to use the MIPmaps */ + glTexParameteri( opengl_texture_type, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + glTexParameteri( opengl_texture_type, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); + } else + { + /* instruct OpenGL _NOT_ to use the MIPmaps */ + glTexParameteri( opengl_texture_type, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + glTexParameteri( opengl_texture_type, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); + } + /* does the user want clamping, or wrapping? */ + if( flags & SOIL_FLAG_TEXTURE_REPEATS ) + { + glTexParameteri( opengl_texture_type, GL_TEXTURE_WRAP_S, GL_REPEAT ); + glTexParameteri( opengl_texture_type, GL_TEXTURE_WRAP_T, GL_REPEAT ); + glTexParameteri( opengl_texture_type, SOIL_TEXTURE_WRAP_R, GL_REPEAT ); + } else + { + /* unsigned int clamp_mode = SOIL_CLAMP_TO_EDGE; */ + unsigned int clamp_mode = GL_CLAMP; + glTexParameteri( opengl_texture_type, GL_TEXTURE_WRAP_S, clamp_mode ); + glTexParameteri( opengl_texture_type, GL_TEXTURE_WRAP_T, clamp_mode ); + glTexParameteri( opengl_texture_type, SOIL_TEXTURE_WRAP_R, clamp_mode ); + } + } + +quick_exit: + /* report success or failure */ + return tex_ID; +} + +unsigned int SOIL_direct_load_DDS( + const char *filename, + unsigned int reuse_texture_ID, + int flags, + int loading_as_cubemap ) +{ + FILE *f; + unsigned char *buffer; + size_t buffer_length, bytes_read; + unsigned int tex_ID = 0; + /* error checks */ + if( NULL == filename ) + { + result_string_pointer = "NULL filename"; + return 0; + } + f = fopen( filename, "rb" ); + if( NULL == f ) + { + /* the file doesn't seem to exist (or be open-able) */ + result_string_pointer = "Can not find DDS file"; + return 0; + } + fseek( f, 0, SEEK_END ); + buffer_length = ftell( f ); + fseek( f, 0, SEEK_SET ); + buffer = (unsigned char *) malloc( buffer_length ); + if( NULL == buffer ) + { + result_string_pointer = "malloc failed"; + fclose( f ); + return 0; + } + bytes_read = fread( (void*)buffer, 1, buffer_length, f ); + fclose( f ); + if( bytes_read < buffer_length ) + { + /* huh? */ + buffer_length = bytes_read; + } + /* now try to do the loading */ + tex_ID = SOIL_direct_load_DDS_from_memory( + (const unsigned char *const)buffer, buffer_length, + reuse_texture_ID, flags, loading_as_cubemap ); + SOIL_free_image_data( buffer ); + return tex_ID; +} + +int query_NPOT_capability( void ) +{ + /* check for the capability */ + if( has_NPOT_capability == SOIL_CAPABILITY_UNKNOWN ) + { + /* we haven't yet checked for the capability, do so */ + if( + (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), + "GL_ARB_texture_non_power_of_two" ) ) + ) + { + /* not there, flag the failure */ + has_NPOT_capability = SOIL_CAPABILITY_NONE; + } else + { + /* it's there! */ + has_NPOT_capability = SOIL_CAPABILITY_PRESENT; + } + } + /* let the user know if we can do non-power-of-two textures or not */ + return has_NPOT_capability; +} + +int query_tex_rectangle_capability( void ) +{ + /* check for the capability */ + if( has_tex_rectangle_capability == SOIL_CAPABILITY_UNKNOWN ) + { + /* we haven't yet checked for the capability, do so */ + if( + (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), + "GL_ARB_texture_rectangle" ) ) + && + (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), + "GL_EXT_texture_rectangle" ) ) + && + (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), + "GL_NV_texture_rectangle" ) ) + ) + { + /* not there, flag the failure */ + has_tex_rectangle_capability = SOIL_CAPABILITY_NONE; + } else + { + /* it's there! */ + has_tex_rectangle_capability = SOIL_CAPABILITY_PRESENT; + } + } + /* let the user know if we can do texture rectangles or not */ + return has_tex_rectangle_capability; +} + +int query_cubemap_capability( void ) +{ + /* check for the capability */ + if( has_cubemap_capability == SOIL_CAPABILITY_UNKNOWN ) + { + /* we haven't yet checked for the capability, do so */ + if( + (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), + "GL_ARB_texture_cube_map" ) ) + && + (NULL == strstr( (char const*)glGetString( GL_EXTENSIONS ), + "GL_EXT_texture_cube_map" ) ) + ) + { + /* not there, flag the failure */ + has_cubemap_capability = SOIL_CAPABILITY_NONE; + } else + { + /* it's there! */ + has_cubemap_capability = SOIL_CAPABILITY_PRESENT; + } + } + /* let the user know if we can do cubemaps or not */ + return has_cubemap_capability; +} + +int query_DXT_capability( void ) +{ + /* check for the capability */ + if( has_DXT_capability == SOIL_CAPABILITY_UNKNOWN ) + { + /* we haven't yet checked for the capability, do so */ + if( NULL == strstr( + (char const*)glGetString( GL_EXTENSIONS ), + "GL_EXT_texture_compression_s3tc" ) ) + { + /* not there, flag the failure */ + has_DXT_capability = SOIL_CAPABILITY_NONE; + } else + { + /* and find the address of the extension function */ + P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC ext_addr = NULL; + #ifdef WIN32 + ext_addr = (P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC) + wglGetProcAddress + ( + "glCompressedTexImage2DARB" + ); + #elif defined(__APPLE__) || defined(__APPLE_CC__) + /* I can't test this Apple stuff! */ + CFBundleRef bundle; + CFURLRef bundleURL = + CFURLCreateWithFileSystemPath( + kCFAllocatorDefault, + CFSTR("/System/Library/Frameworks/OpenGL.framework"), + kCFURLPOSIXPathStyle, + true ); + CFStringRef extensionName = + CFStringCreateWithCString( + kCFAllocatorDefault, + "glCompressedTexImage2DARB", + kCFStringEncodingASCII ); + bundle = CFBundleCreate( kCFAllocatorDefault, bundleURL ); + assert( bundle != NULL ); + ext_addr = (P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC) + CFBundleGetFunctionPointerForName + ( + bundle, extensionName + ); + CFRelease( bundleURL ); + CFRelease( extensionName ); + CFRelease( bundle ); + #else + ext_addr = (P_SOIL_GLCOMPRESSEDTEXIMAGE2DPROC) + glXGetProcAddressARB + ( + (const GLubyte *)"glCompressedTexImage2DARB" + ); + #endif + /* Flag it so no checks needed later */ + if( NULL == ext_addr ) + { + /* hmm, not good!! This should not happen, but does on my + laptop's VIA chipset. The GL_EXT_texture_compression_s3tc + spec requires that ARB_texture_compression be present too. + this means I can upload and have the OpenGL drive do the + conversion, but I can't use my own routines or load DDS files + from disk and upload them directly [8^( */ + has_DXT_capability = SOIL_CAPABILITY_NONE; + } else + { + /* all's well! */ + soilGlCompressedTexImage2D = ext_addr; + has_DXT_capability = SOIL_CAPABILITY_PRESENT; + } + } + } + /* let the user know if we can do DXT or not */ + return has_DXT_capability; +} diff --git a/3rdparty/libprojectm/Renderer/SOIL/SOIL.h b/3rdparty/libprojectm/Renderer/SOIL/SOIL.h new file mode 100644 index 000000000..cb5ef91e4 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/SOIL/SOIL.h @@ -0,0 +1,444 @@ +/** + @mainpage SOIL + + Jonathan Dummer + 2007-07-26-10.36 + + Simple OpenGL Image Library + + A tiny c library for uploading images as + textures into OpenGL. Also saving and + loading of images is supported. + + I'm using Sean's Tool Box image loader as a base: + http://www.nothings.org/ + + I'm upgrading it to load TGA and DDS files, and a direct + path for loading DDS files straight into OpenGL textures, + when applicable. + + Image Formats: + - BMP load & save + - TGA load & save + - DDS load & save + - PNG load + - JPG load + + OpenGL Texture Features: + - resample to power-of-two sizes + - MIPmap generation + - compressed texture S3TC formats (if supported) + - can pre-multiply alpha for you, for better compositing + - can flip image about the y-axis (except pre-compressed DDS files) + + Thanks to: + * Sean Barret - for the awesome stb_image + * Dan Venkitachalam - for finding some non-compliant DDS files, and patching some explicit casts + * everybody at gamedev.net +**/ + +#ifndef HEADER_SIMPLE_OPENGL_IMAGE_LIBRARY +#define HEADER_SIMPLE_OPENGL_IMAGE_LIBRARY + +#ifdef __cplusplus +extern "C" { +#endif + +/** + The format of images that may be loaded (force_channels). + SOIL_LOAD_AUTO leaves the image in whatever format it was found. + SOIL_LOAD_L forces the image to load as Luminous (greyscale) + SOIL_LOAD_LA forces the image to load as Luminous with Alpha + SOIL_LOAD_RGB forces the image to load as Red Green Blue + SOIL_LOAD_RGBA forces the image to load as Red Green Blue Alpha +**/ +enum +{ + SOIL_LOAD_AUTO = 0, + SOIL_LOAD_L = 1, + SOIL_LOAD_LA = 2, + SOIL_LOAD_RGB = 3, + SOIL_LOAD_RGBA = 4 +}; + +/** + Passed in as reuse_texture_ID, will cause SOIL to + register a new texture ID using glGenTextures(). + If the value passed into reuse_texture_ID > 0 then + SOIL will just re-use that texture ID (great for + reloading image assets in-game!) +**/ +enum +{ + SOIL_CREATE_NEW_ID = 0 +}; + +/** + flags you can pass into SOIL_load_OGL_texture() + and SOIL_create_OGL_texture(). + (note that if SOIL_FLAG_DDS_LOAD_DIRECT is used + the rest of the flags with the exception of + SOIL_FLAG_TEXTURE_REPEATS will be ignored while + loading already-compressed DDS files.) + + SOIL_FLAG_POWER_OF_TWO: force the image to be POT + SOIL_FLAG_MIPMAPS: generate mipmaps for the texture + SOIL_FLAG_TEXTURE_REPEATS: otherwise will clamp + SOIL_FLAG_MULTIPLY_ALPHA: for using (GL_ONE,GL_ONE_MINUS_SRC_ALPHA) blending + SOIL_FLAG_INVERT_Y: flip the image vertically + SOIL_FLAG_COMPRESS_TO_DXT: if the card can display them, will convert RGB to DXT1, RGBA to DXT5 + SOIL_FLAG_DDS_LOAD_DIRECT: will load DDS files directly without _ANY_ additional processing + SOIL_FLAG_NTSC_SAFE_RGB: clamps RGB components to the range [16,235] + SOIL_FLAG_CoCg_Y: Google YCoCg; RGB=>CoYCg, RGBA=>CoCgAY + SOIL_FLAG_TEXTURE_RECTANGE: uses ARB_texture_rectangle ; pixel indexed & no repeat or MIPmaps or cubemaps +**/ +enum +{ + SOIL_FLAG_POWER_OF_TWO = 1, + SOIL_FLAG_MIPMAPS = 2, + SOIL_FLAG_TEXTURE_REPEATS = 4, + SOIL_FLAG_MULTIPLY_ALPHA = 8, + SOIL_FLAG_INVERT_Y = 16, + SOIL_FLAG_COMPRESS_TO_DXT = 32, + SOIL_FLAG_DDS_LOAD_DIRECT = 64, + SOIL_FLAG_NTSC_SAFE_RGB = 128, + SOIL_FLAG_CoCg_Y = 256, + SOIL_FLAG_TEXTURE_RECTANGLE = 512 +}; + +/** + The types of images that may be saved. + (TGA supports uncompressed RGB / RGBA) + (BMP supports uncompressed RGB) + (DDS supports DXT1 and DXT5) +**/ +enum +{ + SOIL_SAVE_TYPE_TGA = 0, + SOIL_SAVE_TYPE_BMP = 1, + SOIL_SAVE_TYPE_DDS = 2 +}; + +/** + Defines the order of faces in a DDS cubemap. + I recommend that you use the same order in single + image cubemap files, so they will be interchangeable + with DDS cubemaps when using SOIL. +**/ +#define SOIL_DDS_CUBEMAP_FACE_ORDER "EWUDNS" + +/** + The types of internal fake HDR representations + + SOIL_HDR_RGBE: RGB * pow( 2.0, A - 128.0 ) + SOIL_HDR_RGBdivA: RGB / A + SOIL_HDR_RGBdivA2: RGB / (A*A) +**/ +enum +{ + SOIL_HDR_RGBE = 0, + SOIL_HDR_RGBdivA = 1, + SOIL_HDR_RGBdivA2 = 2 +}; + +/** + Loads an image from disk into an OpenGL texture. + \param filename the name of the file to upload as a texture + \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int + SOIL_load_OGL_texture + ( + const char *filename, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +unsigned int + SOIL_load_OGL_texture_size + ( + const char *filename, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags, + int *width, + int *height + ); + +/** + Loads 6 images from disk into an OpenGL cubemap texture. + \param x_pos_file the name of the file to upload as the +x cube face + \param x_neg_file the name of the file to upload as the -x cube face + \param y_pos_file the name of the file to upload as the +y cube face + \param y_neg_file the name of the file to upload as the -y cube face + \param z_pos_file the name of the file to upload as the +z cube face + \param z_neg_file the name of the file to upload as the -z cube face + \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int + SOIL_load_OGL_cubemap + ( + const char *x_pos_file, + const char *x_neg_file, + const char *y_pos_file, + const char *y_neg_file, + const char *z_pos_file, + const char *z_neg_file, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Loads 1 image from disk and splits it into an OpenGL cubemap texture. + \param filename the name of the file to upload as a texture + \param face_order the order of the faces in the file, any combination of NSWEUD, for North, South, Up, etc. + \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int + SOIL_load_OGL_single_cubemap + ( + const char *filename, + const char face_order[6], + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Loads an HDR image from disk into an OpenGL texture. + \param filename the name of the file to upload as a texture + \param fake_HDR_format SOIL_HDR_RGBE, SOIL_HDR_RGBdivA, SOIL_HDR_RGBdivA2 + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int + SOIL_load_OGL_HDR_texture + ( + const char *filename, + int fake_HDR_format, + int rescale_to_max, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Loads an image from RAM into an OpenGL texture. + \param buffer the image data in RAM just as if it were still in a file + \param buffer_length the size of the buffer in bytes + \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int + SOIL_load_OGL_texture_from_memory + ( + const unsigned char *const buffer, + int buffer_length, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Loads 6 images from memory into an OpenGL cubemap texture. + \param x_pos_buffer the image data in RAM to upload as the +x cube face + \param x_pos_buffer_length the size of the above buffer + \param x_neg_buffer the image data in RAM to upload as the +x cube face + \param x_neg_buffer_length the size of the above buffer + \param y_pos_buffer the image data in RAM to upload as the +x cube face + \param y_pos_buffer_length the size of the above buffer + \param y_neg_buffer the image data in RAM to upload as the +x cube face + \param y_neg_buffer_length the size of the above buffer + \param z_pos_buffer the image data in RAM to upload as the +x cube face + \param z_pos_buffer_length the size of the above buffer + \param z_neg_buffer the image data in RAM to upload as the +x cube face + \param z_neg_buffer_length the size of the above buffer + \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int + SOIL_load_OGL_cubemap_from_memory + ( + const unsigned char *const x_pos_buffer, + int x_pos_buffer_length, + const unsigned char *const x_neg_buffer, + int x_neg_buffer_length, + const unsigned char *const y_pos_buffer, + int y_pos_buffer_length, + const unsigned char *const y_neg_buffer, + int y_neg_buffer_length, + const unsigned char *const z_pos_buffer, + int z_pos_buffer_length, + const unsigned char *const z_neg_buffer, + int z_neg_buffer_length, + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Loads 1 image from RAM and splits it into an OpenGL cubemap texture. + \param buffer the image data in RAM just as if it were still in a file + \param buffer_length the size of the buffer in bytes + \param face_order the order of the faces in the file, any combination of NSWEUD, for North, South, Up, etc. + \param force_channels 0-image format, 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int + SOIL_load_OGL_single_cubemap_from_memory + ( + const unsigned char *const buffer, + int buffer_length, + const char face_order[6], + int force_channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Creates a 2D OpenGL texture from raw image data. Note that the raw data is + _NOT_ freed after the upload (so the user can load various versions). + \param data the raw data to be uploaded as an OpenGL texture + \param width the width of the image in pixels + \param height the height of the image in pixels + \param channels the number of channels: 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int + SOIL_create_OGL_texture + ( + const unsigned char *const data, + int width, int height, int channels, + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Creates an OpenGL cubemap texture by splitting up 1 image into 6 parts. + \param data the raw data to be uploaded as an OpenGL texture + \param width the width of the image in pixels + \param height the height of the image in pixels + \param channels the number of channels: 1-luminous, 2-luminous/alpha, 3-RGB, 4-RGBA + \param face_order the order of the faces in the file, and combination of NSWEUD, for North, South, Up, etc. + \param reuse_texture_ID 0-generate a new texture ID, otherwise reuse the texture ID (overwriting the old texture) + \param flags can be any of SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MIPMAPS | SOIL_FLAG_TEXTURE_REPEATS | SOIL_FLAG_MULTIPLY_ALPHA | SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_DDS_LOAD_DIRECT + \return 0-failed, otherwise returns the OpenGL texture handle +**/ +unsigned int + SOIL_create_OGL_single_cubemap + ( + const unsigned char *const data, + int width, int height, int channels, + const char face_order[6], + unsigned int reuse_texture_ID, + unsigned int flags + ); + +/** + Captures the OpenGL window (RGB) and saves it to disk + \return 0 if it failed, otherwise returns 1 +**/ +int + SOIL_save_screenshot + ( + const char *filename, + int image_type, + int x, int y, + int width, int height + ); + +/** + Loads an image from disk into an array of unsigned chars. + Note that *channels return the original channel count of the + image. If force_channels was other than SOIL_LOAD_AUTO, + the resulting image has force_channels, but *channels may be + different (if the original image had a different channel + count). + \return 0 if failed, otherwise returns 1 +**/ +unsigned char* + SOIL_load_image + ( + const char *filename, + int *width, int *height, int *channels, + int force_channels + ); + +/** + Loads an image from memory into an array of unsigned chars. + Note that *channels return the original channel count of the + image. If force_channels was other than SOIL_LOAD_AUTO, + the resulting image has force_channels, but *channels may be + different (if the original image had a different channel + count). + \return 0 if failed, otherwise returns 1 +**/ +unsigned char* + SOIL_load_image_from_memory + ( + const unsigned char *const buffer, + int buffer_length, + int *width, int *height, int *channels, + int force_channels + ); + +/** + Saves an image from an array of unsigned chars (RGBA) to disk + \return 0 if failed, otherwise returns 1 +**/ +int + SOIL_save_image + ( + const char *filename, + int image_type, + int width, int height, int channels, + const unsigned char *const data + ); + +/** + Frees the image data (note, this is just C's "free()"...this function is + present mostly so C++ programmers don't forget to use "free()" and call + "delete []" instead [8^) +**/ +void + SOIL_free_image_data + ( + unsigned char *img_data + ); + +/** + This function resturn a pointer to a string describing the last thing + that happened inside SOIL. It can be used to determine why an image + failed to load. +**/ +const char* + SOIL_last_result + ( + void + ); + + +#ifdef __cplusplus +} +#endif + +#endif /* HEADER_SIMPLE_OPENGL_IMAGE_LIBRARY */ diff --git a/3rdparty/libprojectm/Renderer/SOIL/image_DXT.c b/3rdparty/libprojectm/Renderer/SOIL/image_DXT.c new file mode 100644 index 000000000..eb90be67b --- /dev/null +++ b/3rdparty/libprojectm/Renderer/SOIL/image_DXT.c @@ -0,0 +1,632 @@ +/* + Jonathan Dummer + 2007-07-31-10.32 + + simple DXT compression / decompression code + + public domain +*/ + +#include "image_DXT.h" +#include +#include +#include +#include + +/* set this =1 if you want to use the covarince matrix method... + which is better than my method of using standard deviations + overall, except on the infintesimal chance that the power + method fails for finding the largest eigenvector */ +#define USE_COV_MAT 1 + +/********* Function Prototypes *********/ +/* + Takes a 4x4 block of pixels and compresses it into 8 bytes + in DXT1 format (color only, no alpha). Speed is valued + over prettyness, at least for now. +*/ +void compress_DDS_color_block( + int channels, + const unsigned char *const uncompressed, + unsigned char compressed[8] ); +/* + Takes a 4x4 block of pixels and compresses the alpha + component it into 8 bytes for use in DXT5 DDS files. + Speed is valued over prettyness, at least for now. +*/ +void compress_DDS_alpha_block( + const unsigned char *const uncompressed, + unsigned char compressed[8] ); + +/********* Actual Exposed Functions *********/ +int + save_image_as_DDS + ( + const char *filename, + int width, int height, int channels, + const unsigned char *const data + ) +{ + /* variables */ + FILE *fout; + unsigned char *DDS_data; + DDS_header header; + int DDS_size; + /* error check */ + if( (NULL == filename) || + (width < 1) || (height < 1) || + (channels < 1) || (channels > 4) || + (data == NULL ) ) + { + return 0; + } + /* Convert the image */ + if( (channels & 1) == 1 ) + { + /* no alpha, just use DXT1 */ + DDS_data = convert_image_to_DXT1( data, width, height, channels, &DDS_size ); + } else + { + /* has alpha, so use DXT5 */ + DDS_data = convert_image_to_DXT5( data, width, height, channels, &DDS_size ); + } + /* save it */ + memset( &header, 0, sizeof( DDS_header ) ); + header.dwMagic = ('D' << 0) | ('D' << 8) | ('S' << 16) | (' ' << 24); + header.dwSize = 124; + header.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT | DDSD_LINEARSIZE; + header.dwWidth = width; + header.dwHeight = height; + header.dwPitchOrLinearSize = DDS_size; + header.sPixelFormat.dwSize = 32; + header.sPixelFormat.dwFlags = DDPF_FOURCC; + if( (channels & 1) == 1 ) + { + header.sPixelFormat.dwFourCC = ('D' << 0) | ('X' << 8) | ('T' << 16) | ('1' << 24); + } else + { + header.sPixelFormat.dwFourCC = ('D' << 0) | ('X' << 8) | ('T' << 16) | ('5' << 24); + } + header.sCaps.dwCaps1 = DDSCAPS_TEXTURE; + /* write it out */ + fout = fopen( filename, "wb"); + fwrite( &header, sizeof( DDS_header ), 1, fout ); + fwrite( DDS_data, 1, DDS_size, fout ); + fclose( fout ); + /* done */ + free( DDS_data ); + return 1; +} + +unsigned char* convert_image_to_DXT1( + const unsigned char *const uncompressed, + int width, int height, int channels, + int *out_size ) +{ + unsigned char *compressed; + int i, j, x, y; + unsigned char ublock[16*3]; + unsigned char cblock[8]; + int index = 0, chan_step = 1; + int block_count = 0; + /* error check */ + *out_size = 0; + if( (width < 1) || (height < 1) || + (NULL == uncompressed) || + (channels < 1) || (channels > 4) ) + { + return NULL; + } + /* for channels == 1 or 2, I do not step forward for R,G,B values */ + if( channels < 3 ) + { + chan_step = 0; + } + /* get the RAM for the compressed image + (8 bytes per 4x4 pixel block) */ + *out_size = ((width+3) >> 2) * ((height+3) >> 2) * 8; + compressed = (unsigned char*)malloc( *out_size ); + /* go through each block */ + for( j = 0; j < height; j += 4 ) + { + for( i = 0; i < width; i += 4 ) + { + /* copy this block into a new one */ + int idx = 0; + int mx = 4, my = 4; + if( j+4 >= height ) + { + my = height - j; + } + if( i+4 >= width ) + { + mx = width - i; + } + for( y = 0; y < my; ++y ) + { + for( x = 0; x < mx; ++x ) + { + ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels]; + ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels+chan_step]; + ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels+chan_step+chan_step]; + } + for( x = mx; x < 4; ++x ) + { + ublock[idx++] = ublock[0]; + ublock[idx++] = ublock[1]; + ublock[idx++] = ublock[2]; + } + } + for( y = my; y < 4; ++y ) + { + for( x = 0; x < 4; ++x ) + { + ublock[idx++] = ublock[0]; + ublock[idx++] = ublock[1]; + ublock[idx++] = ublock[2]; + } + } + /* compress the block */ + ++block_count; + compress_DDS_color_block( 3, ublock, cblock ); + /* copy the data from the block into the main block */ + for( x = 0; x < 8; ++x ) + { + compressed[index++] = cblock[x]; + } + } + } + return compressed; +} + +unsigned char* convert_image_to_DXT5( + const unsigned char *const uncompressed, + int width, int height, int channels, + int *out_size ) +{ + unsigned char *compressed; + int i, j, x, y; + unsigned char ublock[16*4]; + unsigned char cblock[8]; + int index = 0, chan_step = 1; + int block_count = 0, has_alpha; + /* error check */ + *out_size = 0; + if( (width < 1) || (height < 1) || + (NULL == uncompressed) || + (channels < 1) || ( channels > 4) ) + { + return NULL; + } + /* for channels == 1 or 2, I do not step forward for R,G,B vales */ + if( channels < 3 ) + { + chan_step = 0; + } + /* # channels = 1 or 3 have no alpha, 2 & 4 do have alpha */ + has_alpha = 1 - (channels & 1); + /* get the RAM for the compressed image + (16 bytes per 4x4 pixel block) */ + *out_size = ((width+3) >> 2) * ((height+3) >> 2) * 16; + compressed = (unsigned char*)malloc( *out_size ); + /* go through each block */ + for( j = 0; j < height; j += 4 ) + { + for( i = 0; i < width; i += 4 ) + { + /* local variables, and my block counter */ + int idx = 0; + int mx = 4, my = 4; + if( j+4 >= height ) + { + my = height - j; + } + if( i+4 >= width ) + { + mx = width - i; + } + for( y = 0; y < my; ++y ) + { + for( x = 0; x < mx; ++x ) + { + ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels]; + ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels+chan_step]; + ublock[idx++] = uncompressed[(j+y)*width*channels+(i+x)*channels+chan_step+chan_step]; + ublock[idx++] = + has_alpha * uncompressed[(j+y)*width*channels+(i+x)*channels+channels-1] + + (1-has_alpha)*255; + } + for( x = mx; x < 4; ++x ) + { + ublock[idx++] = ublock[0]; + ublock[idx++] = ublock[1]; + ublock[idx++] = ublock[2]; + ublock[idx++] = ublock[3]; + } + } + for( y = my; y < 4; ++y ) + { + for( x = 0; x < 4; ++x ) + { + ublock[idx++] = ublock[0]; + ublock[idx++] = ublock[1]; + ublock[idx++] = ublock[2]; + ublock[idx++] = ublock[3]; + } + } + /* now compress the alpha block */ + compress_DDS_alpha_block( ublock, cblock ); + /* copy the data from the compressed alpha block into the main buffer */ + for( x = 0; x < 8; ++x ) + { + compressed[index++] = cblock[x]; + } + /* then compress the color block */ + ++block_count; + compress_DDS_color_block( 4, ublock, cblock ); + /* copy the data from the compressed color block into the main buffer */ + for( x = 0; x < 8; ++x ) + { + compressed[index++] = cblock[x]; + } + } + } + return compressed; +} + +/********* Helper Functions *********/ +int convert_bit_range( int c, int from_bits, int to_bits ) +{ + int b = (1 << (from_bits - 1)) + c * ((1 << to_bits) - 1); + return (b + (b >> from_bits)) >> from_bits; +} + +int rgb_to_565( int r, int g, int b ) +{ + return + (convert_bit_range( r, 8, 5 ) << 11) | + (convert_bit_range( g, 8, 6 ) << 05) | + (convert_bit_range( b, 8, 5 ) << 00); +} + +void rgb_888_from_565( unsigned int c, int *r, int *g, int *b ) +{ + *r = convert_bit_range( (c >> 11) & 31, 5, 8 ); + *g = convert_bit_range( (c >> 05) & 63, 6, 8 ); + *b = convert_bit_range( (c >> 00) & 31, 5, 8 ); +} + +void compute_color_line_STDEV( + const unsigned char *const uncompressed, + int channels, + float point[3], float direction[3] ) +{ + const float inv_16 = 1.0f / 16.0f; + int i; + float sum_r = 0.0f, sum_g = 0.0f, sum_b = 0.0f; + float sum_rr = 0.0f, sum_gg = 0.0f, sum_bb = 0.0f; + float sum_rg = 0.0f, sum_rb = 0.0f, sum_gb = 0.0f; + /* calculate all data needed for the covariance matrix + ( to compare with _rygdxt code) */ + for( i = 0; i < 16*channels; i += channels ) + { + sum_r += uncompressed[i+0]; + sum_rr += uncompressed[i+0] * uncompressed[i+0]; + sum_g += uncompressed[i+1]; + sum_gg += uncompressed[i+1] * uncompressed[i+1]; + sum_b += uncompressed[i+2]; + sum_bb += uncompressed[i+2] * uncompressed[i+2]; + sum_rg += uncompressed[i+0] * uncompressed[i+1]; + sum_rb += uncompressed[i+0] * uncompressed[i+2]; + sum_gb += uncompressed[i+1] * uncompressed[i+2]; + } + /* convert the sums to averages */ + sum_r *= inv_16; + sum_g *= inv_16; + sum_b *= inv_16; + /* and convert the squares to the squares of the value - avg_value */ + sum_rr -= 16.0f * sum_r * sum_r; + sum_gg -= 16.0f * sum_g * sum_g; + sum_bb -= 16.0f * sum_b * sum_b; + sum_rg -= 16.0f * sum_r * sum_g; + sum_rb -= 16.0f * sum_r * sum_b; + sum_gb -= 16.0f * sum_g * sum_b; + /* the point on the color line is the average */ + point[0] = sum_r; + point[1] = sum_g; + point[2] = sum_b; + #if USE_COV_MAT + /* + The following idea was from ryg. + (https://mollyrocket.com/forums/viewtopic.php?t=392) + The method worked great (less RMSE than mine) most of + the time, but had some issues handling some simple + boundary cases, like full green next to full red, + which would generate a covariance matrix like this: + + | 1 -1 0 | + | -1 1 0 | + | 0 0 0 | + + For a given starting vector, the power method can + generate all zeros! So no starting with {1,1,1} + as I was doing! This kind of error is still a + slight posibillity, but will be very rare. + */ + /* use the covariance matrix directly + (1st iteration, don't use all 1.0 values!) */ + sum_r = 1.0f; + sum_g = 2.718281828f; + sum_b = 3.141592654f; + direction[0] = sum_r*sum_rr + sum_g*sum_rg + sum_b*sum_rb; + direction[1] = sum_r*sum_rg + sum_g*sum_gg + sum_b*sum_gb; + direction[2] = sum_r*sum_rb + sum_g*sum_gb + sum_b*sum_bb; + /* 2nd iteration, use results from the 1st guy */ + sum_r = direction[0]; + sum_g = direction[1]; + sum_b = direction[2]; + direction[0] = sum_r*sum_rr + sum_g*sum_rg + sum_b*sum_rb; + direction[1] = sum_r*sum_rg + sum_g*sum_gg + sum_b*sum_gb; + direction[2] = sum_r*sum_rb + sum_g*sum_gb + sum_b*sum_bb; + /* 3rd iteration, use results from the 2nd guy */ + sum_r = direction[0]; + sum_g = direction[1]; + sum_b = direction[2]; + direction[0] = sum_r*sum_rr + sum_g*sum_rg + sum_b*sum_rb; + direction[1] = sum_r*sum_rg + sum_g*sum_gg + sum_b*sum_gb; + direction[2] = sum_r*sum_rb + sum_g*sum_gb + sum_b*sum_bb; + #else + /* use my standard deviation method + (very robust, a tiny bit slower and less accurate) */ + direction[0] = sqrt( sum_rr ); + direction[1] = sqrt( sum_gg ); + direction[2] = sqrt( sum_bb ); + /* which has a greater component */ + if( sum_gg > sum_rr ) + { + /* green has greater component, so base the other signs off of green */ + if( sum_rg < 0.0f ) + { + direction[0] = -direction[0]; + } + if( sum_gb < 0.0f ) + { + direction[2] = -direction[2]; + } + } else + { + /* red has a greater component */ + if( sum_rg < 0.0f ) + { + direction[1] = -direction[1]; + } + if( sum_rb < 0.0f ) + { + direction[2] = -direction[2]; + } + } + #endif +} + +void LSE_master_colors_max_min( + int *cmax, int *cmin, + int channels, + const unsigned char *const uncompressed ) +{ + int i, j; + /* the master colors */ + int c0[3], c1[3]; + /* used for fitting the line */ + float sum_x[] = { 0.0f, 0.0f, 0.0f }; + float sum_x2[] = { 0.0f, 0.0f, 0.0f }; + float dot_max = 1.0f, dot_min = -1.0f; + float vec_len2 = 0.0f; + float dot; + /* error check */ + if( (channels < 3) || (channels > 4) ) + { + return; + } + compute_color_line_STDEV( uncompressed, channels, sum_x, sum_x2 ); + vec_len2 = 1.0f / ( 0.00001f + + sum_x2[0]*sum_x2[0] + sum_x2[1]*sum_x2[1] + sum_x2[2]*sum_x2[2] ); + /* finding the max and min vector values */ + dot_max = + ( + sum_x2[0] * uncompressed[0] + + sum_x2[1] * uncompressed[1] + + sum_x2[2] * uncompressed[2] + ); + dot_min = dot_max; + for( i = 1; i < 16; ++i ) + { + dot = + ( + sum_x2[0] * uncompressed[i*channels+0] + + sum_x2[1] * uncompressed[i*channels+1] + + sum_x2[2] * uncompressed[i*channels+2] + ); + if( dot < dot_min ) + { + dot_min = dot; + } else if( dot > dot_max ) + { + dot_max = dot; + } + } + /* and the offset (from the average location) */ + dot = sum_x2[0]*sum_x[0] + sum_x2[1]*sum_x[1] + sum_x2[2]*sum_x[2]; + dot_min -= dot; + dot_max -= dot; + /* post multiply by the scaling factor */ + dot_min *= vec_len2; + dot_max *= vec_len2; + /* OK, build the master colors */ + for( i = 0; i < 3; ++i ) + { + /* color 0 */ + c0[i] = (int)(0.5f + sum_x[i] + dot_max * sum_x2[i]); + if( c0[i] < 0 ) + { + c0[i] = 0; + } else if( c0[i] > 255 ) + { + c0[i] = 255; + } + /* color 1 */ + c1[i] = (int)(0.5f + sum_x[i] + dot_min * sum_x2[i]); + if( c1[i] < 0 ) + { + c1[i] = 0; + } else if( c1[i] > 255 ) + { + c1[i] = 255; + } + } + /* down_sample (with rounding?) */ + i = rgb_to_565( c0[0], c0[1], c0[2] ); + j = rgb_to_565( c1[0], c1[1], c1[2] ); + if( i > j ) + { + *cmax = i; + *cmin = j; + } else + { + *cmax = j; + *cmin = i; + } +} + +void + compress_DDS_color_block + ( + int channels, + const unsigned char *const uncompressed, + unsigned char compressed[8] + ) +{ + /* variables */ + int i; + int next_bit; + int enc_c0, enc_c1; + int c0[4], c1[4]; + float color_line[] = { 0.0f, 0.0f, 0.0f, 0.0f }; + float vec_len2 = 0.0f, dot_offset = 0.0f; + /* stupid order */ + int swizzle4[] = { 0, 2, 3, 1 }; + /* get the master colors */ + LSE_master_colors_max_min( &enc_c0, &enc_c1, channels, uncompressed ); + /* store the 565 color 0 and color 1 */ + compressed[0] = (enc_c0 >> 0) & 255; + compressed[1] = (enc_c0 >> 8) & 255; + compressed[2] = (enc_c1 >> 0) & 255; + compressed[3] = (enc_c1 >> 8) & 255; + /* zero out the compressed data */ + compressed[4] = 0; + compressed[5] = 0; + compressed[6] = 0; + compressed[7] = 0; + /* reconstitute the master color vectors */ + rgb_888_from_565( enc_c0, &c0[0], &c0[1], &c0[2] ); + rgb_888_from_565( enc_c1, &c1[0], &c1[1], &c1[2] ); + /* the new vector */ + vec_len2 = 0.0f; + for( i = 0; i < 3; ++i ) + { + color_line[i] = (float)(c1[i] - c0[i]); + vec_len2 += color_line[i] * color_line[i]; + } + if( vec_len2 > 0.0f ) + { + vec_len2 = 1.0f / vec_len2; + } + /* pre-proform the scaling */ + color_line[0] *= vec_len2; + color_line[1] *= vec_len2; + color_line[2] *= vec_len2; + /* compute the offset (constant) portion of the dot product */ + dot_offset = color_line[0]*c0[0] + color_line[1]*c0[1] + color_line[2]*c0[2]; + /* store the rest of the bits */ + next_bit = 8*4; + for( i = 0; i < 16; ++i ) + { + /* find the dot product of this color, to place it on the line + (should be [-1,1]) */ + int next_value = 0; + float dot_product = + color_line[0] * uncompressed[i*channels+0] + + color_line[1] * uncompressed[i*channels+1] + + color_line[2] * uncompressed[i*channels+2] - + dot_offset; + /* map to [0,3] */ + next_value = (int)( dot_product * 3.0f + 0.5f ); + if( next_value > 3 ) + { + next_value = 3; + } else if( next_value < 0 ) + { + next_value = 0; + } + /* OK, store this value */ + compressed[next_bit >> 3] |= swizzle4[ next_value ] << (next_bit & 7); + next_bit += 2; + } + /* done compressing to DXT1 */ +} + +void + compress_DDS_alpha_block + ( + const unsigned char *const uncompressed, + unsigned char compressed[8] + ) +{ + /* variables */ + int i; + int next_bit; + int a0, a1; + float scale_me; + /* stupid order */ + int swizzle8[] = { 1, 7, 6, 5, 4, 3, 2, 0 }; + /* get the alpha limits (a0 > a1) */ + a0 = a1 = uncompressed[3]; + for( i = 4+3; i < 16*4; i += 4 ) + { + if( uncompressed[i] > a0 ) + { + a0 = uncompressed[i]; + } else if( uncompressed[i] < a1 ) + { + a1 = uncompressed[i]; + } + } + /* store those limits, and zero the rest of the compressed dataset */ + compressed[0] = a0; + compressed[1] = a1; + /* zero out the compressed data */ + compressed[2] = 0; + compressed[3] = 0; + compressed[4] = 0; + compressed[5] = 0; + compressed[6] = 0; + compressed[7] = 0; + /* store the all of the alpha values */ + next_bit = 8*2; + scale_me = 7.9999f / (a0 - a1); + for( i = 3; i < 16*4; i += 4 ) + { + /* convert this alpha value to a 3 bit number */ + int svalue; + int value = (int)((uncompressed[i] - a1) * scale_me); + svalue = swizzle8[ value&7 ]; + /* OK, store this value, start with the 1st byte */ + compressed[next_bit >> 3] |= svalue << (next_bit & 7); + if( (next_bit & 7) > 5 ) + { + /* spans 2 bytes, fill in the start of the 2nd byte */ + compressed[1 + (next_bit >> 3)] |= svalue >> (8 - (next_bit & 7) ); + } + next_bit += 3; + } + /* done compressing to DXT1 */ +} diff --git a/3rdparty/libprojectm/Renderer/SOIL/image_DXT.h b/3rdparty/libprojectm/Renderer/SOIL/image_DXT.h new file mode 100644 index 000000000..ce7716425 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/SOIL/image_DXT.h @@ -0,0 +1,123 @@ +/* + Jonathan Dummer + 2007-07-31-10.32 + + simple DXT compression / decompression code + + public domain +*/ + +#ifndef HEADER_IMAGE_DXT +#define HEADER_IMAGE_DXT + +/** + Converts an image from an array of unsigned chars (RGB or RGBA) to + DXT1 or DXT5, then saves the converted image to disk. + \return 0 if failed, otherwise returns 1 +**/ +int +save_image_as_DDS +( + const char *filename, + int width, int height, int channels, + const unsigned char *const data +); + +/** + take an image and convert it to DXT1 (no alpha) +**/ +unsigned char* +convert_image_to_DXT1 +( + const unsigned char *const uncompressed, + int width, int height, int channels, + int *out_size +); + +/** + take an image and convert it to DXT5 (with alpha) +**/ +unsigned char* +convert_image_to_DXT5 +( + const unsigned char *const uncompressed, + int width, int height, int channels, + int *out_size +); + +/** A bunch of DirectDraw Surface structures and flags **/ +typedef struct +{ + unsigned int dwMagic; + unsigned int dwSize; + unsigned int dwFlags; + unsigned int dwHeight; + unsigned int dwWidth; + unsigned int dwPitchOrLinearSize; + unsigned int dwDepth; + unsigned int dwMipMapCount; + unsigned int dwReserved1[ 11 ]; + + /* DDPIXELFORMAT */ + struct + { + unsigned int dwSize; + unsigned int dwFlags; + unsigned int dwFourCC; + unsigned int dwRGBBitCount; + unsigned int dwRBitMask; + unsigned int dwGBitMask; + unsigned int dwBBitMask; + unsigned int dwAlphaBitMask; + } + sPixelFormat; + + /* DDCAPS2 */ + struct + { + unsigned int dwCaps1; + unsigned int dwCaps2; + unsigned int dwDDSX; + unsigned int dwReserved; + } + sCaps; + unsigned int dwReserved2; +} +DDS_header ; + +/* the following constants were copied directly off the MSDN website */ + +/* The dwFlags member of the original DDSURFACEDESC2 structure + can be set to one or more of the following values. */ +#define DDSD_CAPS 0x00000001 +#define DDSD_HEIGHT 0x00000002 +#define DDSD_WIDTH 0x00000004 +#define DDSD_PITCH 0x00000008 +#define DDSD_PIXELFORMAT 0x00001000 +#define DDSD_MIPMAPCOUNT 0x00020000 +#define DDSD_LINEARSIZE 0x00080000 +#define DDSD_DEPTH 0x00800000 + +/* DirectDraw Pixel Format */ +#define DDPF_ALPHAPIXELS 0x00000001 +#define DDPF_FOURCC 0x00000004 +#define DDPF_RGB 0x00000040 + +/* The dwCaps1 member of the DDSCAPS2 structure can be + set to one or more of the following values. */ +#define DDSCAPS_COMPLEX 0x00000008 +#define DDSCAPS_TEXTURE 0x00001000 +#define DDSCAPS_MIPMAP 0x00400000 + +/* The dwCaps2 member of the DDSCAPS2 structure can be + set to one or more of the following values. */ +#define DDSCAPS2_CUBEMAP 0x00000200 +#define DDSCAPS2_CUBEMAP_POSITIVEX 0x00000400 +#define DDSCAPS2_CUBEMAP_NEGATIVEX 0x00000800 +#define DDSCAPS2_CUBEMAP_POSITIVEY 0x00001000 +#define DDSCAPS2_CUBEMAP_NEGATIVEY 0x00002000 +#define DDSCAPS2_CUBEMAP_POSITIVEZ 0x00004000 +#define DDSCAPS2_CUBEMAP_NEGATIVEZ 0x00008000 +#define DDSCAPS2_VOLUME 0x00200000 + +#endif /* HEADER_IMAGE_DXT */ diff --git a/3rdparty/libprojectm/Renderer/SOIL/image_helper.c b/3rdparty/libprojectm/Renderer/SOIL/image_helper.c new file mode 100644 index 000000000..445f6bbf5 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/SOIL/image_helper.c @@ -0,0 +1,435 @@ +/* + Jonathan Dummer + + image helper functions + + MIT license +*/ + +#include "image_helper.h" +#include +#include + +/* Upscaling the image uses simple bilinear interpolation */ +int + up_scale_image + ( + const unsigned char* const orig, + int width, int height, int channels, + unsigned char* resampled, + int resampled_width, int resampled_height + ) +{ + float dx, dy; + int x, y, c; + + /* error(s) check */ + if ( (width < 1) || (height < 1) || + (resampled_width < 2) || (resampled_height < 2) || + (channels < 1) || + (NULL == orig) || (NULL == resampled) ) + { + /* signify badness */ + return 0; + } + /* + for each given pixel in the new map, find the exact location + from the original map which would contribute to this guy + */ + dx = (width - 1.0f) / (resampled_width - 1.0f); + dy = (height - 1.0f) / (resampled_height - 1.0f); + for ( y = 0; y < resampled_height; ++y ) + { + /* find the base y index and fractional offset from that */ + float sampley = y * dy; + int inty = (int)sampley; + /* if( inty < 0 ) { inty = 0; } else */ + if( inty > height - 2 ) { inty = height - 2; } + sampley -= inty; + for ( x = 0; x < resampled_width; ++x ) + { + float samplex = x * dx; + int intx = (int)samplex; + int base_index; + /* find the base x index and fractional offset from that */ + /* if( intx < 0 ) { intx = 0; } else */ + if( intx > width - 2 ) { intx = width - 2; } + samplex -= intx; + /* base index into the original image */ + base_index = (inty * width + intx) * channels; + for ( c = 0; c < channels; ++c ) + { + /* do the sampling */ + float value = 0.5f; + value += orig[base_index] + *(1.0f-samplex)*(1.0f-sampley); + value += orig[base_index+channels] + *(samplex)*(1.0f-sampley); + value += orig[base_index+width*channels] + *(1.0f-samplex)*(sampley); + value += orig[base_index+width*channels+channels] + *(samplex)*(sampley); + /* move to the next channel */ + ++base_index; + /* save the new value */ + resampled[y*resampled_width*channels+x*channels+c] = + (unsigned char)(value); + } + } + } + /* done */ + return 1; +} + +int + mipmap_image + ( + const unsigned char* const orig, + int width, int height, int channels, + unsigned char* resampled, + int block_size_x, int block_size_y + ) +{ + int mip_width, mip_height; + int i, j, c; + + /* error check */ + if( (width < 1) || (height < 1) || + (channels < 1) || (orig == NULL) || + (resampled == NULL) || + (block_size_x < 1) || (block_size_y < 1) ) + { + /* nothing to do */ + return 0; + } + mip_width = width / block_size_x; + mip_height = height / block_size_y; + if( mip_width < 1 ) + { + mip_width = 1; + } + if( mip_height < 1 ) + { + mip_height = 1; + } + for( j = 0; j < mip_height; ++j ) + { + for( i = 0; i < mip_width; ++i ) + { + for( c = 0; c < channels; ++c ) + { + const int index = (j*block_size_y)*width*channels + (i*block_size_x)*channels + c; + int sum_value; + int u,v; + int u_block = block_size_x; + int v_block = block_size_y; + int block_area; + /* do a bit of checking so we don't over-run the boundaries + (necessary for non-square textures!) */ + if( block_size_x * (i+1) > width ) + { + u_block = width - i*block_size_y; + } + if( block_size_y * (j+1) > height ) + { + v_block = height - j*block_size_y; + } + block_area = u_block*v_block; + /* for this pixel, see what the average + of all the values in the block are. + note: start the sum at the rounding value, not at 0 */ + sum_value = block_area >> 1; + for( v = 0; v < v_block; ++v ) + for( u = 0; u < u_block; ++u ) + { + sum_value += orig[index + v*width*channels + u*channels]; + } + resampled[j*mip_width*channels + i*channels + c] = sum_value / block_area; + } + } + } + return 1; +} + +int + scale_image_RGB_to_NTSC_safe + ( + unsigned char* orig, + int width, int height, int channels + ) +{ + const float scale_lo = 16.0f - 0.499f; + const float scale_hi = 235.0f + 0.499f; + int i, j; + int nc = channels; + unsigned char scale_LUT[256]; + /* error check */ + if( (width < 1) || (height < 1) || + (channels < 1) || (orig == NULL) ) + { + /* nothing to do */ + return 0; + } + /* set up the scaling Look Up Table */ + for( i = 0; i < 256; ++i ) + { + scale_LUT[i] = (unsigned char)((scale_hi - scale_lo) * i / 255.0f + scale_lo); + } + /* for channels = 2 or 4, ignore the alpha component */ + nc -= 1 - (channels & 1); + /* OK, go through the image and scale any non-alpha components */ + for( i = 0; i < width*height*channels; i += channels ) + { + for( j = 0; j < nc; ++j ) + { + orig[i+j] = scale_LUT[orig[i+j]]; + } + } + return 1; +} + +unsigned char clamp_byte( int x ) { return ( (x) < 0 ? (0) : ( (x) > 255 ? 255 : (x) ) ); } + +/* + This function takes the RGB components of the image + and converts them into YCoCg. 3 components will be + re-ordered to CoYCg (for optimum DXT1 compression), + while 4 components will be ordered CoCgAY (for DXT5 + compression). +*/ +int + convert_RGB_to_YCoCg + ( + unsigned char* orig, + int width, int height, int channels + ) +{ + int i; + /* error check */ + if( (width < 1) || (height < 1) || + (channels < 3) || (channels > 4) || + (orig == NULL) ) + { + /* nothing to do */ + return -1; + } + /* do the conversion */ + if( channels == 3 ) + { + for( i = 0; i < width*height*3; i += 3 ) + { + int r = orig[i+0]; + int g = (orig[i+1] + 1) >> 1; + int b = orig[i+2]; + int tmp = (2 + r + b) >> 2; + /* Co */ + orig[i+0] = clamp_byte( 128 + ((r - b + 1) >> 1) ); + /* Y */ + orig[i+1] = clamp_byte( g + tmp ); + /* Cg */ + orig[i+2] = clamp_byte( 128 + g - tmp ); + } + } else + { + for( i = 0; i < width*height*4; i += 4 ) + { + int r = orig[i+0]; + int g = (orig[i+1] + 1) >> 1; + int b = orig[i+2]; + unsigned char a = orig[i+3]; + int tmp = (2 + r + b) >> 2; + /* Co */ + orig[i+0] = clamp_byte( 128 + ((r - b + 1) >> 1) ); + /* Cg */ + orig[i+1] = clamp_byte( 128 + g - tmp ); + /* Alpha */ + orig[i+2] = a; + /* Y */ + orig[i+3] = clamp_byte( g + tmp ); + } + } + /* done */ + return 0; +} + +/* + This function takes the YCoCg components of the image + and converts them into RGB. See above. +*/ +int + convert_YCoCg_to_RGB + ( + unsigned char* orig, + int width, int height, int channels + ) +{ + int i; + /* error check */ + if( (width < 1) || (height < 1) || + (channels < 3) || (channels > 4) || + (orig == NULL) ) + { + /* nothing to do */ + return -1; + } + /* do the conversion */ + if( channels == 3 ) + { + for( i = 0; i < width*height*3; i += 3 ) + { + int co = orig[i+0] - 128; + int y = orig[i+1]; + int cg = orig[i+2] - 128; + /* R */ + orig[i+0] = clamp_byte( y + co - cg ); + /* G */ + orig[i+1] = clamp_byte( y + cg ); + /* B */ + orig[i+2] = clamp_byte( y - co - cg ); + } + } else + { + for( i = 0; i < width*height*4; i += 4 ) + { + int co = orig[i+0] - 128; + int cg = orig[i+1] - 128; + unsigned char a = orig[i+2]; + int y = orig[i+3]; + /* R */ + orig[i+0] = clamp_byte( y + co - cg ); + /* G */ + orig[i+1] = clamp_byte( y + cg ); + /* B */ + orig[i+2] = clamp_byte( y - co - cg ); + /* A */ + orig[i+3] = a; + } + } + /* done */ + return 0; +} + +float +find_max_RGBE +( + unsigned char *image, + int width, int height +) +{ + float max_val = 0.0f; + unsigned char *img = image; + int i, j; + for( i = width * height; i > 0; --i ) + { + /* float scale = powf( 2.0f, img[3] - 128.0f ) / 255.0f; */ + float scale = ldexp( 1.0f / 255.0f, (int)(img[3]) - 128 ); + for( j = 0; j < 3; ++j ) + { + if( img[j] * scale > max_val ) + { + max_val = img[j] * scale; + } + } + /* next pixel */ + img += 4; + } + return max_val; +} + +int +RGBE_to_RGBdivA +( + unsigned char *image, + int width, int height, + int rescale_to_max +) +{ + /* local variables */ + int i, iv; + unsigned char *img = image; + float scale = 1.0f; + /* error check */ + if( (!image) || (width < 1) || (height < 1) ) + { + return 0; + } + /* convert (note: no negative numbers, but 0.0 is possible) */ + if( rescale_to_max ) + { + scale = 255.0f / find_max_RGBE( image, width, height ); + } + for( i = width * height; i > 0; --i ) + { + /* decode this pixel, and find the max */ + float r,g,b,e, m; + /* e = scale * powf( 2.0f, img[3] - 128.0f ) / 255.0f; */ + e = scale * ldexp( 1.0f / 255.0f, (int)(img[3]) - 128 ); + r = e * img[0]; + g = e * img[1]; + b = e * img[2]; + m = (r > g) ? r : g; + m = (b > m) ? b : m; + /* and encode it into RGBdivA */ + iv = (m != 0.0f) ? (int)(255.0f / m) : 1.0f; + iv = (iv < 1) ? 1 : iv; + img[3] = (iv > 255) ? 255 : iv; + iv = (int)(img[3] * r + 0.5f); + img[0] = (iv > 255) ? 255 : iv; + iv = (int)(img[3] * g + 0.5f); + img[1] = (iv > 255) ? 255 : iv; + iv = (int)(img[3] * b + 0.5f); + img[2] = (iv > 255) ? 255 : iv; + /* and on to the next pixel */ + img += 4; + } + return 1; +} + +int +RGBE_to_RGBdivA2 +( + unsigned char *image, + int width, int height, + int rescale_to_max +) +{ + /* local variables */ + int i, iv; + unsigned char *img = image; + float scale = 1.0f; + /* error check */ + if( (!image) || (width < 1) || (height < 1) ) + { + return 0; + } + /* convert (note: no negative numbers, but 0.0 is possible) */ + if( rescale_to_max ) + { + scale = 255.0f * 255.0f / find_max_RGBE( image, width, height ); + } + for( i = width * height; i > 0; --i ) + { + /* decode this pixel, and find the max */ + float r,g,b,e, m; + /* e = scale * powf( 2.0f, img[3] - 128.0f ) / 255.0f; */ + e = scale * ldexp( 1.0f / 255.0f, (int)(img[3]) - 128 ); + r = e * img[0]; + g = e * img[1]; + b = e * img[2]; + m = (r > g) ? r : g; + m = (b > m) ? b : m; + /* and encode it into RGBdivA */ + iv = (m != 0.0f) ? (int)sqrtf( 255.0f * 255.0f / m ) : 1.0f; + iv = (iv < 1) ? 1 : iv; + img[3] = (iv > 255) ? 255 : iv; + iv = (int)(img[3] * img[3] * r / 255.0f + 0.5f); + img[0] = (iv > 255) ? 255 : iv; + iv = (int)(img[3] * img[3] * g / 255.0f + 0.5f); + img[1] = (iv > 255) ? 255 : iv; + iv = (int)(img[3] * img[3] * b / 255.0f + 0.5f); + img[2] = (iv > 255) ? 255 : iv; + /* and on to the next pixel */ + img += 4; + } + return 1; +} diff --git a/3rdparty/libprojectm/Renderer/SOIL/image_helper.h b/3rdparty/libprojectm/Renderer/SOIL/image_helper.h new file mode 100644 index 000000000..abb257c34 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/SOIL/image_helper.h @@ -0,0 +1,115 @@ +/* + Jonathan Dummer + + Image helper functions + + MIT license +*/ + +#ifndef HEADER_IMAGE_HELPER +#define HEADER_IMAGE_HELPER + +#ifdef __cplusplus +extern "C" { +#endif + +/** + This function upscales an image. + Not to be used to create MIPmaps, + but to make it square, + or to make it a power-of-two sized. +**/ +int + up_scale_image + ( + const unsigned char* const orig, + int width, int height, int channels, + unsigned char* resampled, + int resampled_width, int resampled_height + ); + +/** + This function downscales an image. + Used for creating MIPmaps, + the incoming image should be a + power-of-two sized. +**/ +int + mipmap_image + ( + const unsigned char* const orig, + int width, int height, int channels, + unsigned char* resampled, + int block_size_x, int block_size_y + ); + +/** + This function takes the RGB components of the image + and scales each channel from [0,255] to [16,235]. + This makes the colors "Safe" for display on NTSC + displays. Note that this is _NOT_ a good idea for + loading images like normal- or height-maps! +**/ +int + scale_image_RGB_to_NTSC_safe + ( + unsigned char* orig, + int width, int height, int channels + ); + +/** + This function takes the RGB components of the image + and converts them into YCoCg. 3 components will be + re-ordered to CoYCg (for optimum DXT1 compression), + while 4 components will be ordered CoCgAY (for DXT5 + compression). +**/ +int + convert_RGB_to_YCoCg + ( + unsigned char* orig, + int width, int height, int channels + ); + +/** + This function takes the YCoCg components of the image + and converts them into RGB. See above. +**/ +int + convert_YCoCg_to_RGB + ( + unsigned char* orig, + int width, int height, int channels + ); + +/** + Converts an HDR image from an array + of unsigned chars (RGBE) to RGBdivA + \return 0 if failed, otherwise returns 1 +**/ +int + RGBE_to_RGBdivA + ( + unsigned char *image, + int width, int height, + int rescale_to_max + ); + +/** + Converts an HDR image from an array + of unsigned chars (RGBE) to RGBdivA2 + \return 0 if failed, otherwise returns 1 +**/ +int + RGBE_to_RGBdivA2 + ( + unsigned char *image, + int width, int height, + int rescale_to_max + ); + +#ifdef __cplusplus +} +#endif + +#endif /* HEADER_IMAGE_HELPER */ diff --git a/3rdparty/libprojectm/Renderer/SOIL/stb_image_aug.c b/3rdparty/libprojectm/Renderer/SOIL/stb_image_aug.c new file mode 100644 index 000000000..2fa723384 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/SOIL/stb_image_aug.c @@ -0,0 +1,3682 @@ +/* stbi-1.16 - public domain JPEG/PNG reader - http://nothings.org/stb_image.c + when you control the images you're loading + + QUICK NOTES: + Primarily of interest to game developers and other people who can + avoid problematic images and only need the trivial interface + + JPEG baseline (no JPEG progressive, no oddball channel decimations) + PNG non-interlaced + BMP non-1bpp, non-RLE + TGA (not sure what subset, if a subset) + PSD (composited view only, no extra channels) + HDR (radiance rgbE format) + writes BMP,TGA (define STBI_NO_WRITE to remove code) + decoded from memory or through stdio FILE (define STBI_NO_STDIO to remove code) + supports installable dequantizing-IDCT, YCbCr-to-RGB conversion (define STBI_SIMD) + + TODO: + stbi_info_* + + history: + 1.16 major bugfix - convert_format converted one too many pixels + 1.15 initialize some fields for thread safety + 1.14 fix threadsafe conversion bug; header-file-only version (#define STBI_HEADER_FILE_ONLY before including) + 1.13 threadsafe + 1.12 const qualifiers in the API + 1.11 Support installable IDCT, colorspace conversion routines + 1.10 Fixes for 64-bit (don't use "unsigned long") + optimized upsampling by Fabian "ryg" Giesen + 1.09 Fix format-conversion for PSD code (bad global variables!) + 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz + 1.07 attempt to fix C++ warning/errors again + 1.06 attempt to fix C++ warning/errors again + 1.05 fix TGA loading to return correct *comp and use good luminance calc + 1.04 default float alpha is 1, not 255; use 'void *' for stbi_image_free + 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR + 1.02 support for (subset of) HDR files, float interface for preferred access to them + 1.01 fix bug: possible bug in handling right-side up bmps... not sure + fix bug: the stbi_bmp_load() and stbi_tga_load() functions didn't work at all + 1.00 interface to zlib that skips zlib header + 0.99 correct handling of alpha in palette + 0.98 TGA loader by lonesock; dynamically add loaders (untested) + 0.97 jpeg errors on too large a file; also catch another malloc failure + 0.96 fix detection of invalid v value - particleman@mollyrocket forum + 0.95 during header scan, seek to markers in case of padding + 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same + 0.93 handle jpegtran output; verbose errors + 0.92 read 4,8,16,24,32-bit BMP files of several formats + 0.91 output 24-bit Windows 3.0 BMP files + 0.90 fix a few more warnings; bump version number to approach 1.0 + 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd + 0.60 fix compiling as c++ + 0.59 fix warnings: merge Dave Moore's -Wall fixes + 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian + 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but less + than 16 available + 0.56 fix bug: zlib uncompressed mode len vs. nlen + 0.55 fix bug: restart_interval not initialized to 0 + 0.54 allow NULL for 'int *comp' + 0.53 fix bug in png 3->4; speedup png decoding + 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments + 0.51 obey req_comp requests, 1-component jpegs return as 1-component, + on 'test' only check type, not whether we support this variant +*/ + +#include "stb_image_aug.h" + +#ifndef STBI_NO_HDR +#include // ldexp +#include // strcmp +#endif + +#ifndef STBI_NO_STDIO +#include +#endif +#include +#include +#include +#include + +#ifndef _MSC_VER + #ifdef __cplusplus + #define __forceinline inline + #else + #define __forceinline + #endif +#endif + + +// implementation: +typedef unsigned char uint8; +typedef unsigned short uint16; +typedef signed short int16; +typedef unsigned int uint32; +typedef signed int int32; +typedef unsigned int uint; + +// should produce compiler error if size is wrong +typedef unsigned char validate_uint32[sizeof(uint32)==4]; + +#if defined(STBI_NO_STDIO) && !defined(STBI_NO_WRITE) +#define STBI_NO_WRITE +#endif + +#ifndef STBI_NO_DDS +#include "stbi_DDS_aug.h" +#endif + +// I (JLD) want full messages for SOIL +#define STBI_FAILURE_USERMSG 1 + +////////////////////////////////////////////////////////////////////////////// +// +// Generic API that works on all image types +// + +// this is not threadsafe +static char *failure_reason; + +char *stbi_failure_reason(void) +{ + return failure_reason; +} + +static int e(char *str) +{ + failure_reason = str; + return 0; +} + +#ifdef STBI_NO_FAILURE_STRINGS + #define e(x,y) 0 +#elif defined(STBI_FAILURE_USERMSG) + #define e(x,y) e(y) +#else + #define e(x,y) e(x) +#endif + +#define epf(x,y) ((float *) (e(x,y)?NULL:NULL)) +#define epuc(x,y) ((unsigned char *) (e(x,y)?NULL:NULL)) + +void stbi_image_free(void *retval_from_stbi_load) +{ + free(retval_from_stbi_load); +} + +#define MAX_LOADERS 32 +stbi_loader *loaders[MAX_LOADERS]; +static int max_loaders = 0; + +int stbi_register_loader(stbi_loader *loader) +{ + int i; + for (i=0; i < MAX_LOADERS; ++i) { + // already present? + if (loaders[i] == loader) + return 1; + // end of the list? + if (loaders[i] == NULL) { + loaders[i] = loader; + max_loaders = i+1; + return 1; + } + } + // no room for it + return 0; +} + +#ifndef STBI_NO_HDR +static float *ldr_to_hdr(stbi_uc *data, int x, int y, int comp); +static stbi_uc *hdr_to_ldr(float *data, int x, int y, int comp); +#endif + +#ifndef STBI_NO_STDIO +unsigned char *stbi_load(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + FILE *f = fopen(filename, "rb"); + unsigned char *result; + if (!f) return epuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file(f,x,y,comp,req_comp); + fclose(f); + return result; +} + +unsigned char *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + int i; + if (stbi_jpeg_test_file(f)) + return stbi_jpeg_load_from_file(f,x,y,comp,req_comp); + if (stbi_png_test_file(f)) + return stbi_png_load_from_file(f,x,y,comp,req_comp); + if (stbi_bmp_test_file(f)) + return stbi_bmp_load_from_file(f,x,y,comp,req_comp); + if (stbi_psd_test_file(f)) + return stbi_psd_load_from_file(f,x,y,comp,req_comp); + #ifndef STBI_NO_DDS + if (stbi_dds_test_file(f)) + return stbi_dds_load_from_file(f,x,y,comp,req_comp); + #endif + #ifndef STBI_NO_HDR + if (stbi_hdr_test_file(f)) { + float *hdr = stbi_hdr_load_from_file(f, x,y,comp,req_comp); + return hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp); + } + #endif + for (i=0; i < max_loaders; ++i) + if (loaders[i]->test_file(f)) + return loaders[i]->load_from_file(f,x,y,comp,req_comp); + // test tga last because it's a crappy test! + if (stbi_tga_test_file(f)) + return stbi_tga_load_from_file(f,x,y,comp,req_comp); + return epuc("unknown image type", "Image not of any known type, or corrupt"); +} +#endif + +unsigned char *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + int i; + if (stbi_jpeg_test_memory(buffer,len)) + return stbi_jpeg_load_from_memory(buffer,len,x,y,comp,req_comp); + if (stbi_png_test_memory(buffer,len)) + return stbi_png_load_from_memory(buffer,len,x,y,comp,req_comp); + if (stbi_bmp_test_memory(buffer,len)) + return stbi_bmp_load_from_memory(buffer,len,x,y,comp,req_comp); + if (stbi_psd_test_memory(buffer,len)) + return stbi_psd_load_from_memory(buffer,len,x,y,comp,req_comp); + #ifndef STBI_NO_DDS + if (stbi_dds_test_memory(buffer,len)) + return stbi_dds_load_from_memory(buffer,len,x,y,comp,req_comp); + #endif + #ifndef STBI_NO_HDR + if (stbi_hdr_test_memory(buffer, len)) { + float *hdr = stbi_hdr_load_from_memory(buffer, len,x,y,comp,req_comp); + return hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp); + } + #endif + for (i=0; i < max_loaders; ++i) + if (loaders[i]->test_memory(buffer,len)) + return loaders[i]->load_from_memory(buffer,len,x,y,comp,req_comp); + // test tga last because it's a crappy test! + if (stbi_tga_test_memory(buffer,len)) + return stbi_tga_load_from_memory(buffer,len,x,y,comp,req_comp); + return epuc("unknown image type", "Image not of any known type, or corrupt"); +} + +#ifndef STBI_NO_HDR + +#ifndef STBI_NO_STDIO +float *stbi_loadf(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + FILE *f = fopen(filename, "rb"); + float *result; + if (!f) return epf("can't fopen", "Unable to open file"); + result = stbi_loadf_from_file(f,x,y,comp,req_comp); + fclose(f); + return result; +} + +float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *data; + #ifndef STBI_NO_HDR + if (stbi_hdr_test_file(f)) + return stbi_hdr_load_from_file(f,x,y,comp,req_comp); + #endif + data = stbi_load_from_file(f, x, y, comp, req_comp); + if (data) + return ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp); + return epf("unknown image type", "Image not of any known type, or corrupt"); +} +#endif + +float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi_uc *data; + #ifndef STBI_NO_HDR + if (stbi_hdr_test_memory(buffer, len)) + return stbi_hdr_load_from_memory(buffer, len,x,y,comp,req_comp); + #endif + data = stbi_load_from_memory(buffer, len, x, y, comp, req_comp); + if (data) + return ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp); + return epf("unknown image type", "Image not of any known type, or corrupt"); +} +#endif + +// these is-hdr-or-not is defined independent of whether STBI_NO_HDR is +// defined, for API simplicity; if STBI_NO_HDR is defined, it always +// reports false! + +int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len) +{ + #ifndef STBI_NO_HDR + return stbi_hdr_test_memory(buffer, len); + #else + return 0; + #endif +} + +#ifndef STBI_NO_STDIO +extern int stbi_is_hdr (char const *filename) +{ + FILE *f = fopen(filename, "rb"); + int result=0; + if (f) { + result = stbi_is_hdr_from_file(f); + fclose(f); + } + return result; +} + +extern int stbi_is_hdr_from_file(FILE *f) +{ + #ifndef STBI_NO_HDR + return stbi_hdr_test_file(f); + #else + return 0; + #endif +} + +#endif + +// @TODO: get image dimensions & components without fully decoding +#ifndef STBI_NO_STDIO +extern int stbi_info (char const *filename, int *x, int *y, int *comp); +extern int stbi_info_from_file (FILE *f, int *x, int *y, int *comp); +#endif +extern int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); + +#ifndef STBI_NO_HDR +static float h2l_gamma_i=1.0f/2.2f, h2l_scale_i=1.0f; +static float l2h_gamma=2.2f, l2h_scale=1.0f; + +void stbi_hdr_to_ldr_gamma(float gamma) { h2l_gamma_i = 1/gamma; } +void stbi_hdr_to_ldr_scale(float scale) { h2l_scale_i = 1/scale; } + +void stbi_ldr_to_hdr_gamma(float gamma) { l2h_gamma = gamma; } +void stbi_ldr_to_hdr_scale(float scale) { l2h_scale = scale; } +#endif + + +////////////////////////////////////////////////////////////////////////////// +// +// Common code used by all image loaders +// + +enum +{ + SCAN_load=0, + SCAN_type, + SCAN_header, +}; + +typedef struct +{ + uint32 img_x, img_y; + int img_n, img_out_n; + + #ifndef STBI_NO_STDIO + FILE *img_file; + #endif + uint8 *img_buffer, *img_buffer_end; +} stbi; + +#ifndef STBI_NO_STDIO +static void start_file(stbi *s, FILE *f) +{ + s->img_file = f; +} +#endif + +static void start_mem(stbi *s, uint8 const *buffer, int len) +{ +#ifndef STBI_NO_STDIO + s->img_file = NULL; +#endif + s->img_buffer = (uint8 *) buffer; + s->img_buffer_end = (uint8 *) buffer+len; +} + +__forceinline static int get8(stbi *s) +{ +#ifndef STBI_NO_STDIO + if (s->img_file) { + int c = fgetc(s->img_file); + return c == EOF ? 0 : c; + } +#endif + if (s->img_buffer < s->img_buffer_end) + return *s->img_buffer++; + return 0; +} + +__forceinline static int at_eof(stbi *s) +{ +#ifndef STBI_NO_STDIO + if (s->img_file) + return feof(s->img_file); +#endif + return s->img_buffer >= s->img_buffer_end; +} + +__forceinline static uint8 get8u(stbi *s) +{ + return (uint8) get8(s); +} + +static void skip(stbi *s, int n) +{ +#ifndef STBI_NO_STDIO + if (s->img_file) + fseek(s->img_file, n, SEEK_CUR); + else +#endif + s->img_buffer += n; +} + +static int get16(stbi *s) +{ + int z = get8(s); + return (z << 8) + get8(s); +} + +static uint32 get32(stbi *s) +{ + uint32 z = get16(s); + return (z << 16) + get16(s); +} + +static int get16le(stbi *s) +{ + int z = get8(s); + return z + (get8(s) << 8); +} + +static uint32 get32le(stbi *s) +{ + uint32 z = get16le(s); + return z + (get16le(s) << 16); +} + +static void getn(stbi *s, stbi_uc *buffer, int n) +{ +#ifndef STBI_NO_STDIO + if (s->img_file) { + fread(buffer, 1, n, s->img_file); + return; + } +#endif + memcpy(buffer, s->img_buffer, n); + s->img_buffer += n; +} + +////////////////////////////////////////////////////////////////////////////// +// +// generic converter from built-in img_n to req_comp +// individual types do this automatically as much as possible (e.g. jpeg +// does all cases internally since it needs to colorspace convert anyway, +// and it never has alpha, so very few cases ). png can automatically +// interleave an alpha=255 channel, but falls back to this for other cases +// +// assume data buffer is malloced, so malloc a new one and free that one +// only failure mode is malloc failing + +static uint8 compute_y(int r, int g, int b) +{ + return (uint8) (((r*77) + (g*150) + (29*b)) >> 8); +} + +static unsigned char *convert_format(unsigned char *data, int img_n, int req_comp, uint x, uint y) +{ + int i,j; + unsigned char *good; + + if (req_comp == img_n) return data; + assert(req_comp >= 1 && req_comp <= 4); + + good = (unsigned char *) malloc(req_comp * x * y); + if (good == NULL) { + free(data); + return epuc("outofmem", "Out of memory"); + } + + for (j=0; j < (int) y; ++j) { + unsigned char *src = data + j * x * img_n ; + unsigned char *dest = good + j * x * req_comp; + + #define COMBO(a,b) ((a)*8+(b)) + #define CASE(a,b) case COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp components; + // avoid switch per pixel, so use switch per scanline and massive macros + switch(COMBO(img_n, req_comp)) { + CASE(1,2) dest[0]=src[0], dest[1]=255; break; + CASE(1,3) dest[0]=dest[1]=dest[2]=src[0]; break; + CASE(1,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=255; break; + CASE(2,1) dest[0]=src[0]; break; + CASE(2,3) dest[0]=dest[1]=dest[2]=src[0]; break; + CASE(2,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=src[1]; break; + CASE(3,4) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2],dest[3]=255; break; + CASE(3,1) dest[0]=compute_y(src[0],src[1],src[2]); break; + CASE(3,2) dest[0]=compute_y(src[0],src[1],src[2]), dest[1] = 255; break; + CASE(4,1) dest[0]=compute_y(src[0],src[1],src[2]); break; + CASE(4,2) dest[0]=compute_y(src[0],src[1],src[2]), dest[1] = src[3]; break; + CASE(4,3) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2]; break; + default: assert(0); + } + #undef CASE + } + + free(data); + return good; +} + +#ifndef STBI_NO_HDR +static float *ldr_to_hdr(stbi_uc *data, int x, int y, int comp) +{ + int i,k,n; + float *output = (float *) malloc(x * y * comp * sizeof(float)); + if (output == NULL) { free(data); return epf("outofmem", "Out of memory"); } + // compute number of non-alpha components + if (comp & 1) n = comp; else n = comp-1; + for (i=0; i < x*y; ++i) { + for (k=0; k < n; ++k) { + output[i*comp + k] = (float) pow(data[i*comp+k]/255.0f, l2h_gamma) * l2h_scale; + } + if (k < comp) output[i*comp + k] = data[i*comp+k]/255.0f; + } + free(data); + return output; +} + +#define float2int(x) ((int) (x)) +static stbi_uc *hdr_to_ldr(float *data, int x, int y, int comp) +{ + int i,k,n; + stbi_uc *output = (stbi_uc *) malloc(x * y * comp); + if (output == NULL) { free(data); return epuc("outofmem", "Out of memory"); } + // compute number of non-alpha components + if (comp & 1) n = comp; else n = comp-1; + for (i=0; i < x*y; ++i) { + for (k=0; k < n; ++k) { + float z = (float) pow(data[i*comp+k]*h2l_scale_i, h2l_gamma_i) * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i*comp + k] = float2int(z); + } + if (k < comp) { + float z = data[i*comp+k] * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i*comp + k] = float2int(z); + } + } + free(data); + return output; +} +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// "baseline" JPEG/JFIF decoder (not actually fully baseline implementation) +// +// simple implementation +// - channel subsampling of at most 2 in each dimension +// - doesn't support delayed output of y-dimension +// - simple interface (only one output format: 8-bit interleaved RGB) +// - doesn't try to recover corrupt jpegs +// - doesn't allow partial loading, loading multiple at once +// - still fast on x86 (copying globals into locals doesn't help x86) +// - allocates lots of intermediate memory (full size of all components) +// - non-interleaved case requires this anyway +// - allows good upsampling (see next) +// high-quality +// - upsampled channels are bilinearly interpolated, even across blocks +// - quality integer IDCT derived from IJG's 'slow' +// performance +// - fast huffman; reasonable integer IDCT +// - uses a lot of intermediate memory, could cache poorly +// - load http://nothings.org/remote/anemones.jpg 3 times on 2.8Ghz P4 +// stb_jpeg: 1.34 seconds (MSVC6, default release build) +// stb_jpeg: 1.06 seconds (MSVC6, processor = Pentium Pro) +// IJL11.dll: 1.08 seconds (compiled by intel) +// IJG 1998: 0.98 seconds (MSVC6, makefile provided by IJG) +// IJG 1998: 0.95 seconds (MSVC6, makefile + proc=PPro) + +// huffman decoding acceleration +#define FAST_BITS 9 // larger handles more cases; smaller stomps less cache + +typedef struct +{ + uint8 fast[1 << FAST_BITS]; + // weirdly, repacking this into AoS is a 10% speed loss, instead of a win + uint16 code[256]; + uint8 values[256]; + uint8 size[257]; + unsigned int maxcode[18]; + int delta[17]; // old 'firstsymbol' - old 'firstcode' +} huffman; + +typedef struct +{ + #if STBI_SIMD + unsigned short dequant2[4][64]; + #endif + stbi s; + huffman huff_dc[4]; + huffman huff_ac[4]; + uint8 dequant[4][64]; + +// sizes for components, interleaved MCUs + int img_h_max, img_v_max; + int img_mcu_x, img_mcu_y; + int img_mcu_w, img_mcu_h; + +// definition of jpeg image component + struct + { + int id; + int h,v; + int tq; + int hd,ha; + int dc_pred; + + int x,y,w2,h2; + uint8 *data; + void *raw_data; + uint8 *linebuf; + } img_comp[4]; + + uint32 code_buffer; // jpeg entropy-coded buffer + int code_bits; // number of valid bits + unsigned char marker; // marker seen while filling entropy buffer + int nomore; // flag if we saw a marker so must stop + + int scan_n, order[4]; + int restart_interval, todo; +} jpeg; + +static int build_huffman(huffman *h, int *count) +{ + int i,j,k=0,code; + // build size list for each symbol (from JPEG spec) + for (i=0; i < 16; ++i) + for (j=0; j < count[i]; ++j) + h->size[k++] = (uint8) (i+1); + h->size[k] = 0; + + // compute actual symbols (from jpeg spec) + code = 0; + k = 0; + for(j=1; j <= 16; ++j) { + // compute delta to add to code to compute symbol id + h->delta[j] = k - code; + if (h->size[k] == j) { + while (h->size[k] == j) + h->code[k++] = (uint16) (code++); + if (code-1 >= (1 << j)) return e("bad code lengths","Corrupt JPEG"); + } + // compute largest code + 1 for this size, preshifted as needed later + h->maxcode[j] = code << (16-j); + code <<= 1; + } + h->maxcode[j] = 0xffffffff; + + // build non-spec acceleration table; 255 is flag for not-accelerated + memset(h->fast, 255, 1 << FAST_BITS); + for (i=0; i < k; ++i) { + int s = h->size[i]; + if (s <= FAST_BITS) { + int c = h->code[i] << (FAST_BITS-s); + int m = 1 << (FAST_BITS-s); + for (j=0; j < m; ++j) { + h->fast[c+j] = (uint8) i; + } + } + } + return 1; +} + +static void grow_buffer_unsafe(jpeg *j) +{ + do { + int b = j->nomore ? 0 : get8(&j->s); + if (b == 0xff) { + int c = get8(&j->s); + if (c != 0) { + j->marker = (unsigned char) c; + j->nomore = 1; + return; + } + } + j->code_buffer = (j->code_buffer << 8) | b; + j->code_bits += 8; + } while (j->code_bits <= 24); +} + +// (1 << n) - 1 +static uint32 bmask[17]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535}; + +// decode a jpeg huffman value from the bitstream +__forceinline static int decode(jpeg *j, huffman *h) +{ + unsigned int temp; + int c,k; + + if (j->code_bits < 16) grow_buffer_unsafe(j); + + // look at the top FAST_BITS and determine what symbol ID it is, + // if the code is <= FAST_BITS + c = (j->code_buffer >> (j->code_bits - FAST_BITS)) & ((1 << FAST_BITS)-1); + k = h->fast[c]; + if (k < 255) { + if (h->size[k] > j->code_bits) + return -1; + j->code_bits -= h->size[k]; + return h->values[k]; + } + + // naive test is to shift the code_buffer down so k bits are + // valid, then test against maxcode. To speed this up, we've + // preshifted maxcode left so that it has (16-k) 0s at the + // end; in other words, regardless of the number of bits, it + // wants to be compared against something shifted to have 16; + // that way we don't need to shift inside the loop. + if (j->code_bits < 16) + temp = (j->code_buffer << (16 - j->code_bits)) & 0xffff; + else + temp = (j->code_buffer >> (j->code_bits - 16)) & 0xffff; + for (k=FAST_BITS+1 ; ; ++k) + if (temp < h->maxcode[k]) + break; + if (k == 17) { + // error! code not found + j->code_bits -= 16; + return -1; + } + + if (k > j->code_bits) + return -1; + + // convert the huffman code to the symbol id + c = ((j->code_buffer >> (j->code_bits - k)) & bmask[k]) + h->delta[k]; + assert((((j->code_buffer) >> (j->code_bits - h->size[c])) & bmask[h->size[c]]) == h->code[c]); + + // convert the id to a symbol + j->code_bits -= k; + return h->values[c]; +} + +// combined JPEG 'receive' and JPEG 'extend', since baseline +// always extends everything it receives. +__forceinline static int extend_receive(jpeg *j, int n) +{ + unsigned int m = 1 << (n-1); + unsigned int k; + if (j->code_bits < n) grow_buffer_unsafe(j); + k = (j->code_buffer >> (j->code_bits - n)) & bmask[n]; + j->code_bits -= n; + // the following test is probably a random branch that won't + // predict well. I tried to table accelerate it but failed. + // maybe it's compiling as a conditional move? + if (k < m) + return (-1 << n) + k + 1; + else + return k; +} + +// given a value that's at position X in the zigzag stream, +// where does it appear in the 8x8 matrix coded as row-major? +static uint8 dezigzag[64+15] = +{ + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63, + // let corrupt input sample past end + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63 +}; + +// decode one 64-entry block-- +static int decode_block(jpeg *j, short data[64], huffman *hdc, huffman *hac, int b) +{ + int diff,dc,k; + int t = decode(j, hdc); + if (t < 0) return e("bad huffman code","Corrupt JPEG"); + + // 0 all the ac values now so we can do it 32-bits at a time + memset(data,0,64*sizeof(data[0])); + + diff = t ? extend_receive(j, t) : 0; + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + data[0] = (short) dc; + + // decode AC components, see JPEG spec + k = 1; + do { + int r,s; + int rs = decode(j, hac); + if (rs < 0) return e("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (rs != 0xf0) break; // end block + k += 16; + } else { + k += r; + // decode into unzigzag'd location + data[dezigzag[k++]] = (short) extend_receive(j,s); + } + } while (k < 64); + return 1; +} + +// take a -128..127 value and clamp it and convert to 0..255 +__forceinline static uint8 clamp(int x) +{ + x += 128; + // trick to use a single test to catch both cases + if ((unsigned int) x > 255) { + if (x < 0) return 0; + if (x > 255) return 255; + } + return (uint8) x; +} + +#define f2f(x) (int) (((x) * 4096 + 0.5)) +#define fsh(x) ((x) << 12) + +// derived from jidctint -- DCT_ISLOW +#define IDCT_1D(s0,s1,s2,s3,s4,s5,s6,s7) \ + int t0,t1,t2,t3,p1,p2,p3,p4,p5,x0,x1,x2,x3; \ + p2 = s2; \ + p3 = s6; \ + p1 = (p2+p3) * f2f(0.5411961f); \ + t2 = p1 + p3*f2f(-1.847759065f); \ + t3 = p1 + p2*f2f( 0.765366865f); \ + p2 = s0; \ + p3 = s4; \ + t0 = fsh(p2+p3); \ + t1 = fsh(p2-p3); \ + x0 = t0+t3; \ + x3 = t0-t3; \ + x1 = t1+t2; \ + x2 = t1-t2; \ + t0 = s7; \ + t1 = s5; \ + t2 = s3; \ + t3 = s1; \ + p3 = t0+t2; \ + p4 = t1+t3; \ + p1 = t0+t3; \ + p2 = t1+t2; \ + p5 = (p3+p4)*f2f( 1.175875602f); \ + t0 = t0*f2f( 0.298631336f); \ + t1 = t1*f2f( 2.053119869f); \ + t2 = t2*f2f( 3.072711026f); \ + t3 = t3*f2f( 1.501321110f); \ + p1 = p5 + p1*f2f(-0.899976223f); \ + p2 = p5 + p2*f2f(-2.562915447f); \ + p3 = p3*f2f(-1.961570560f); \ + p4 = p4*f2f(-0.390180644f); \ + t3 += p1+p4; \ + t2 += p2+p3; \ + t1 += p2+p4; \ + t0 += p1+p3; + +#if !STBI_SIMD +// .344 seconds on 3*anemones.jpg +static void idct_block(uint8 *out, int out_stride, short data[64], uint8 *dequantize) +{ + int i,val[64],*v=val; + uint8 *o,*dq = dequantize; + short *d = data; + + // columns + for (i=0; i < 8; ++i,++d,++dq, ++v) { + // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing + if (d[ 8]==0 && d[16]==0 && d[24]==0 && d[32]==0 + && d[40]==0 && d[48]==0 && d[56]==0) { + // no shortcut 0 seconds + // (1|2|3|4|5|6|7)==0 0 seconds + // all separate -0.047 seconds + // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds + int dcterm = d[0] * dq[0] << 2; + v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm; + } else { + IDCT_1D(d[ 0]*dq[ 0],d[ 8]*dq[ 8],d[16]*dq[16],d[24]*dq[24], + d[32]*dq[32],d[40]*dq[40],d[48]*dq[48],d[56]*dq[56]) + // constants scaled things up by 1<<12; let's bring them back + // down, but keep 2 extra bits of precision + x0 += 512; x1 += 512; x2 += 512; x3 += 512; + v[ 0] = (x0+t3) >> 10; + v[56] = (x0-t3) >> 10; + v[ 8] = (x1+t2) >> 10; + v[48] = (x1-t2) >> 10; + v[16] = (x2+t1) >> 10; + v[40] = (x2-t1) >> 10; + v[24] = (x3+t0) >> 10; + v[32] = (x3-t0) >> 10; + } + } + + for (i=0, v=val, o=out; i < 8; ++i,v+=8,o+=out_stride) { + // no fast case since the first 1D IDCT spread components out + IDCT_1D(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7]) + // constants scaled things up by 1<<12, plus we had 1<<2 from first + // loop, plus horizontal and vertical each scale by sqrt(8) so together + // we've got an extra 1<<3, so 1<<17 total we need to remove. + x0 += 65536; x1 += 65536; x2 += 65536; x3 += 65536; + o[0] = clamp((x0+t3) >> 17); + o[7] = clamp((x0-t3) >> 17); + o[1] = clamp((x1+t2) >> 17); + o[6] = clamp((x1-t2) >> 17); + o[2] = clamp((x2+t1) >> 17); + o[5] = clamp((x2-t1) >> 17); + o[3] = clamp((x3+t0) >> 17); + o[4] = clamp((x3-t0) >> 17); + } +} +#else +static void idct_block(uint8 *out, int out_stride, short data[64], unsigned short *dequantize) +{ + int i,val[64],*v=val; + uint8 *o; + unsigned short *dq = dequantize; + short *d = data; + + // columns + for (i=0; i < 8; ++i,++d,++dq, ++v) { + // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing + if (d[ 8]==0 && d[16]==0 && d[24]==0 && d[32]==0 + && d[40]==0 && d[48]==0 && d[56]==0) { + // no shortcut 0 seconds + // (1|2|3|4|5|6|7)==0 0 seconds + // all separate -0.047 seconds + // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds + int dcterm = d[0] * dq[0] << 2; + v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm; + } else { + IDCT_1D(d[ 0]*dq[ 0],d[ 8]*dq[ 8],d[16]*dq[16],d[24]*dq[24], + d[32]*dq[32],d[40]*dq[40],d[48]*dq[48],d[56]*dq[56]) + // constants scaled things up by 1<<12; let's bring them back + // down, but keep 2 extra bits of precision + x0 += 512; x1 += 512; x2 += 512; x3 += 512; + v[ 0] = (x0+t3) >> 10; + v[56] = (x0-t3) >> 10; + v[ 8] = (x1+t2) >> 10; + v[48] = (x1-t2) >> 10; + v[16] = (x2+t1) >> 10; + v[40] = (x2-t1) >> 10; + v[24] = (x3+t0) >> 10; + v[32] = (x3-t0) >> 10; + } + } + + for (i=0, v=val, o=out; i < 8; ++i,v+=8,o+=out_stride) { + // no fast case since the first 1D IDCT spread components out + IDCT_1D(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7]) + // constants scaled things up by 1<<12, plus we had 1<<2 from first + // loop, plus horizontal and vertical each scale by sqrt(8) so together + // we've got an extra 1<<3, so 1<<17 total we need to remove. + x0 += 65536; x1 += 65536; x2 += 65536; x3 += 65536; + o[0] = clamp((x0+t3) >> 17); + o[7] = clamp((x0-t3) >> 17); + o[1] = clamp((x1+t2) >> 17); + o[6] = clamp((x1-t2) >> 17); + o[2] = clamp((x2+t1) >> 17); + o[5] = clamp((x2-t1) >> 17); + o[3] = clamp((x3+t0) >> 17); + o[4] = clamp((x3-t0) >> 17); + } +} +static stbi_idct_8x8 stbi_idct_installed = idct_block; + +extern void stbi_install_idct(stbi_idct_8x8 func) +{ + stbi_idct_installed = func; +} +#endif + +#define MARKER_none 0xff +// if there's a pending marker from the entropy stream, return that +// otherwise, fetch from the stream and get a marker. if there's no +// marker, return 0xff, which is never a valid marker value +static uint8 get_marker(jpeg *j) +{ + uint8 x; + if (j->marker != MARKER_none) { x = j->marker; j->marker = MARKER_none; return x; } + x = get8u(&j->s); + if (x != 0xff) return MARKER_none; + while (x == 0xff) + x = get8u(&j->s); + return x; +} + +// in each scan, we'll have scan_n components, and the order +// of the components is specified by order[] +#define RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7) + +// after a restart interval, reset the entropy decoder and +// the dc prediction +static void reset(jpeg *j) +{ + j->code_bits = 0; + j->code_buffer = 0; + j->nomore = 0; + j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = 0; + j->marker = MARKER_none; + j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff; + // no more than 1<<31 MCUs if no restart_interal? that's plenty safe, + // since we don't even allow 1<<30 pixels +} + +static int parse_entropy_coded_data(jpeg *z) +{ + reset(z); + if (z->scan_n == 1) { + int i,j; + #if STBI_SIMD + __declspec(align(16)) + #endif + short data[64]; + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + if (!decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+z->img_comp[n].ha, n)) return 0; + #if STBI_SIMD + stbi_idct_installed(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data, z->dequant2[z->img_comp[n].tq]); + #else + idct_block(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data, z->dequant[z->img_comp[n].tq]); + #endif + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) grow_buffer_unsafe(z); + // if it's NOT a restart, then just bail, so we get corrupt data + // rather than no data + if (!RESTART(z->marker)) return 1; + reset(z); + } + } + } + } else { // interleaved! + int i,j,k,x,y; + short data[64]; + for (j=0; j < z->img_mcu_y; ++j) { + for (i=0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k=0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y=0; y < z->img_comp[n].v; ++y) { + for (x=0; x < z->img_comp[n].h; ++x) { + int x2 = (i*z->img_comp[n].h + x)*8; + int y2 = (j*z->img_comp[n].v + y)*8; + if (!decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+z->img_comp[n].ha, n)) return 0; + #if STBI_SIMD + stbi_idct_installed(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data, z->dequant2[z->img_comp[n].tq]); + #else + idct_block(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data, z->dequant[z->img_comp[n].tq]); + #endif + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) grow_buffer_unsafe(z); + // if it's NOT a restart, then just bail, so we get corrupt data + // rather than no data + if (!RESTART(z->marker)) return 1; + reset(z); + } + } + } + } + return 1; +} + +static int process_marker(jpeg *z, int m) +{ + int L; + switch (m) { + case MARKER_none: // no marker found + return e("expected marker","Corrupt JPEG"); + + case 0xC2: // SOF - progressive + return e("progressive jpeg","JPEG format not supported (progressive)"); + + case 0xDD: // DRI - specify restart interval + if (get16(&z->s) != 4) return e("bad DRI len","Corrupt JPEG"); + z->restart_interval = get16(&z->s); + return 1; + + case 0xDB: // DQT - define quantization table + L = get16(&z->s)-2; + while (L > 0) { + int q = get8(&z->s); + int p = q >> 4; + int t = q & 15,i; + if (p != 0) return e("bad DQT type","Corrupt JPEG"); + if (t > 3) return e("bad DQT table","Corrupt JPEG"); + for (i=0; i < 64; ++i) + z->dequant[t][dezigzag[i]] = get8u(&z->s); + #if STBI_SIMD + for (i=0; i < 64; ++i) + z->dequant2[t][i] = dequant[t][i]; + #endif + L -= 65; + } + return L==0; + + case 0xC4: // DHT - define huffman table + L = get16(&z->s)-2; + while (L > 0) { + uint8 *v; + int sizes[16],i,m=0; + int q = get8(&z->s); + int tc = q >> 4; + int th = q & 15; + if (tc > 1 || th > 3) return e("bad DHT header","Corrupt JPEG"); + for (i=0; i < 16; ++i) { + sizes[i] = get8(&z->s); + m += sizes[i]; + } + L -= 17; + if (tc == 0) { + if (!build_huffman(z->huff_dc+th, sizes)) return 0; + v = z->huff_dc[th].values; + } else { + if (!build_huffman(z->huff_ac+th, sizes)) return 0; + v = z->huff_ac[th].values; + } + for (i=0; i < m; ++i) + v[i] = get8u(&z->s); + L -= m; + } + return L==0; + } + // check for comment block or APP blocks + if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) { + skip(&z->s, get16(&z->s)-2); + return 1; + } + return 0; +} + +// after we see SOS +static int process_scan_header(jpeg *z) +{ + int i; + int Ls = get16(&z->s); + z->scan_n = get8(&z->s); + if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int) z->s.img_n) return e("bad SOS component count","Corrupt JPEG"); + if (Ls != 6+2*z->scan_n) return e("bad SOS len","Corrupt JPEG"); + for (i=0; i < z->scan_n; ++i) { + int id = get8(&z->s), which; + int q = get8(&z->s); + for (which = 0; which < z->s.img_n; ++which) + if (z->img_comp[which].id == id) + break; + if (which == z->s.img_n) return 0; + z->img_comp[which].hd = q >> 4; if (z->img_comp[which].hd > 3) return e("bad DC huff","Corrupt JPEG"); + z->img_comp[which].ha = q & 15; if (z->img_comp[which].ha > 3) return e("bad AC huff","Corrupt JPEG"); + z->order[i] = which; + } + if (get8(&z->s) != 0) return e("bad SOS","Corrupt JPEG"); + get8(&z->s); // should be 63, but might be 0 + if (get8(&z->s) != 0) return e("bad SOS","Corrupt JPEG"); + + return 1; +} + +static int process_frame_header(jpeg *z, int scan) +{ + stbi *s = &z->s; + int Lf,p,i,q, h_max=1,v_max=1,c; + Lf = get16(s); if (Lf < 11) return e("bad SOF len","Corrupt JPEG"); // JPEG + p = get8(s); if (p != 8) return e("only 8-bit","JPEG format not supported: 8-bit only"); // JPEG baseline + s->img_y = get16(s); if (s->img_y == 0) return e("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG + s->img_x = get16(s); if (s->img_x == 0) return e("0 width","Corrupt JPEG"); // JPEG requires + c = get8(s); + if (c != 3 && c != 1) return e("bad component count","Corrupt JPEG"); // JFIF requires + s->img_n = c; + for (i=0; i < c; ++i) { + z->img_comp[i].data = NULL; + z->img_comp[i].linebuf = NULL; + } + + if (Lf != 8+3*s->img_n) return e("bad SOF len","Corrupt JPEG"); + + for (i=0; i < s->img_n; ++i) { + z->img_comp[i].id = get8(s); + if (z->img_comp[i].id != i+1) // JFIF requires + if (z->img_comp[i].id != i) // some version of jpegtran outputs non-JFIF-compliant files! + return e("bad component ID","Corrupt JPEG"); + q = get8(s); + z->img_comp[i].h = (q >> 4); if (!z->img_comp[i].h || z->img_comp[i].h > 4) return e("bad H","Corrupt JPEG"); + z->img_comp[i].v = q & 15; if (!z->img_comp[i].v || z->img_comp[i].v > 4) return e("bad V","Corrupt JPEG"); + z->img_comp[i].tq = get8(s); if (z->img_comp[i].tq > 3) return e("bad TQ","Corrupt JPEG"); + } + + if (scan != SCAN_load) return 1; + + if ((1 << 30) / s->img_x / s->img_n < s->img_y) return e("too large", "Image too large to decode"); + + for (i=0; i < s->img_n; ++i) { + if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h; + if (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v; + } + + // compute interleaved mcu info + z->img_h_max = h_max; + z->img_v_max = v_max; + z->img_mcu_w = h_max * 8; + z->img_mcu_h = v_max * 8; + z->img_mcu_x = (s->img_x + z->img_mcu_w-1) / z->img_mcu_w; + z->img_mcu_y = (s->img_y + z->img_mcu_h-1) / z->img_mcu_h; + + for (i=0; i < s->img_n; ++i) { + // number of effective pixels (e.g. for non-interleaved MCU) + z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max-1) / h_max; + z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max-1) / v_max; + // to simplify generation, we'll allocate enough memory to decode + // the bogus oversized data from using interleaved MCUs and their + // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't + // discard the extra data until colorspace conversion + z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8; + z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8; + z->img_comp[i].raw_data = malloc(z->img_comp[i].w2 * z->img_comp[i].h2+15); + if (z->img_comp[i].raw_data == NULL) { + for(--i; i >= 0; --i) { + free(z->img_comp[i].raw_data); + z->img_comp[i].data = NULL; + } + return e("outofmem", "Out of memory"); + } + // align blocks for installable-idct using mmx/sse + z->img_comp[i].data = (uint8*) (((size_t) z->img_comp[i].raw_data + 15) & ~15); + z->img_comp[i].linebuf = NULL; + } + + return 1; +} + +// use comparisons since in some cases we handle more than one case (e.g. SOF) +#define DNL(x) ((x) == 0xdc) +#define SOI(x) ((x) == 0xd8) +#define EOI(x) ((x) == 0xd9) +#define SOF(x) ((x) == 0xc0 || (x) == 0xc1) +#define SOS(x) ((x) == 0xda) + +static int decode_jpeg_header(jpeg *z, int scan) +{ + int m; + z->marker = MARKER_none; // initialize cached marker to empty + m = get_marker(z); + if (!SOI(m)) return e("no SOI","Corrupt JPEG"); + if (scan == SCAN_type) return 1; + m = get_marker(z); + while (!SOF(m)) { + if (!process_marker(z,m)) return 0; + m = get_marker(z); + while (m == MARKER_none) { + // some files have extra padding after their blocks, so ok, we'll scan + if (at_eof(&z->s)) return e("no SOF", "Corrupt JPEG"); + m = get_marker(z); + } + } + if (!process_frame_header(z, scan)) return 0; + return 1; +} + +static int decode_jpeg_image(jpeg *j) +{ + int m; + j->restart_interval = 0; + if (!decode_jpeg_header(j, SCAN_load)) return 0; + m = get_marker(j); + while (!EOI(m)) { + if (SOS(m)) { + if (!process_scan_header(j)) return 0; + if (!parse_entropy_coded_data(j)) return 0; + } else { + if (!process_marker(j, m)) return 0; + } + m = get_marker(j); + } + return 1; +} + +// static jfif-centered resampling (across block boundaries) + +typedef uint8 *(*resample_row_func)(uint8 *out, uint8 *in0, uint8 *in1, + int w, int hs); + +#define div4(x) ((uint8) ((x) >> 2)) + +static uint8 *resample_row_1(uint8 *out, uint8 *in_near, uint8 *in_far, int w, int hs) +{ + return in_near; +} + +static uint8* resample_row_v_2(uint8 *out, uint8 *in_near, uint8 *in_far, int w, int hs) +{ + // need to generate two samples vertically for every one in input + int i; + for (i=0; i < w; ++i) + out[i] = div4(3*in_near[i] + in_far[i] + 2); + return out; +} + +static uint8* resample_row_h_2(uint8 *out, uint8 *in_near, uint8 *in_far, int w, int hs) +{ + // need to generate two samples horizontally for every one in input + int i; + uint8 *input = in_near; + if (w == 1) { + // if only one sample, can't do any interpolation + out[0] = out[1] = input[0]; + return out; + } + + out[0] = input[0]; + out[1] = div4(input[0]*3 + input[1] + 2); + for (i=1; i < w-1; ++i) { + int n = 3*input[i]+2; + out[i*2+0] = div4(n+input[i-1]); + out[i*2+1] = div4(n+input[i+1]); + } + out[i*2+0] = div4(input[w-2]*3 + input[w-1] + 2); + out[i*2+1] = input[w-1]; + return out; +} + +#define div16(x) ((uint8) ((x) >> 4)) + +static uint8 *resample_row_hv_2(uint8 *out, uint8 *in_near, uint8 *in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i,t0,t1; + if (w == 1) { + out[0] = out[1] = div4(3*in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3*in_near[0] + in_far[0]; + out[0] = div4(t1+2); + for (i=1; i < w; ++i) { + t0 = t1; + t1 = 3*in_near[i]+in_far[i]; + out[i*2-1] = div16(3*t0 + t1 + 8); + out[i*2 ] = div16(3*t1 + t0 + 8); + } + out[w*2-1] = div4(t1+2); + return out; +} + +static uint8 *resample_row_generic(uint8 *out, uint8 *in_near, uint8 *in_far, int w, int hs) +{ + // resample with nearest-neighbor + int i,j; + for (i=0; i < w; ++i) + for (j=0; j < hs; ++j) + out[i*hs+j] = in_near[i]; + return out; +} + +#define float2fixed(x) ((int) ((x) * 65536 + 0.5)) + +// 0.38 seconds on 3*anemones.jpg (0.25 with processor = Pro) +// VC6 without processor=Pro is generating multiple LEAs per multiply! +static void YCbCr_to_RGB_row(uint8 *out, uint8 *y, uint8 *pcb, uint8 *pcr, int count, int step) +{ + int i; + for (i=0; i < count; ++i) { + int y_fixed = (y[i] << 16) + 32768; // rounding + int r,g,b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr*float2fixed(1.40200f); + g = y_fixed - cr*float2fixed(0.71414f) - cb*float2fixed(0.34414f); + b = y_fixed + cb*float2fixed(1.77200f); + r >>= 16; + g >>= 16; + b >>= 16; + if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } + if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } + if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } + out[0] = (uint8)r; + out[1] = (uint8)g; + out[2] = (uint8)b; + out[3] = 255; + out += step; + } +} + +#if STBI_SIMD +static stbi_YCbCr_to_RGB_run stbi_YCbCr_installed = YCbCr_to_RGB_row; + +void stbi_install_YCbCr_to_RGB(stbi_YCbCr_to_RGB_run func) +{ + stbi_YCbCr_installed = func; +} +#endif + + +// clean up the temporary component buffers +static void cleanup_jpeg(jpeg *j) +{ + int i; + for (i=0; i < j->s.img_n; ++i) { + if (j->img_comp[i].data) { + free(j->img_comp[i].raw_data); + j->img_comp[i].data = NULL; + } + if (j->img_comp[i].linebuf) { + free(j->img_comp[i].linebuf); + j->img_comp[i].linebuf = NULL; + } + } +} + +typedef struct +{ + resample_row_func resample; + uint8 *line0,*line1; + int hs,vs; // expansion factor in each axis + int w_lores; // horizontal pixels pre-expansion + int ystep; // how far through vertical expansion we are + int ypos; // which pre-expansion row we're on +} stbi_resample; + +static uint8 *load_jpeg_image(jpeg *z, int *out_x, int *out_y, int *comp, int req_comp) +{ + int n, decode_n; + // validate req_comp + if (req_comp < 0 || req_comp > 4) return epuc("bad req_comp", "Internal error"); + z->s.img_n = 0; + + // load a jpeg image from whichever source + if (!decode_jpeg_image(z)) { cleanup_jpeg(z); return NULL; } + + // determine actual number of components to generate + n = req_comp ? req_comp : z->s.img_n; + + if (z->s.img_n == 3 && n < 3) + decode_n = 1; + else + decode_n = z->s.img_n; + + // resample and color-convert + { + int k; + uint i,j; + uint8 *output; + uint8 *coutput[4]; + + stbi_resample res_comp[4]; + + for (k=0; k < decode_n; ++k) { + stbi_resample *r = &res_comp[k]; + + // allocate line buffer big enough for upsampling off the edges + // with upsample factor of 4 + z->img_comp[k].linebuf = (uint8 *) malloc(z->s.img_x + 3); + if (!z->img_comp[k].linebuf) { cleanup_jpeg(z); return epuc("outofmem", "Out of memory"); } + + r->hs = z->img_h_max / z->img_comp[k].h; + r->vs = z->img_v_max / z->img_comp[k].v; + r->ystep = r->vs >> 1; + r->w_lores = (z->s.img_x + r->hs-1) / r->hs; + r->ypos = 0; + r->line0 = r->line1 = z->img_comp[k].data; + + if (r->hs == 1 && r->vs == 1) r->resample = resample_row_1; + else if (r->hs == 1 && r->vs == 2) r->resample = resample_row_v_2; + else if (r->hs == 2 && r->vs == 1) r->resample = resample_row_h_2; + else if (r->hs == 2 && r->vs == 2) r->resample = resample_row_hv_2; + else r->resample = resample_row_generic; + } + + // can't error after this so, this is safe + output = (uint8 *) malloc(n * z->s.img_x * z->s.img_y + 1); + if (!output) { cleanup_jpeg(z); return epuc("outofmem", "Out of memory"); } + + // now go ahead and resample + for (j=0; j < z->s.img_y; ++j) { + uint8 *out = output + n * z->s.img_x * j; + for (k=0; k < decode_n; ++k) { + stbi_resample *r = &res_comp[k]; + int y_bot = r->ystep >= (r->vs >> 1); + coutput[k] = r->resample(z->img_comp[k].linebuf, + y_bot ? r->line1 : r->line0, + y_bot ? r->line0 : r->line1, + r->w_lores, r->hs); + if (++r->ystep >= r->vs) { + r->ystep = 0; + r->line0 = r->line1; + if (++r->ypos < z->img_comp[k].y) + r->line1 += z->img_comp[k].w2; + } + } + if (n >= 3) { + uint8 *y = coutput[0]; + if (z->s.img_n == 3) { + #if STBI_SIMD + stbi_YCbCr_installed(out, y, coutput[1], coutput[2], z->s.img_x, n); + #else + YCbCr_to_RGB_row(out, y, coutput[1], coutput[2], z->s.img_x, n); + #endif + } else + for (i=0; i < z->s.img_x; ++i) { + out[0] = out[1] = out[2] = y[i]; + out[3] = 255; // not used if n==3 + out += n; + } + } else { + uint8 *y = coutput[0]; + if (n == 1) + for (i=0; i < z->s.img_x; ++i) out[i] = y[i]; + else + for (i=0; i < z->s.img_x; ++i) *out++ = y[i], *out++ = 255; + } + } + cleanup_jpeg(z); + *out_x = z->s.img_x; + *out_y = z->s.img_y; + if (comp) *comp = z->s.img_n; // report original components, not output + return output; + } +} + +#ifndef STBI_NO_STDIO +unsigned char *stbi_jpeg_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + jpeg j; + start_file(&j.s, f); + return load_jpeg_image(&j, x,y,comp,req_comp); +} + +unsigned char *stbi_jpeg_load(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *data; + FILE *f = fopen(filename, "rb"); + if (!f) return NULL; + data = stbi_jpeg_load_from_file(f,x,y,comp,req_comp); + fclose(f); + return data; +} +#endif + +unsigned char *stbi_jpeg_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + jpeg j; + start_mem(&j.s, buffer,len); + return load_jpeg_image(&j, x,y,comp,req_comp); +} + +#ifndef STBI_NO_STDIO +int stbi_jpeg_test_file(FILE *f) +{ + int n,r; + jpeg j; + n = ftell(f); + start_file(&j.s, f); + r = decode_jpeg_header(&j, SCAN_type); + fseek(f,n,SEEK_SET); + return r; +} +#endif + +int stbi_jpeg_test_memory(stbi_uc const *buffer, int len) +{ + jpeg j; + start_mem(&j.s, buffer,len); + return decode_jpeg_header(&j, SCAN_type); +} + +// @TODO: +#ifndef STBI_NO_STDIO +extern int stbi_jpeg_info (char const *filename, int *x, int *y, int *comp); +extern int stbi_jpeg_info_from_file (FILE *f, int *x, int *y, int *comp); +#endif +extern int stbi_jpeg_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); + +// public domain zlib decode v0.2 Sean Barrett 2006-11-18 +// simple implementation +// - all input must be provided in an upfront buffer +// - all output is written to a single output buffer (can malloc/realloc) +// performance +// - fast huffman + +// fast-way is faster to check than jpeg huffman, but slow way is slower +#define ZFAST_BITS 9 // accelerate all cases in default tables +#define ZFAST_MASK ((1 << ZFAST_BITS) - 1) + +// zlib-style huffman encoding +// (jpegs packs from left, zlib from right, so can't share code) +typedef struct +{ + uint16 fast[1 << ZFAST_BITS]; + uint16 firstcode[16]; + int maxcode[17]; + uint16 firstsymbol[16]; + uint8 size[288]; + uint16 value[288]; +} zhuffman; + +__forceinline static int bitreverse16(int n) +{ + n = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1); + n = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2); + n = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4); + n = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8); + return n; +} + +__forceinline static int bit_reverse(int v, int bits) +{ + assert(bits <= 16); + // to bit reverse n bits, reverse 16 and shift + // e.g. 11 bits, bit reverse and shift away 5 + return bitreverse16(v) >> (16-bits); +} + +static int zbuild_huffman(zhuffman *z, uint8 *sizelist, int num) +{ + int i,k=0; + int code, next_code[16], sizes[17]; + + // DEFLATE spec for generating codes + memset(sizes, 0, sizeof(sizes)); + memset(z->fast, 255, sizeof(z->fast)); + for (i=0; i < num; ++i) + ++sizes[sizelist[i]]; + sizes[0] = 0; + for (i=1; i < 16; ++i) + assert(sizes[i] <= (1 << i)); + code = 0; + for (i=1; i < 16; ++i) { + next_code[i] = code; + z->firstcode[i] = (uint16) code; + z->firstsymbol[i] = (uint16) k; + code = (code + sizes[i]); + if (sizes[i]) + if (code-1 >= (1 << i)) return e("bad codelengths","Corrupt JPEG"); + z->maxcode[i] = code << (16-i); // preshift for inner loop + code <<= 1; + k += sizes[i]; + } + z->maxcode[16] = 0x10000; // sentinel + for (i=0; i < num; ++i) { + int s = sizelist[i]; + if (s) { + int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s]; + z->size[c] = (uint8)s; + z->value[c] = (uint16)i; + if (s <= ZFAST_BITS) { + int k = bit_reverse(next_code[s],s); + while (k < (1 << ZFAST_BITS)) { + z->fast[k] = (uint16) c; + k += (1 << s); + } + } + ++next_code[s]; + } + } + return 1; +} + +// zlib-from-memory implementation for PNG reading +// because PNG allows splitting the zlib stream arbitrarily, +// and it's annoying structurally to have PNG call ZLIB call PNG, +// we require PNG read all the IDATs and combine them into a single +// memory buffer + +typedef struct +{ + uint8 *zbuffer, *zbuffer_end; + int num_bits; + uint32 code_buffer; + + char *zout; + char *zout_start; + char *zout_end; + int z_expandable; + + zhuffman z_length, z_distance; +} zbuf; + +__forceinline static int zget8(zbuf *z) +{ + if (z->zbuffer >= z->zbuffer_end) return 0; + return *z->zbuffer++; +} + +static void fill_bits(zbuf *z) +{ + do { + assert(z->code_buffer < (1U << z->num_bits)); + z->code_buffer |= zget8(z) << z->num_bits; + z->num_bits += 8; + } while (z->num_bits <= 24); +} + +__forceinline static unsigned int zreceive(zbuf *z, int n) +{ + unsigned int k; + if (z->num_bits < n) fill_bits(z); + k = z->code_buffer & ((1 << n) - 1); + z->code_buffer >>= n; + z->num_bits -= n; + return k; +} + +__forceinline static int zhuffman_decode(zbuf *a, zhuffman *z) +{ + int b,s,k; + if (a->num_bits < 16) fill_bits(a); + b = z->fast[a->code_buffer & ZFAST_MASK]; + if (b < 0xffff) { + s = z->size[b]; + a->code_buffer >>= s; + a->num_bits -= s; + return z->value[b]; + } + + // not resolved by fast table, so compute it the slow way + // use jpeg approach, which requires MSbits at top + k = bit_reverse(a->code_buffer, 16); + for (s=ZFAST_BITS+1; ; ++s) + if (k < z->maxcode[s]) + break; + if (s == 16) return -1; // invalid code! + // code size is s, so: + b = (k >> (16-s)) - z->firstcode[s] + z->firstsymbol[s]; + assert(z->size[b] == s); + a->code_buffer >>= s; + a->num_bits -= s; + return z->value[b]; +} + +static int expand(zbuf *z, int n) // need to make room for n bytes +{ + char *q; + int cur, limit; + if (!z->z_expandable) return e("output buffer limit","Corrupt PNG"); + cur = (int) (z->zout - z->zout_start); + limit = (int) (z->zout_end - z->zout_start); + while (cur + n > limit) + limit *= 2; + q = (char *) realloc(z->zout_start, limit); + if (q == NULL) return e("outofmem", "Out of memory"); + z->zout_start = q; + z->zout = q + cur; + z->zout_end = q + limit; + return 1; +} + +static int length_base[31] = { + 3,4,5,6,7,8,9,10,11,13, + 15,17,19,23,27,31,35,43,51,59, + 67,83,99,115,131,163,195,227,258,0,0 }; + +static int length_extra[31]= +{ 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 }; + +static int dist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193, +257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0}; + +static int dist_extra[32] = +{ 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; + +static int parse_huffman_block(zbuf *a) +{ + for(;;) { + int z = zhuffman_decode(a, &a->z_length); + if (z < 256) { + if (z < 0) return e("bad huffman code","Corrupt PNG"); // error in huffman codes + if (a->zout >= a->zout_end) if (!expand(a, 1)) return 0; + *a->zout++ = (char) z; + } else { + uint8 *p; + int len,dist; + if (z == 256) return 1; + z -= 257; + len = length_base[z]; + if (length_extra[z]) len += zreceive(a, length_extra[z]); + z = zhuffman_decode(a, &a->z_distance); + if (z < 0) return e("bad huffman code","Corrupt PNG"); + dist = dist_base[z]; + if (dist_extra[z]) dist += zreceive(a, dist_extra[z]); + if (a->zout - a->zout_start < dist) return e("bad dist","Corrupt PNG"); + if (a->zout + len > a->zout_end) if (!expand(a, len)) return 0; + p = (uint8 *) (a->zout - dist); + while (len--) + *a->zout++ = *p++; + } + } +} + +static int compute_huffman_codes(zbuf *a) +{ + static uint8 length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 }; + static zhuffman z_codelength; // static just to save stack space + uint8 lencodes[286+32+137];//padding for maximum single op + uint8 codelength_sizes[19]; + int i,n; + + int hlit = zreceive(a,5) + 257; + int hdist = zreceive(a,5) + 1; + int hclen = zreceive(a,4) + 4; + + memset(codelength_sizes, 0, sizeof(codelength_sizes)); + for (i=0; i < hclen; ++i) { + int s = zreceive(a,3); + codelength_sizes[length_dezigzag[i]] = (uint8) s; + } + if (!zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0; + + n = 0; + while (n < hlit + hdist) { + int c = zhuffman_decode(a, &z_codelength); + assert(c >= 0 && c < 19); + if (c < 16) + lencodes[n++] = (uint8) c; + else if (c == 16) { + c = zreceive(a,2)+3; + memset(lencodes+n, lencodes[n-1], c); + n += c; + } else if (c == 17) { + c = zreceive(a,3)+3; + memset(lencodes+n, 0, c); + n += c; + } else { + assert(c == 18); + c = zreceive(a,7)+11; + memset(lencodes+n, 0, c); + n += c; + } + } + if (n != hlit+hdist) return e("bad codelengths","Corrupt PNG"); + if (!zbuild_huffman(&a->z_length, lencodes, hlit)) return 0; + if (!zbuild_huffman(&a->z_distance, lencodes+hlit, hdist)) return 0; + return 1; +} + +static int parse_uncompressed_block(zbuf *a) +{ + uint8 header[4]; + int len,nlen,k; + if (a->num_bits & 7) + zreceive(a, a->num_bits & 7); // discard + // drain the bit-packed data into header + k = 0; + while (a->num_bits > 0) { + header[k++] = (uint8) (a->code_buffer & 255); // wtf this warns? + a->code_buffer >>= 8; + a->num_bits -= 8; + } + assert(a->num_bits == 0); + // now fill header the normal way + while (k < 4) + header[k++] = (uint8) zget8(a); + len = header[1] * 256 + header[0]; + nlen = header[3] * 256 + header[2]; + if (nlen != (len ^ 0xffff)) return e("zlib corrupt","Corrupt PNG"); + if (a->zbuffer + len > a->zbuffer_end) return e("read past buffer","Corrupt PNG"); + if (a->zout + len > a->zout_end) + if (!expand(a, len)) return 0; + memcpy(a->zout, a->zbuffer, len); + a->zbuffer += len; + a->zout += len; + return 1; +} + +static int parse_zlib_header(zbuf *a) +{ + int cmf = zget8(a); + int cm = cmf & 15; + /* int cinfo = cmf >> 4; */ + int flg = zget8(a); + if ((cmf*256+flg) % 31 != 0) return e("bad zlib header","Corrupt PNG"); // zlib spec + if (flg & 32) return e("no preset dict","Corrupt PNG"); // preset dictionary not allowed in png + if (cm != 8) return e("bad compression","Corrupt PNG"); // DEFLATE required for png + // window = 1 << (8 + cinfo)... but who cares, we fully buffer output + return 1; +} + +// @TODO: should statically initialize these for optimal thread safety +static uint8 default_length[288], default_distance[32]; +static void init_defaults(void) +{ + int i; // use <= to match clearly with spec + for (i=0; i <= 143; ++i) default_length[i] = 8; + for ( ; i <= 255; ++i) default_length[i] = 9; + for ( ; i <= 279; ++i) default_length[i] = 7; + for ( ; i <= 287; ++i) default_length[i] = 8; + + for (i=0; i <= 31; ++i) default_distance[i] = 5; +} + +static int parse_zlib(zbuf *a, int parse_header) +{ + int final, type; + if (parse_header) + if (!parse_zlib_header(a)) return 0; + a->num_bits = 0; + a->code_buffer = 0; + do { + final = zreceive(a,1); + type = zreceive(a,2); + if (type == 0) { + if (!parse_uncompressed_block(a)) return 0; + } else if (type == 3) { + return 0; + } else { + if (type == 1) { + // use fixed code lengths + if (!default_distance[31]) init_defaults(); + if (!zbuild_huffman(&a->z_length , default_length , 288)) return 0; + if (!zbuild_huffman(&a->z_distance, default_distance, 32)) return 0; + } else { + if (!compute_huffman_codes(a)) return 0; + } + if (!parse_huffman_block(a)) return 0; + } + } while (!final); + return 1; +} + +static int do_zlib(zbuf *a, char *obuf, int olen, int exp, int parse_header) +{ + a->zout_start = obuf; + a->zout = obuf; + a->zout_end = obuf + olen; + a->z_expandable = exp; + + return parse_zlib(a, parse_header); +} + +char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen) +{ + zbuf a; + char *p = (char *) malloc(initial_size); + if (p == NULL) return NULL; + a.zbuffer = (uint8 *) buffer; + a.zbuffer_end = (uint8 *) buffer + len; + if (do_zlib(&a, p, initial_size, 1, 1)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + free(a.zout_start); + return NULL; + } +} + +char *stbi_zlib_decode_malloc(char const *buffer, int len, int *outlen) +{ + return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen); +} + +int stbi_zlib_decode_buffer(char *obuffer, int olen, char const *ibuffer, int ilen) +{ + zbuf a; + a.zbuffer = (uint8 *) ibuffer; + a.zbuffer_end = (uint8 *) ibuffer + ilen; + if (do_zlib(&a, obuffer, olen, 0, 1)) + return (int) (a.zout - a.zout_start); + else + return -1; +} + +char *stbi_zlib_decode_noheader_malloc(char const *buffer, int len, int *outlen) +{ + zbuf a; + char *p = (char *) malloc(16384); + if (p == NULL) return NULL; + a.zbuffer = (uint8 *) buffer; + a.zbuffer_end = (uint8 *) buffer+len; + if (do_zlib(&a, p, 16384, 1, 0)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + free(a.zout_start); + return NULL; + } +} + +int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen) +{ + zbuf a; + a.zbuffer = (uint8 *) ibuffer; + a.zbuffer_end = (uint8 *) ibuffer + ilen; + if (do_zlib(&a, obuffer, olen, 0, 0)) + return (int) (a.zout - a.zout_start); + else + return -1; +} + +// public domain "baseline" PNG decoder v0.10 Sean Barrett 2006-11-18 +// simple implementation +// - only 8-bit samples +// - no CRC checking +// - allocates lots of intermediate memory +// - avoids problem of streaming data between subsystems +// - avoids explicit window management +// performance +// - uses stb_zlib, a PD zlib implementation with fast huffman decoding + + +typedef struct +{ + uint32 length; + uint32 type; +} chunk; + +#define PNG_TYPE(a,b,c,d) (((a) << 24) + ((b) << 16) + ((c) << 8) + (d)) + +static chunk get_chunk_header(stbi *s) +{ + chunk c; + c.length = get32(s); + c.type = get32(s); + return c; +} + +static int check_png_header(stbi *s) +{ + static uint8 png_sig[8] = { 137,80,78,71,13,10,26,10 }; + int i; + for (i=0; i < 8; ++i) + if (get8(s) != png_sig[i]) return e("bad png sig","Not a PNG"); + return 1; +} + +typedef struct +{ + stbi s; + uint8 *idata, *expanded, *out; +} png; + + +enum { + F_none=0, F_sub=1, F_up=2, F_avg=3, F_paeth=4, + F_avg_first, F_paeth_first, +}; + +static uint8 first_row_filter[5] = +{ + F_none, F_sub, F_none, F_avg_first, F_paeth_first +}; + +static int paeth(int a, int b, int c) +{ + int p = a + b - c; + int pa = abs(p-a); + int pb = abs(p-b); + int pc = abs(p-c); + if (pa <= pb && pa <= pc) return a; + if (pb <= pc) return b; + return c; +} + +// create the png data from post-deflated data +static int create_png_image(png *a, uint8 *raw, uint32 raw_len, int out_n) +{ + stbi *s = &a->s; + uint32 i,j,stride = s->img_x*out_n; + int k; + int img_n = s->img_n; // copy it into a local for later + assert(out_n == s->img_n || out_n == s->img_n+1); + a->out = (uint8 *) malloc(s->img_x * s->img_y * out_n); + if (!a->out) return e("outofmem", "Out of memory"); + if (raw_len != (img_n * s->img_x + 1) * s->img_y) return e("not enough pixels","Corrupt PNG"); + for (j=0; j < s->img_y; ++j) { + uint8 *cur = a->out + stride*j; + uint8 *prior = cur - stride; + int filter = *raw++; + if (filter > 4) return e("invalid filter","Corrupt PNG"); + // if first row, use special filter that doesn't sample previous row + if (j == 0) filter = first_row_filter[filter]; + // handle first pixel explicitly + for (k=0; k < img_n; ++k) { + switch(filter) { + case F_none : cur[k] = raw[k]; break; + case F_sub : cur[k] = raw[k]; break; + case F_up : cur[k] = raw[k] + prior[k]; break; + case F_avg : cur[k] = raw[k] + (prior[k]>>1); break; + case F_paeth : cur[k] = (uint8) (raw[k] + paeth(0,prior[k],0)); break; + case F_avg_first : cur[k] = raw[k]; break; + case F_paeth_first: cur[k] = raw[k]; break; + } + } + if (img_n != out_n) cur[img_n] = 255; + raw += img_n; + cur += out_n; + prior += out_n; + // this is a little gross, so that we don't switch per-pixel or per-component + if (img_n == out_n) { + #define CASE(f) \ + case f: \ + for (i=s->img_x-1; i >= 1; --i, raw+=img_n,cur+=img_n,prior+=img_n) \ + for (k=0; k < img_n; ++k) + switch(filter) { + CASE(F_none) cur[k] = raw[k]; break; + CASE(F_sub) cur[k] = raw[k] + cur[k-img_n]; break; + CASE(F_up) cur[k] = raw[k] + prior[k]; break; + CASE(F_avg) cur[k] = raw[k] + ((prior[k] + cur[k-img_n])>>1); break; + CASE(F_paeth) cur[k] = (uint8) (raw[k] + paeth(cur[k-img_n],prior[k],prior[k-img_n])); break; + CASE(F_avg_first) cur[k] = raw[k] + (cur[k-img_n] >> 1); break; + CASE(F_paeth_first) cur[k] = (uint8) (raw[k] + paeth(cur[k-img_n],0,0)); break; + } + #undef CASE + } else { + assert(img_n+1 == out_n); + #define CASE(f) \ + case f: \ + for (i=s->img_x-1; i >= 1; --i, cur[img_n]=255,raw+=img_n,cur+=out_n,prior+=out_n) \ + for (k=0; k < img_n; ++k) + switch(filter) { + CASE(F_none) cur[k] = raw[k]; break; + CASE(F_sub) cur[k] = raw[k] + cur[k-out_n]; break; + CASE(F_up) cur[k] = raw[k] + prior[k]; break; + CASE(F_avg) cur[k] = raw[k] + ((prior[k] + cur[k-out_n])>>1); break; + CASE(F_paeth) cur[k] = (uint8) (raw[k] + paeth(cur[k-out_n],prior[k],prior[k-out_n])); break; + CASE(F_avg_first) cur[k] = raw[k] + (cur[k-out_n] >> 1); break; + CASE(F_paeth_first) cur[k] = (uint8) (raw[k] + paeth(cur[k-out_n],0,0)); break; + } + #undef CASE + } + } + return 1; +} + +static int compute_transparency(png *z, uint8 tc[3], int out_n) +{ + stbi *s = &z->s; + uint32 i, pixel_count = s->img_x * s->img_y; + uint8 *p = z->out; + + // compute color-based transparency, assuming we've + // already got 255 as the alpha value in the output + assert(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i=0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 255); + p += 2; + } + } else { + for (i=0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } + } + return 1; +} + +static int expand_palette(png *a, uint8 *palette, int len, int pal_img_n) +{ + uint32 i, pixel_count = a->s.img_x * a->s.img_y; + uint8 *p, *temp_out, *orig = a->out; + + p = (uint8 *) malloc(pixel_count * pal_img_n); + if (p == NULL) return e("outofmem", "Out of memory"); + + // between here and free(out) below, exitting would leak + temp_out = p; + + if (pal_img_n == 3) { + for (i=0; i < pixel_count; ++i) { + int n = orig[i]*4; + p[0] = palette[n ]; + p[1] = palette[n+1]; + p[2] = palette[n+2]; + p += 3; + } + } else { + for (i=0; i < pixel_count; ++i) { + int n = orig[i]*4; + p[0] = palette[n ]; + p[1] = palette[n+1]; + p[2] = palette[n+2]; + p[3] = palette[n+3]; + p += 4; + } + } + free(a->out); + a->out = temp_out; + return 1; +} + +static int parse_png_file(png *z, int scan, int req_comp) +{ + uint8 palette[1024], pal_img_n=0; + uint8 has_trans=0, tc[3]; + uint32 ioff=0, idata_limit=0, i, pal_len=0; + int first=1,k; + stbi *s = &z->s; + + if (!check_png_header(s)) return 0; + + if (scan == SCAN_type) return 1; + + for(;;first=0) { + chunk c = get_chunk_header(s); + if (first && c.type != PNG_TYPE('I','H','D','R')) + return e("first not IHDR","Corrupt PNG"); + switch (c.type) { + case PNG_TYPE('I','H','D','R'): { + int depth,color,interlace,comp,filter; + if (!first) return e("multiple IHDR","Corrupt PNG"); + if (c.length != 13) return e("bad IHDR len","Corrupt PNG"); + s->img_x = get32(s); if (s->img_x > (1 << 24)) return e("too large","Very large image (corrupt?)"); + s->img_y = get32(s); if (s->img_y > (1 << 24)) return e("too large","Very large image (corrupt?)"); + depth = get8(s); if (depth != 8) return e("8bit only","PNG not supported: 8-bit only"); + color = get8(s); if (color > 6) return e("bad ctype","Corrupt PNG"); + if (color == 3) pal_img_n = 3; else if (color & 1) return e("bad ctype","Corrupt PNG"); + comp = get8(s); if (comp) return e("bad comp method","Corrupt PNG"); + filter= get8(s); if (filter) return e("bad filter method","Corrupt PNG"); + interlace = get8(s); if (interlace) return e("interlaced","PNG not supported: interlaced mode"); + if (!s->img_x || !s->img_y) return e("0-pixel image","Corrupt PNG"); + if (!pal_img_n) { + s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); + if ((1 << 30) / s->img_x / s->img_n < s->img_y) return e("too large", "Image too large to decode"); + if (scan == SCAN_header) return 1; + } else { + // if paletted, then pal_n is our final components, and + // img_n is # components to decompress/filter. + s->img_n = 1; + if ((1 << 30) / s->img_x / 4 < s->img_y) return e("too large","Corrupt PNG"); + // if SCAN_header, have to scan to see if we have a tRNS + } + break; + } + + case PNG_TYPE('P','L','T','E'): { + if (c.length > 256*3) return e("invalid PLTE","Corrupt PNG"); + pal_len = c.length / 3; + if (pal_len * 3 != c.length) return e("invalid PLTE","Corrupt PNG"); + for (i=0; i < pal_len; ++i) { + palette[i*4+0] = get8u(s); + palette[i*4+1] = get8u(s); + palette[i*4+2] = get8u(s); + palette[i*4+3] = 255; + } + break; + } + + case PNG_TYPE('t','R','N','S'): { + if (z->idata) return e("tRNS after IDAT","Corrupt PNG"); + if (pal_img_n) { + if (scan == SCAN_header) { s->img_n = 4; return 1; } + if (pal_len == 0) return e("tRNS before PLTE","Corrupt PNG"); + if (c.length > pal_len) return e("bad tRNS len","Corrupt PNG"); + pal_img_n = 4; + for (i=0; i < c.length; ++i) + palette[i*4+3] = get8u(s); + } else { + if (!(s->img_n & 1)) return e("tRNS with alpha","Corrupt PNG"); + if (c.length != (uint32) s->img_n*2) return e("bad tRNS len","Corrupt PNG"); + has_trans = 1; + for (k=0; k < s->img_n; ++k) + tc[k] = (uint8) get16(s); // non 8-bit images will be larger + } + break; + } + + case PNG_TYPE('I','D','A','T'): { + if (pal_img_n && !pal_len) return e("no PLTE","Corrupt PNG"); + if (scan == SCAN_header) { s->img_n = pal_img_n; return 1; } + if (ioff + c.length > idata_limit) { + uint8 *p; + if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096; + while (ioff + c.length > idata_limit) + idata_limit *= 2; + p = (uint8 *) realloc(z->idata, idata_limit); if (p == NULL) return e("outofmem", "Out of memory"); + z->idata = p; + } + #ifndef STBI_NO_STDIO + if (s->img_file) + { + if (fread(z->idata+ioff,1,c.length,s->img_file) != c.length) return e("outofdata","Corrupt PNG"); + } + else + #endif + { + memcpy(z->idata+ioff, s->img_buffer, c.length); + s->img_buffer += c.length; + } + ioff += c.length; + break; + } + + case PNG_TYPE('I','E','N','D'): { + uint32 raw_len; + if (scan != SCAN_load) return 1; + if (z->idata == NULL) return e("no IDAT","Corrupt PNG"); + z->expanded = (uint8 *) stbi_zlib_decode_malloc((char *) z->idata, ioff, (int *) &raw_len); + if (z->expanded == NULL) return 0; // zlib should set error + free(z->idata); z->idata = NULL; + if ((req_comp == s->img_n+1 && req_comp != 3 && !pal_img_n) || has_trans) + s->img_out_n = s->img_n+1; + else + s->img_out_n = s->img_n; + if (!create_png_image(z, z->expanded, raw_len, s->img_out_n)) return 0; + if (has_trans) + if (!compute_transparency(z, tc, s->img_out_n)) return 0; + if (pal_img_n) { + // pal_img_n == 3 or 4 + s->img_n = pal_img_n; // record the actual colors we had + s->img_out_n = pal_img_n; + if (req_comp >= 3) s->img_out_n = req_comp; + if (!expand_palette(z, palette, pal_len, s->img_out_n)) + return 0; + } + free(z->expanded); z->expanded = NULL; + return 1; + } + + default: + // if critical, fail + if ((c.type & (1 << 29)) == 0) { + #ifndef STBI_NO_FAILURE_STRINGS + // not threadsafe + static char invalid_chunk[] = "XXXX chunk not known"; + invalid_chunk[0] = (uint8) (c.type >> 24); + invalid_chunk[1] = (uint8) (c.type >> 16); + invalid_chunk[2] = (uint8) (c.type >> 8); + invalid_chunk[3] = (uint8) (c.type >> 0); + #endif + return e(invalid_chunk, "PNG not supported: unknown chunk type"); + } + skip(s, c.length); + break; + } + // end of chunk, read and skip CRC + get32(s); + } +} + +static unsigned char *do_png(png *p, int *x, int *y, int *n, int req_comp) +{ + unsigned char *result=NULL; + p->expanded = NULL; + p->idata = NULL; + p->out = NULL; + if (req_comp < 0 || req_comp > 4) return epuc("bad req_comp", "Internal error"); + if (parse_png_file(p, SCAN_load, req_comp)) { + result = p->out; + p->out = NULL; + if (req_comp && req_comp != p->s.img_out_n) { + result = convert_format(result, p->s.img_out_n, req_comp, p->s.img_x, p->s.img_y); + p->s.img_out_n = req_comp; + if (result == NULL) return result; + } + *x = p->s.img_x; + *y = p->s.img_y; + if (n) *n = p->s.img_n; + } + free(p->out); p->out = NULL; + free(p->expanded); p->expanded = NULL; + free(p->idata); p->idata = NULL; + + return result; +} + +#ifndef STBI_NO_STDIO +unsigned char *stbi_png_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + png p; + start_file(&p.s, f); + return do_png(&p, x,y,comp,req_comp); +} + +unsigned char *stbi_png_load(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *data; + FILE *f = fopen(filename, "rb"); + if (!f) return NULL; + data = stbi_png_load_from_file(f,x,y,comp,req_comp); + fclose(f); + return data; +} +#endif + +unsigned char *stbi_png_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + png p; + start_mem(&p.s, buffer,len); + return do_png(&p, x,y,comp,req_comp); +} + +#ifndef STBI_NO_STDIO +int stbi_png_test_file(FILE *f) +{ + png p; + int n,r; + n = ftell(f); + start_file(&p.s, f); + r = parse_png_file(&p, SCAN_type,STBI_default); + fseek(f,n,SEEK_SET); + return r; +} +#endif + +int stbi_png_test_memory(stbi_uc const *buffer, int len) +{ + png p; + start_mem(&p.s, buffer, len); + return parse_png_file(&p, SCAN_type,STBI_default); +} + +// TODO: load header from png +#ifndef STBI_NO_STDIO +extern int stbi_png_info (char const *filename, int *x, int *y, int *comp); +extern int stbi_png_info_from_file (FILE *f, int *x, int *y, int *comp); +#endif +extern int stbi_png_info_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp); + +// Microsoft/Windows BMP image + +static int bmp_test(stbi *s) +{ + int sz; + if (get8(s) != 'B') return 0; + if (get8(s) != 'M') return 0; + get32le(s); // discard filesize + get16le(s); // discard reserved + get16le(s); // discard reserved + get32le(s); // discard data offset + sz = get32le(s); + if (sz == 12 || sz == 40 || sz == 56 || sz == 108) return 1; + return 0; +} + +#ifndef STBI_NO_STDIO +int stbi_bmp_test_file (FILE *f) +{ + stbi s; + int r,n = ftell(f); + start_file(&s,f); + r = bmp_test(&s); + fseek(f,n,SEEK_SET); + return r; +} +#endif + +int stbi_bmp_test_memory (stbi_uc const *buffer, int len) +{ + stbi s; + start_mem(&s, buffer, len); + return bmp_test(&s); +} + +// returns 0..31 for the highest set bit +static int high_bit(unsigned int z) +{ + int n=0; + if (z == 0) return -1; + if (z >= 0x10000) n += 16, z >>= 16; + if (z >= 0x00100) n += 8, z >>= 8; + if (z >= 0x00010) n += 4, z >>= 4; + if (z >= 0x00004) n += 2, z >>= 2; + if (z >= 0x00002) n += 1, z >>= 1; + return n; +} + +static int bitcount(unsigned int a) +{ + a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2 + a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4 + a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits + a = (a + (a >> 8)); // max 16 per 8 bits + a = (a + (a >> 16)); // max 32 per 8 bits + return a & 0xff; +} + +static int shiftsigned(int v, int shift, int bits) +{ + int result; + int z=0; + + if (shift < 0) v <<= -shift; + else v >>= shift; + result = v; + + z = bits; + while (z < 8) { + result += v >> z; + z += bits; + } + return result; +} + +static stbi_uc *bmp_load(stbi *s, int *x, int *y, int *comp, int req_comp) +{ + uint8 *out; + unsigned int mr=0,mg=0,mb=0,ma=0; + stbi_uc pal[256][4]; + int psize=0,i,j,compress=0,width; + int bpp, flip_vertically, pad, target, offset, hsz; + if (get8(s) != 'B' || get8(s) != 'M') return epuc("not BMP", "Corrupt BMP"); + get32le(s); // discard filesize + get16le(s); // discard reserved + get16le(s); // discard reserved + offset = get32le(s); + hsz = get32le(s); + if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108) return epuc("unknown BMP", "BMP type not supported: unknown"); + failure_reason = "bad BMP"; + if (hsz == 12) { + s->img_x = get16le(s); + s->img_y = get16le(s); + } else { + s->img_x = get32le(s); + s->img_y = get32le(s); + } + if (get16le(s) != 1) return 0; + bpp = get16le(s); + if (bpp == 1) return epuc("monochrome", "BMP type not supported: 1-bit"); + flip_vertically = ((int) s->img_y) > 0; + s->img_y = abs((int) s->img_y); + if (hsz == 12) { + if (bpp < 24) + psize = (offset - 14 - 24) / 3; + } else { + compress = get32le(s); + if (compress == 1 || compress == 2) return epuc("BMP RLE", "BMP type not supported: RLE"); + get32le(s); // discard sizeof + get32le(s); // discard hres + get32le(s); // discard vres + get32le(s); // discard colorsused + get32le(s); // discard max important + if (hsz == 40 || hsz == 56) { + if (hsz == 56) { + get32le(s); + get32le(s); + get32le(s); + get32le(s); + } + if (bpp == 16 || bpp == 32) { + mr = mg = mb = 0; + if (compress == 0) { + if (bpp == 32) { + mr = 0xff << 16; + mg = 0xff << 8; + mb = 0xff << 0; + } else { + mr = 31 << 10; + mg = 31 << 5; + mb = 31 << 0; + } + } else if (compress == 3) { + mr = get32le(s); + mg = get32le(s); + mb = get32le(s); + // not documented, but generated by photoshop and handled by mspaint + if (mr == mg && mg == mb) { + // ?!?!? + return NULL; + } + } else + return NULL; + } + } else { + assert(hsz == 108); + mr = get32le(s); + mg = get32le(s); + mb = get32le(s); + ma = get32le(s); + get32le(s); // discard color space + for (i=0; i < 12; ++i) + get32le(s); // discard color space parameters + } + if (bpp < 16) + psize = (offset - 14 - hsz) >> 2; + } + s->img_n = ma ? 4 : 3; + if (req_comp && req_comp >= 3) // we can directly decode 3 or 4 + target = req_comp; + else + target = s->img_n; // if they want monochrome, we'll post-convert + out = (stbi_uc *) malloc(target * s->img_x * s->img_y); + if (!out) return epuc("outofmem", "Out of memory"); + if (bpp < 16) { + int z=0; + if (psize == 0 || psize > 256) { free(out); return epuc("invalid", "Corrupt BMP"); } + for (i=0; i < psize; ++i) { + pal[i][2] = get8(s); + pal[i][1] = get8(s); + pal[i][0] = get8(s); + if (hsz != 12) get8(s); + pal[i][3] = 255; + } + skip(s, offset - 14 - hsz - psize * (hsz == 12 ? 3 : 4)); + if (bpp == 4) width = (s->img_x + 1) >> 1; + else if (bpp == 8) width = s->img_x; + else { free(out); return epuc("bad bpp", "Corrupt BMP"); } + pad = (-width)&3; + for (j=0; j < (int) s->img_y; ++j) { + for (i=0; i < (int) s->img_x; i += 2) { + int v=get8(s),v2=0; + if (bpp == 4) { + v2 = v & 15; + v >>= 4; + } + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + if (i+1 == (int) s->img_x) break; + v = (bpp == 8) ? get8(s) : v2; + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + } + skip(s, pad); + } + } else { + int rshift=0,gshift=0,bshift=0,ashift=0,rcount=0,gcount=0,bcount=0,acount=0; + int z = 0; + int easy=0; + skip(s, offset - 14 - hsz); + if (bpp == 24) width = 3 * s->img_x; + else if (bpp == 16) width = 2*s->img_x; + else /* bpp = 32 and pad = 0 */ width=0; + pad = (-width) & 3; + if (bpp == 24) { + easy = 1; + } else if (bpp == 32) { + if (mb == 0xff && mg == 0xff00 && mr == 0xff000000 && ma == 0xff000000) + easy = 2; + } + if (!easy) { + if (!mr || !mg || !mb) return epuc("bad masks", "Corrupt BMP"); + // right shift amt to put high bit in position #7 + rshift = high_bit(mr)-7; rcount = bitcount(mr); + gshift = high_bit(mg)-7; gcount = bitcount(mr); + bshift = high_bit(mb)-7; bcount = bitcount(mr); + ashift = high_bit(ma)-7; acount = bitcount(mr); + } + for (j=0; j < (int) s->img_y; ++j) { + if (easy) { + for (i=0; i < (int) s->img_x; ++i) { + int a; + out[z+2] = get8(s); + out[z+1] = get8(s); + out[z+0] = get8(s); + z += 3; + a = (easy == 2 ? get8(s) : 255); + if (target == 4) out[z++] = a; + } + } else { + for (i=0; i < (int) s->img_x; ++i) { + uint32 v = (bpp == 16 ? get16le(s) : get32le(s)); + int a; + out[z++] = shiftsigned(v & mr, rshift, rcount); + out[z++] = shiftsigned(v & mg, gshift, gcount); + out[z++] = shiftsigned(v & mb, bshift, bcount); + a = (ma ? shiftsigned(v & ma, ashift, acount) : 255); + if (target == 4) out[z++] = a; + } + } + skip(s, pad); + } + } + if (flip_vertically) { + stbi_uc t; + for (j=0; j < (int) s->img_y>>1; ++j) { + stbi_uc *p1 = out + j *s->img_x*target; + stbi_uc *p2 = out + (s->img_y-1-j)*s->img_x*target; + for (i=0; i < (int) s->img_x*target; ++i) { + t = p1[i], p1[i] = p2[i], p2[i] = t; + } + } + } + + if (req_comp && req_comp != target) { + out = convert_format(out, target, req_comp, s->img_x, s->img_y); + if (out == NULL) return out; // convert_format frees input on failure + } + + *x = s->img_x; + *y = s->img_y; + if (comp) *comp = target; + return out; +} + +#ifndef STBI_NO_STDIO +stbi_uc *stbi_bmp_load (char const *filename, int *x, int *y, int *comp, int req_comp) +{ + stbi_uc *data; + FILE *f = fopen(filename, "rb"); + if (!f) return NULL; + data = stbi_bmp_load_from_file(f, x,y,comp,req_comp); + fclose(f); + return data; +} + +stbi_uc *stbi_bmp_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_file(&s, f); + return bmp_load(&s, x,y,comp,req_comp); +} +#endif + +stbi_uc *stbi_bmp_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_mem(&s, buffer, len); + return bmp_load(&s, x,y,comp,req_comp); +} + +// Targa Truevision - TGA +// by Jonathan Dummer + +static int tga_test(stbi *s) +{ + int sz; + get8u(s); // discard Offset + sz = get8u(s); // color type + if( sz > 1 ) return 0; // only RGB or indexed allowed + sz = get8u(s); // image type + if( (sz != 1) && (sz != 2) && (sz != 3) && (sz != 9) && (sz != 10) && (sz != 11) ) return 0; // only RGB or grey allowed, +/- RLE + get16(s); // discard palette start + get16(s); // discard palette length + get8(s); // discard bits per palette color entry + get16(s); // discard x origin + get16(s); // discard y origin + if( get16(s) < 1 ) return 0; // test width + if( get16(s) < 1 ) return 0; // test height + sz = get8(s); // bits per pixel + if( (sz != 8) && (sz != 16) && (sz != 24) && (sz != 32) ) return 0; // only RGB or RGBA or grey allowed + return 1; // seems to have passed everything +} + +#ifndef STBI_NO_STDIO +int stbi_tga_test_file (FILE *f) +{ + stbi s; + int r,n = ftell(f); + start_file(&s, f); + r = tga_test(&s); + fseek(f,n,SEEK_SET); + return r; +} +#endif + +int stbi_tga_test_memory (stbi_uc const *buffer, int len) +{ + stbi s; + start_mem(&s, buffer, len); + return tga_test(&s); +} + +static stbi_uc *tga_load(stbi *s, int *x, int *y, int *comp, int req_comp) +{ + // read in the TGA header stuff + int tga_offset = get8u(s); + int tga_indexed = get8u(s); + int tga_image_type = get8u(s); + int tga_is_RLE = 0; + int tga_palette_start = get16le(s); + int tga_palette_len = get16le(s); + int tga_palette_bits = get8u(s); + int tga_x_origin = get16le(s); + int tga_y_origin = get16le(s); + int tga_width = get16le(s); + int tga_height = get16le(s); + int tga_bits_per_pixel = get8u(s); + int tga_inverted = get8u(s); + // image data + unsigned char *tga_data; + unsigned char *tga_palette = NULL; + int i, j; + unsigned char raw_data[4]; + unsigned char trans_data[] = { 0,0,0,0 }; + int RLE_count = 0; + int RLE_repeating = 0; + int read_next_pixel = 1; + // do a tiny bit of precessing + if( tga_image_type >= 8 ) + { + tga_image_type -= 8; + tga_is_RLE = 1; + } + /* int tga_alpha_bits = tga_inverted & 15; */ + tga_inverted = 1 - ((tga_inverted >> 5) & 1); + + // error check + if( //(tga_indexed) || + (tga_width < 1) || (tga_height < 1) || + (tga_image_type < 1) || (tga_image_type > 3) || + ((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16) && + (tga_bits_per_pixel != 24) && (tga_bits_per_pixel != 32)) + ) + { + return NULL; + } + + // If I'm paletted, then I'll use the number of bits from the palette + if( tga_indexed ) + { + tga_bits_per_pixel = tga_palette_bits; + } + + // tga info + *x = tga_width; + *y = tga_height; + if( (req_comp < 1) || (req_comp > 4) ) + { + // just use whatever the file was + req_comp = tga_bits_per_pixel / 8; + *comp = req_comp; + } else + { + // force a new number of components + *comp = tga_bits_per_pixel/8; + } + tga_data = (unsigned char*)malloc( tga_width * tga_height * req_comp ); + + // skip to the data's starting position (offset usually = 0) + skip(s, tga_offset ); + // do I need to load a palette? + if( tga_indexed ) + { + // any data to skip? (offset usually = 0) + skip(s, tga_palette_start ); + // load the palette + tga_palette = (unsigned char*)malloc( tga_palette_len * tga_palette_bits / 8 ); + getn(s, tga_palette, tga_palette_len * tga_palette_bits / 8 ); + } + // load the data + for( i = 0; i < tga_width * tga_height; ++i ) + { + // if I'm in RLE mode, do I need to get a RLE chunk? + if( tga_is_RLE ) + { + if( RLE_count == 0 ) + { + // yep, get the next byte as a RLE command + int RLE_cmd = get8u(s); + RLE_count = 1 + (RLE_cmd & 127); + RLE_repeating = RLE_cmd >> 7; + read_next_pixel = 1; + } else if( !RLE_repeating ) + { + read_next_pixel = 1; + } + } else + { + read_next_pixel = 1; + } + // OK, if I need to read a pixel, do it now + if( read_next_pixel ) + { + // load however much data we did have + if( tga_indexed ) + { + // read in 1 byte, then perform the lookup + int pal_idx = get8u(s); + if( pal_idx >= tga_palette_len ) + { + // invalid index + pal_idx = 0; + } + pal_idx *= tga_bits_per_pixel / 8; + for( j = 0; j*8 < tga_bits_per_pixel; ++j ) + { + raw_data[j] = tga_palette[pal_idx+j]; + } + } else + { + // read in the data raw + for( j = 0; j*8 < tga_bits_per_pixel; ++j ) + { + raw_data[j] = get8u(s); + } + } + // convert raw to the intermediate format + switch( tga_bits_per_pixel ) + { + case 8: + // Luminous => RGBA + trans_data[0] = raw_data[0]; + trans_data[1] = raw_data[0]; + trans_data[2] = raw_data[0]; + trans_data[3] = 255; + break; + case 16: + // Luminous,Alpha => RGBA + trans_data[0] = raw_data[0]; + trans_data[1] = raw_data[0]; + trans_data[2] = raw_data[0]; + trans_data[3] = raw_data[1]; + break; + case 24: + // BGR => RGBA + trans_data[0] = raw_data[2]; + trans_data[1] = raw_data[1]; + trans_data[2] = raw_data[0]; + trans_data[3] = 255; + break; + case 32: + // BGRA => RGBA + trans_data[0] = raw_data[2]; + trans_data[1] = raw_data[1]; + trans_data[2] = raw_data[0]; + trans_data[3] = raw_data[3]; + break; + } + // clear the reading flag for the next pixel + read_next_pixel = 0; + } // end of reading a pixel + // convert to final format + switch( req_comp ) + { + case 1: + // RGBA => Luminance + tga_data[i*req_comp+0] = compute_y(trans_data[0],trans_data[1],trans_data[2]); + break; + case 2: + // RGBA => Luminance,Alpha + tga_data[i*req_comp+0] = compute_y(trans_data[0],trans_data[1],trans_data[2]); + tga_data[i*req_comp+1] = trans_data[3]; + break; + case 3: + // RGBA => RGB + tga_data[i*req_comp+0] = trans_data[0]; + tga_data[i*req_comp+1] = trans_data[1]; + tga_data[i*req_comp+2] = trans_data[2]; + break; + case 4: + // RGBA => RGBA + tga_data[i*req_comp+0] = trans_data[0]; + tga_data[i*req_comp+1] = trans_data[1]; + tga_data[i*req_comp+2] = trans_data[2]; + tga_data[i*req_comp+3] = trans_data[3]; + break; + } + // in case we're in RLE mode, keep counting down + --RLE_count; + } + // do I need to invert the image? + if( tga_inverted ) + { + for( j = 0; j*2 < tga_height; ++j ) + { + int index1 = j * tga_width * req_comp; + int index2 = (tga_height - 1 - j) * tga_width * req_comp; + for( i = tga_width * req_comp; i > 0; --i ) + { + unsigned char temp = tga_data[index1]; + tga_data[index1] = tga_data[index2]; + tga_data[index2] = temp; + ++index1; + ++index2; + } + } + } + // clear my palette, if I had one + if( tga_palette != NULL ) + { + free( tga_palette ); + } + // the things I do to get rid of an error message, and yet keep + // Microsoft's C compilers happy... [8^( + tga_palette_start = tga_palette_len = tga_palette_bits = + tga_x_origin = tga_y_origin = 0; + // OK, done + return tga_data; +} + +#ifndef STBI_NO_STDIO +stbi_uc *stbi_tga_load (char const *filename, int *x, int *y, int *comp, int req_comp) +{ + stbi_uc *data; + FILE *f = fopen(filename, "rb"); + if (!f) return NULL; + data = stbi_tga_load_from_file(f, x,y,comp,req_comp); + fclose(f); + return data; +} + +stbi_uc *stbi_tga_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_file(&s, f); + return tga_load(&s, x,y,comp,req_comp); +} +#endif + +stbi_uc *stbi_tga_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_mem(&s, buffer, len); + return tga_load(&s, x,y,comp,req_comp); +} + + +// ************************************************************************************************* +// Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicholas Schulz, tweaked by STB + +static int psd_test(stbi *s) +{ + if (get32(s) != 0x38425053) return 0; // "8BPS" + else return 1; +} + +#ifndef STBI_NO_STDIO +int stbi_psd_test_file(FILE *f) +{ + stbi s; + int r,n = ftell(f); + start_file(&s, f); + r = psd_test(&s); + fseek(f,n,SEEK_SET); + return r; +} +#endif + +int stbi_psd_test_memory(stbi_uc const *buffer, int len) +{ + stbi s; + start_mem(&s, buffer, len); + return psd_test(&s); +} + +static stbi_uc *psd_load(stbi *s, int *x, int *y, int *comp, int req_comp) +{ + int pixelCount; + int channelCount, compression; + int channel, i, count, len; + int w,h; + uint8 *out; + + // Check identifier + if (get32(s) != 0x38425053) // "8BPS" + return epuc("not PSD", "Corrupt PSD image"); + + // Check file type version. + if (get16(s) != 1) + return epuc("wrong version", "Unsupported version of PSD image"); + + // Skip 6 reserved bytes. + skip(s, 6 ); + + // Read the number of channels (R, G, B, A, etc). + channelCount = get16(s); + if (channelCount < 0 || channelCount > 16) + return epuc("wrong channel count", "Unsupported number of channels in PSD image"); + + // Read the rows and columns of the image. + h = get32(s); + w = get32(s); + + // Make sure the depth is 8 bits. + if (get16(s) != 8) + return epuc("unsupported bit depth", "PSD bit depth is not 8 bit"); + + // Make sure the color mode is RGB. + // Valid options are: + // 0: Bitmap + // 1: Grayscale + // 2: Indexed color + // 3: RGB color + // 4: CMYK color + // 7: Multichannel + // 8: Duotone + // 9: Lab color + if (get16(s) != 3) + return epuc("wrong color format", "PSD is not in RGB color format"); + + // Skip the Mode Data. (It's the palette for indexed color; other info for other modes.) + skip(s,get32(s) ); + + // Skip the image resources. (resolution, pen tool paths, etc) + skip(s, get32(s) ); + + // Skip the reserved data. + skip(s, get32(s) ); + + // Find out if the data is compressed. + // Known values: + // 0: no compression + // 1: RLE compressed + compression = get16(s); + if (compression > 1) + return epuc("bad compression", "PSD has an unknown compression format"); + + // Create the destination image. + out = (stbi_uc *) malloc(4 * w*h); + if (!out) return epuc("outofmem", "Out of memory"); + pixelCount = w*h; + + // Initialize the data to zero. + //memset( out, 0, pixelCount * 4 ); + + // Finally, the image data. + if (compression) { + // RLE as used by .PSD and .TIFF + // Loop until you get the number of unpacked bytes you are expecting: + // Read the next source byte into n. + // If n is between 0 and 127 inclusive, copy the next n+1 bytes literally. + // Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times. + // Else if n is 128, noop. + // Endloop + + // The RLE-compressed data is preceeded by a 2-byte data count for each row in the data, + // which we're going to just skip. + skip(s, h * channelCount * 2 ); + + // Read the RLE data by channel. + for (channel = 0; channel < 4; channel++) { + uint8 *p; + + p = out+channel; + if (channel >= channelCount) { + // Fill this channel with default data. + for (i = 0; i < pixelCount; i++) *p = (channel == 3 ? 255 : 0), p += 4; + } else { + // Read the RLE data. + count = 0; + while (count < pixelCount) { + len = get8(s); + if (len == 128) { + // No-op. + } else if (len < 128) { + // Copy next len+1 bytes literally. + len++; + count += len; + while (len) { + *p = get8(s); + p += 4; + len--; + } + } else if (len > 128) { + uint32 val; + // Next -len+1 bytes in the dest are replicated from next source byte. + // (Interpret len as a negative 8-bit int.) + len ^= 0x0FF; + len += 2; + val = get8(s); + count += len; + while (len) { + *p = val; + p += 4; + len--; + } + } + } + } + } + + } else { + // We're at the raw image data. It's each channel in order (Red, Green, Blue, Alpha, ...) + // where each channel consists of an 8-bit value for each pixel in the image. + + // Read the data by channel. + for (channel = 0; channel < 4; channel++) { + uint8 *p; + + p = out + channel; + if (channel > channelCount) { + // Fill this channel with default data. + for (i = 0; i < pixelCount; i++) *p = channel == 3 ? 255 : 0, p += 4; + } else { + // Read the data. + count = 0; + for (i = 0; i < pixelCount; i++) + *p = get8(s), p += 4; + } + } + } + + if (req_comp && req_comp != 4) { + out = convert_format(out, 4, req_comp, w, h); + if (out == NULL) return out; // convert_format frees input on failure + } + + if (comp) *comp = channelCount; + *y = h; + *x = w; + + return out; +} + +#ifndef STBI_NO_STDIO +stbi_uc *stbi_psd_load(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + stbi_uc *data; + FILE *f = fopen(filename, "rb"); + if (!f) return NULL; + data = stbi_psd_load_from_file(f, x,y,comp,req_comp); + fclose(f); + return data; +} + +stbi_uc *stbi_psd_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_file(&s, f); + return psd_load(&s, x,y,comp,req_comp); +} +#endif + +stbi_uc *stbi_psd_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_mem(&s, buffer, len); + return psd_load(&s, x,y,comp,req_comp); +} + + +// ************************************************************************************************* +// Radiance RGBE HDR loader +// originally by Nicolas Schulz +#ifndef STBI_NO_HDR +static int hdr_test(stbi *s) +{ + char *signature = "#?RADIANCE\n"; + int i; + for (i=0; signature[i]; ++i) + if (get8(s) != signature[i]) + return 0; + return 1; +} + +int stbi_hdr_test_memory(stbi_uc const *buffer, int len) +{ + stbi s; + start_mem(&s, buffer, len); + return hdr_test(&s); +} + +#ifndef STBI_NO_STDIO +int stbi_hdr_test_file(FILE *f) +{ + stbi s; + int r,n = ftell(f); + start_file(&s, f); + r = hdr_test(&s); + fseek(f,n,SEEK_SET); + return r; +} +#endif + +#define HDR_BUFLEN 1024 +static char *hdr_gettoken(stbi *z, char *buffer) +{ + int len=0; + //char *s = buffer, + char c = '\0'; + + c = get8(z); + + while (!at_eof(z) && c != '\n') { + buffer[len++] = c; + if (len == HDR_BUFLEN-1) { + // flush to end of line + while (!at_eof(z) && get8(z) != '\n') + ; + break; + } + c = get8(z); + } + + buffer[len] = 0; + return buffer; +} + +static void hdr_convert(float *output, stbi_uc *input, int req_comp) +{ + if( input[3] != 0 ) { + float f1; + // Exponent + f1 = (float) ldexp(1.0f, input[3] - (int)(128 + 8)); + if (req_comp <= 2) + output[0] = (input[0] + input[1] + input[2]) * f1 / 3; + else { + output[0] = input[0] * f1; + output[1] = input[1] * f1; + output[2] = input[2] * f1; + } + if (req_comp == 2) output[1] = 1; + if (req_comp == 4) output[3] = 1; + } else { + switch (req_comp) { + case 4: output[3] = 1; /* fallthrough */ + case 3: output[0] = output[1] = output[2] = 0; + break; + case 2: output[1] = 1; /* fallthrough */ + case 1: output[0] = 0; + break; + } + } +} + + +static float *hdr_load(stbi *s, int *x, int *y, int *comp, int req_comp) +{ + char buffer[HDR_BUFLEN]; + char *token; + int valid = 0; + int width, height; + stbi_uc *scanline; + float *hdr_data; + int len; + unsigned char count, value; + int i, j, k, c1,c2, z; + + + // Check identifier + if (strcmp(hdr_gettoken(s,buffer), "#?RADIANCE") != 0) + return epf("not HDR", "Corrupt HDR image"); + + // Parse header + while(1) { + token = hdr_gettoken(s,buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) return epf("unsupported format", "Unsupported HDR format"); + + // Parse width and height + // can't use sscanf() if we're not using stdio! + token = hdr_gettoken(s,buffer); + if (strncmp(token, "-Y ", 3)) return epf("unsupported data layout", "Unsupported HDR format"); + token += 3; + height = strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) return epf("unsupported data layout", "Unsupported HDR format"); + token += 3; + width = strtol(token, NULL, 10); + + *x = width; + *y = height; + + *comp = 3; + if (req_comp == 0) req_comp = 3; + + // Read data + hdr_data = (float *) malloc(height * width * req_comp * sizeof(float)); + + // Load image data + // image data is stored as some number of sca + if( width < 8 || width >= 32768) { + // Read flat data + for (j=0; j < height; ++j) { + for (i=0; i < width; ++i) { + stbi_uc rgbe[4]; + main_decode_loop: + getn(s, rgbe, 4); + hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp); + } + } + } else { + // Read RLE-encoded data + scanline = NULL; + + for (j = 0; j < height; ++j) { + c1 = get8(s); + c2 = get8(s); + len = get8(s); + if (c1 != 2 || c2 != 2 || (len & 0x80)) { + // not run-length encoded, so we have to actually use THIS data as a decoded + // pixel (note this can't be a valid pixel--one of RGB must be >= 128) + stbi_uc rgbe[4] = { c1,c2,len, get8(s) }; + hdr_convert(hdr_data, rgbe, req_comp); + i = 1; + j = 0; + free(scanline); + goto main_decode_loop; // yes, this is fucking insane; blame the fucking insane format + } + len <<= 8; + len |= get8(s); + if (len != width) { free(hdr_data); free(scanline); return epf("invalid decoded scanline length", "corrupt HDR"); } + if (scanline == NULL) scanline = (stbi_uc *) malloc(width * 4); + + for (k = 0; k < 4; ++k) { + i = 0; + while (i < width) { + count = get8(s); + if (count > 128) { + // Run + value = get8(s); + count -= 128; + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = value; + } else { + // Dump + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = get8(s); + } + } + } + for (i=0; i < width; ++i) + hdr_convert(hdr_data+(j*width + i)*req_comp, scanline + i*4, req_comp); + } + free(scanline); + } + + return hdr_data; +} + +static stbi_uc *hdr_load_rgbe(stbi *s, int *x, int *y, int *comp, int req_comp) +{ + char buffer[HDR_BUFLEN]; + char *token; + int valid = 0; + int width, height; + stbi_uc *scanline; + stbi_uc *rgbe_data; + int len; + unsigned char count, value; + int i, j, k, c1,c2, z; + + + // Check identifier + if (strcmp(hdr_gettoken(s,buffer), "#?RADIANCE") != 0) + return epuc("not HDR", "Corrupt HDR image"); + + // Parse header + while(1) { + token = hdr_gettoken(s,buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) return epuc("unsupported format", "Unsupported HDR format"); + + // Parse width and height + // can't use sscanf() if we're not using stdio! + token = hdr_gettoken(s,buffer); + if (strncmp(token, "-Y ", 3)) return epuc("unsupported data layout", "Unsupported HDR format"); + token += 3; + height = strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) return epuc("unsupported data layout", "Unsupported HDR format"); + token += 3; + width = strtol(token, NULL, 10); + + *x = width; + *y = height; + + // RGBE _MUST_ come out as 4 components + *comp = 4; + req_comp = 4; + + // Read data + rgbe_data = (stbi_uc *) malloc(height * width * req_comp * sizeof(stbi_uc)); + // point to the beginning + scanline = rgbe_data; + + // Load image data + // image data is stored as some number of scan lines + if( width < 8 || width >= 32768) { + // Read flat data + for (j=0; j < height; ++j) { + for (i=0; i < width; ++i) { + main_decode_loop: + //getn(rgbe, 4); + getn(s,scanline, 4); + scanline += 4; + } + } + } else { + // Read RLE-encoded data + for (j = 0; j < height; ++j) { + c1 = get8(s); + c2 = get8(s); + len = get8(s); + if (c1 != 2 || c2 != 2 || (len & 0x80)) { + // not run-length encoded, so we have to actually use THIS data as a decoded + // pixel (note this can't be a valid pixel--one of RGB must be >= 128) + scanline[0] = c1; + scanline[1] = c2; + scanline[2] = len; + scanline[3] = get8(s); + scanline += 4; + i = 1; + j = 0; + goto main_decode_loop; // yes, this is insane; blame the insane format + } + len <<= 8; + len |= get8(s); + if (len != width) { free(rgbe_data); return epuc("invalid decoded scanline length", "corrupt HDR"); } + for (k = 0; k < 4; ++k) { + i = 0; + while (i < width) { + count = get8(s); + if (count > 128) { + // Run + value = get8(s); + count -= 128; + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = value; + } else { + // Dump + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = get8(s); + } + } + } + // move the scanline on + scanline += 4 * width; + } + } + + return rgbe_data; +} + +#ifndef STBI_NO_STDIO +float *stbi_hdr_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_file(&s,f); + return hdr_load(&s,x,y,comp,req_comp); +} + +stbi_uc *stbi_hdr_load_rgbe_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_file(&s,f); + return hdr_load_rgbe(&s,x,y,comp,req_comp); +} + +stbi_uc *stbi_hdr_load_rgbe (char const *filename, int *x, int *y, int *comp, int req_comp) +{ + FILE *f = fopen(filename, "rb"); + unsigned char *result; + if (!f) return epuc("can't fopen", "Unable to open file"); + result = stbi_hdr_load_rgbe_file(f,x,y,comp,req_comp); + fclose(f); + return result; +} +#endif + +float *stbi_hdr_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_mem(&s,buffer, len); + return hdr_load(&s,x,y,comp,req_comp); +} + +stbi_uc *stbi_hdr_load_rgbe_memory(stbi_uc *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_mem(&s,buffer, len); + return hdr_load_rgbe(&s,x,y,comp,req_comp); +} + +#endif // STBI_NO_HDR + +/////////////////////// write image /////////////////////// + +#ifndef STBI_NO_WRITE + +static void write8(FILE *f, int x) { uint8 z = (uint8) x; fwrite(&z,1,1,f); } + +static void writefv(FILE *f, char *fmt, va_list v) +{ + while (*fmt) { + switch (*fmt++) { + case ' ': break; + case '1': { uint8 x = va_arg(v, int); write8(f,x); break; } + case '2': { int16 x = va_arg(v, int); write8(f,x); write8(f,x>>8); break; } + case '4': { int32 x = va_arg(v, int); write8(f,x); write8(f,x>>8); write8(f,x>>16); write8(f,x>>24); break; } + default: + assert(0); + va_end(v); + return; + } + } +} + +static void writef(FILE *f, char *fmt, ...) +{ + va_list v; + va_start(v, fmt); + writefv(f,fmt,v); + va_end(v); +} + +static void write_pixels(FILE *f, int rgb_dir, int vdir, int x, int y, int comp, void *data, int write_alpha, int scanline_pad) +{ + uint8 bg[3] = { 255, 0, 255}, px[3]; + uint32 zero = 0; + int i,j,k, j_end; + + if (vdir < 0) + j_end = -1, j = y-1; + else + j_end = y, j = 0; + + for (; j != j_end; j += vdir) { + for (i=0; i < x; ++i) { + uint8 *d = (uint8 *) data + (j*x+i)*comp; + if (write_alpha < 0) + fwrite(&d[comp-1], 1, 1, f); + switch (comp) { + case 1: + case 2: writef(f, "111", d[0],d[0],d[0]); + break; + case 4: + if (!write_alpha) { + for (k=0; k < 3; ++k) + px[k] = bg[k] + ((d[k] - bg[k]) * d[3])/255; + writef(f, "111", px[1-rgb_dir],px[1],px[1+rgb_dir]); + break; + } + /* FALLTHROUGH */ + case 3: + writef(f, "111", d[1-rgb_dir],d[1],d[1+rgb_dir]); + break; + } + if (write_alpha > 0) + fwrite(&d[comp-1], 1, 1, f); + } + fwrite(&zero,scanline_pad,1,f); + } +} + +static int outfile(char const *filename, int rgb_dir, int vdir, int x, int y, int comp, void *data, int alpha, int pad, char *fmt, ...) +{ + FILE *f = fopen(filename, "wb"); + if (f) { + va_list v; + va_start(v, fmt); + writefv(f, fmt, v); + va_end(v); + write_pixels(f,rgb_dir,vdir,x,y,comp,data,alpha,pad); + fclose(f); + } + return f != NULL; +} + +int stbi_write_bmp(char const *filename, int x, int y, int comp, void *data) +{ + int pad = (-x*3) & 3; + return outfile(filename,-1,-1,x,y,comp,data,0,pad, + "11 4 22 4" "4 44 22 444444", + 'B', 'M', 14+40+(x*3+pad)*y, 0,0, 14+40, // file header + 40, x,y, 1,24, 0,0,0,0,0,0); // bitmap header +} + +int stbi_write_tga(char const *filename, int x, int y, int comp, void *data) +{ + int has_alpha = !(comp & 1); + return outfile(filename, -1,-1, x, y, comp, data, has_alpha, 0, + "111 221 2222 11", 0,0,2, 0,0,0, 0,0,x,y, 24+8*has_alpha, 8*has_alpha); +} + +// any other image formats that do interleaved rgb data? +// PNG: requires adler32,crc32 -- significant amount of code +// PSD: no, channels output separately +// TIFF: no, stripwise-interleaved... i think + +#endif // STBI_NO_WRITE + +// add in my DDS loading support +#ifndef STBI_NO_DDS +#include "stbi_DDS_aug_c.h" +#endif diff --git a/3rdparty/libprojectm/Renderer/SOIL/stb_image_aug.h b/3rdparty/libprojectm/Renderer/SOIL/stb_image_aug.h new file mode 100644 index 000000000..52ea75ca2 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/SOIL/stb_image_aug.h @@ -0,0 +1,354 @@ +/* stbi-1.16 - public domain JPEG/PNG reader - http://nothings.org/stb_image.c + when you control the images you're loading + + QUICK NOTES: + Primarily of interest to game developers and other people who can + avoid problematic images and only need the trivial interface + + JPEG baseline (no JPEG progressive, no oddball channel decimations) + PNG non-interlaced + BMP non-1bpp, non-RLE + TGA (not sure what subset, if a subset) + PSD (composited view only, no extra channels) + HDR (radiance rgbE format) + writes BMP,TGA (define STBI_NO_WRITE to remove code) + decoded from memory or through stdio FILE (define STBI_NO_STDIO to remove code) + supports installable dequantizing-IDCT, YCbCr-to-RGB conversion (define STBI_SIMD) + + TODO: + stbi_info_* + + history: + 1.16 major bugfix - convert_format converted one too many pixels + 1.15 initialize some fields for thread safety + 1.14 fix threadsafe conversion bug; header-file-only version (#define STBI_HEADER_FILE_ONLY before including) + 1.13 threadsafe + 1.12 const qualifiers in the API + 1.11 Support installable IDCT, colorspace conversion routines + 1.10 Fixes for 64-bit (don't use "unsigned long") + optimized upsampling by Fabian "ryg" Giesen + 1.09 Fix format-conversion for PSD code (bad global variables!) + 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz + 1.07 attempt to fix C++ warning/errors again + 1.06 attempt to fix C++ warning/errors again + 1.05 fix TGA loading to return correct *comp and use good luminance calc + 1.04 default float alpha is 1, not 255; use 'void *' for stbi_image_free + 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR + 1.02 support for (subset of) HDR files, float interface for preferred access to them + 1.01 fix bug: possible bug in handling right-side up bmps... not sure + fix bug: the stbi_bmp_load() and stbi_tga_load() functions didn't work at all + 1.00 interface to zlib that skips zlib header + 0.99 correct handling of alpha in palette + 0.98 TGA loader by lonesock; dynamically add loaders (untested) + 0.97 jpeg errors on too large a file; also catch another malloc failure + 0.96 fix detection of invalid v value - particleman@mollyrocket forum + 0.95 during header scan, seek to markers in case of padding + 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same + 0.93 handle jpegtran output; verbose errors + 0.92 read 4,8,16,24,32-bit BMP files of several formats + 0.91 output 24-bit Windows 3.0 BMP files + 0.90 fix a few more warnings; bump version number to approach 1.0 + 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd + 0.60 fix compiling as c++ + 0.59 fix warnings: merge Dave Moore's -Wall fixes + 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian + 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but less + than 16 available + 0.56 fix bug: zlib uncompressed mode len vs. nlen + 0.55 fix bug: restart_interval not initialized to 0 + 0.54 allow NULL for 'int *comp' + 0.53 fix bug in png 3->4; speedup png decoding + 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments + 0.51 obey req_comp requests, 1-component jpegs return as 1-component, + on 'test' only check type, not whether we support this variant +*/ + +#ifndef HEADER_STB_IMAGE_AUGMENTED +#define HEADER_STB_IMAGE_AUGMENTED + +//// begin header file //////////////////////////////////////////////////// +// +// Limitations: +// - no progressive/interlaced support (jpeg, png) +// - 8-bit samples only (jpeg, png) +// - not threadsafe +// - channel subsampling of at most 2 in each dimension (jpeg) +// - no delayed line count (jpeg) -- IJG doesn't support either +// +// Basic usage (see HDR discussion below): +// int x,y,n; +// unsigned char *data = stbi_load(filename, &x, &y, &n, 0); +// // ... process data if not NULL ... +// // ... x = width, y = height, n = # 8-bit components per pixel ... +// // ... replace '0' with '1'..'4' to force that many components per pixel +// stbi_image_free(data) +// +// Standard parameters: +// int *x -- outputs image width in pixels +// int *y -- outputs image height in pixels +// int *comp -- outputs # of image components in image file +// int req_comp -- if non-zero, # of image components requested in result +// +// The return value from an image loader is an 'unsigned char *' which points +// to the pixel data. The pixel data consists of *y scanlines of *x pixels, +// with each pixel consisting of N interleaved 8-bit components; the first +// pixel pointed to is top-left-most in the image. There is no padding between +// image scanlines or between pixels, regardless of format. The number of +// components N is 'req_comp' if req_comp is non-zero, or *comp otherwise. +// If req_comp is non-zero, *comp has the number of components that _would_ +// have been output otherwise. E.g. if you set req_comp to 4, you will always +// get RGBA output, but you can check *comp to easily see if it's opaque. +// +// An output image with N components has the following components interleaved +// in this order in each pixel: +// +// N=#comp components +// 1 grey +// 2 grey, alpha +// 3 red, green, blue +// 4 red, green, blue, alpha +// +// If image loading fails for any reason, the return value will be NULL, +// and *x, *y, *comp will be unchanged. The function stbi_failure_reason() +// can be queried for an extremely brief, end-user unfriendly explanation +// of why the load failed. Define STBI_NO_FAILURE_STRINGS to avoid +// compiling these strings at all, and STBI_FAILURE_USERMSG to get slightly +// more user-friendly ones. +// +// Paletted PNG and BMP images are automatically depalettized. +// +// +// =========================================================================== +// +// HDR image support (disable by defining STBI_NO_HDR) +// +// stb_image now supports loading HDR images in general, and currently +// the Radiance .HDR file format, although the support is provided +// generically. You can still load any file through the existing interface; +// if you attempt to load an HDR file, it will be automatically remapped to +// LDR, assuming gamma 2.2 and an arbitrary scale factor defaulting to 1; +// both of these constants can be reconfigured through this interface: +// +// stbi_hdr_to_ldr_gamma(2.2f); +// stbi_hdr_to_ldr_scale(1.0f); +// +// (note, do not use _inverse_ constants; stbi_image will invert them +// appropriately). +// +// Additionally, there is a new, parallel interface for loading files as +// (linear) floats to preserve the full dynamic range: +// +// float *data = stbi_loadf(filename, &x, &y, &n, 0); +// +// If you load LDR images through this interface, those images will +// be promoted to floating point values, run through the inverse of +// constants corresponding to the above: +// +// stbi_ldr_to_hdr_scale(1.0f); +// stbi_ldr_to_hdr_gamma(2.2f); +// +// Finally, given a filename (or an open file or memory block--see header +// file for details) containing image data, you can query for the "most +// appropriate" interface to use (that is, whether the image is HDR or +// not), using: +// +// stbi_is_hdr(char *filename); + +#ifndef STBI_NO_STDIO +#include +#endif + +#define STBI_VERSION 1 + +enum +{ + STBI_default = 0, // only used for req_comp + + STBI_grey = 1, + STBI_grey_alpha = 2, + STBI_rgb = 3, + STBI_rgb_alpha = 4, +}; + +typedef unsigned char stbi_uc; + +#ifdef __cplusplus +extern "C" { +#endif + +// WRITING API + +#if !defined(STBI_NO_WRITE) && !defined(STBI_NO_STDIO) +// write a BMP/TGA file given tightly packed 'comp' channels (no padding, nor bmp-stride-padding) +// (you must include the appropriate extension in the filename). +// returns TRUE on success, FALSE if couldn't open file, error writing file +extern int stbi_write_bmp (char const *filename, int x, int y, int comp, void *data); +extern int stbi_write_tga (char const *filename, int x, int y, int comp, void *data); +#endif + +// PRIMARY API - works on images of any type + +// load image by filename, open file, or memory buffer +#ifndef STBI_NO_STDIO +extern stbi_uc *stbi_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +extern int stbi_info_from_file (FILE *f, int *x, int *y, int *comp); +#endif +extern stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +// for stbi_load_from_file, file pointer is left pointing immediately after image + +#ifndef STBI_NO_HDR +#ifndef STBI_NO_STDIO +extern float *stbi_loadf (char const *filename, int *x, int *y, int *comp, int req_comp); +extern float *stbi_loadf_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +#endif +extern float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); + +extern void stbi_hdr_to_ldr_gamma(float gamma); +extern void stbi_hdr_to_ldr_scale(float scale); + +extern void stbi_ldr_to_hdr_gamma(float gamma); +extern void stbi_ldr_to_hdr_scale(float scale); + +#endif // STBI_NO_HDR + +// get a VERY brief reason for failure +// NOT THREADSAFE +extern char *stbi_failure_reason (void); + +// free the loaded image -- this is just free() +extern void stbi_image_free (void *retval_from_stbi_load); + +// get image dimensions & components without fully decoding +extern int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); +extern int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len); +#ifndef STBI_NO_STDIO +extern int stbi_info (char const *filename, int *x, int *y, int *comp); +extern int stbi_is_hdr (char const *filename); +extern int stbi_is_hdr_from_file(FILE *f); +#endif + +// ZLIB client - used by PNG, available for other purposes + +extern char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen); +extern char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen); +extern int stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + +extern char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen); +extern int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + +// TYPE-SPECIFIC ACCESS + +// is it a jpeg? +extern int stbi_jpeg_test_memory (stbi_uc const *buffer, int len); +extern stbi_uc *stbi_jpeg_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +extern int stbi_jpeg_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); + +#ifndef STBI_NO_STDIO +extern stbi_uc *stbi_jpeg_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern int stbi_jpeg_test_file (FILE *f); +extern stbi_uc *stbi_jpeg_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); + +extern int stbi_jpeg_info (char const *filename, int *x, int *y, int *comp); +extern int stbi_jpeg_info_from_file (FILE *f, int *x, int *y, int *comp); +#endif + +// is it a png? +extern int stbi_png_test_memory (stbi_uc const *buffer, int len); +extern stbi_uc *stbi_png_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +extern int stbi_png_info_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp); + +#ifndef STBI_NO_STDIO +extern stbi_uc *stbi_png_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern int stbi_png_info (char const *filename, int *x, int *y, int *comp); +extern int stbi_png_test_file (FILE *f); +extern stbi_uc *stbi_png_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +extern int stbi_png_info_from_file (FILE *f, int *x, int *y, int *comp); +#endif + +// is it a bmp? +extern int stbi_bmp_test_memory (stbi_uc const *buffer, int len); + +extern stbi_uc *stbi_bmp_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_bmp_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +#ifndef STBI_NO_STDIO +extern int stbi_bmp_test_file (FILE *f); +extern stbi_uc *stbi_bmp_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +#endif + +// is it a tga? +extern int stbi_tga_test_memory (stbi_uc const *buffer, int len); + +extern stbi_uc *stbi_tga_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_tga_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +#ifndef STBI_NO_STDIO +extern int stbi_tga_test_file (FILE *f); +extern stbi_uc *stbi_tga_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +#endif + +// is it a psd? +extern int stbi_psd_test_memory (stbi_uc const *buffer, int len); + +extern stbi_uc *stbi_psd_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_psd_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +#ifndef STBI_NO_STDIO +extern int stbi_psd_test_file (FILE *f); +extern stbi_uc *stbi_psd_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +#endif + +// is it an hdr? +extern int stbi_hdr_test_memory (stbi_uc const *buffer, int len); + +extern float * stbi_hdr_load (char const *filename, int *x, int *y, int *comp, int req_comp); +extern float * stbi_hdr_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_hdr_load_rgbe (char const *filename, int *x, int *y, int *comp, int req_comp); +extern float * stbi_hdr_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +#ifndef STBI_NO_STDIO +extern int stbi_hdr_test_file (FILE *f); +extern float * stbi_hdr_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_hdr_load_rgbe_file (FILE *f, int *x, int *y, int *comp, int req_comp); +#endif + +// define new loaders +typedef struct +{ + int (*test_memory)(stbi_uc const *buffer, int len); + stbi_uc * (*load_from_memory)(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); + #ifndef STBI_NO_STDIO + int (*test_file)(FILE *f); + stbi_uc * (*load_from_file)(FILE *f, int *x, int *y, int *comp, int req_comp); + #endif +} stbi_loader; + +// register a loader by filling out the above structure (you must defined ALL functions) +// returns 1 if added or already added, 0 if not added (too many loaders) +// NOT THREADSAFE +extern int stbi_register_loader(stbi_loader *loader); + +// define faster low-level operations (typically SIMD support) +#if STBI_SIMD +typedef void (*stbi_idct_8x8)(uint8 *out, int out_stride, short data[64], unsigned short *dequantize); +// compute an integer IDCT on "input" +// input[x] = data[x] * dequantize[x] +// write results to 'out': 64 samples, each run of 8 spaced by 'out_stride' +// CLAMP results to 0..255 +typedef void (*stbi_YCbCr_to_RGB_run)(uint8 *output, uint8 const *y, uint8 const *cb, uint8 const *cr, int count, int step); +// compute a conversion from YCbCr to RGB +// 'count' pixels +// write pixels to 'output'; each pixel is 'step' bytes (either 3 or 4; if 4, write '255' as 4th), order R,G,B +// y: Y input channel +// cb: Cb input channel; scale/biased to be 0..255 +// cr: Cr input channel; scale/biased to be 0..255 + +extern void stbi_install_idct(stbi_idct_8x8 func); +extern void stbi_install_YCbCr_to_RGB(stbi_YCbCr_to_RGB_run func); +#endif // STBI_SIMD + +#ifdef __cplusplus +} +#endif + +// +// +//// end header file ///////////////////////////////////////////////////// +#endif // STBI_INCLUDE_STB_IMAGE_H diff --git a/3rdparty/libprojectm/Renderer/SOIL/stbi_DDS_aug.h b/3rdparty/libprojectm/Renderer/SOIL/stbi_DDS_aug.h new file mode 100644 index 000000000..7317d63b7 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/SOIL/stbi_DDS_aug.h @@ -0,0 +1,21 @@ +/* + adding DDS loading support to stbi +*/ + +#ifndef HEADER_STB_IMAGE_DDS_AUGMENTATION +#define HEADER_STB_IMAGE_DDS_AUGMENTATION + +// is it a DDS file? +extern int stbi_dds_test_memory (stbi_uc const *buffer, int len); + +extern stbi_uc *stbi_dds_load (char *filename, int *x, int *y, int *comp, int req_comp); +extern stbi_uc *stbi_dds_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +#ifndef STBI_NO_STDIO +extern int stbi_dds_test_file (FILE *f); +extern stbi_uc *stbi_dds_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +#endif + +// +// +//// end header file ///////////////////////////////////////////////////// +#endif // HEADER_STB_IMAGE_DDS_AUGMENTATION diff --git a/3rdparty/libprojectm/Renderer/SOIL/stbi_DDS_aug_c.h b/3rdparty/libprojectm/Renderer/SOIL/stbi_DDS_aug_c.h new file mode 100644 index 000000000..683d1cf0b --- /dev/null +++ b/3rdparty/libprojectm/Renderer/SOIL/stbi_DDS_aug_c.h @@ -0,0 +1,511 @@ + +/// DDS file support, does decoding, _not_ direct uploading +/// (use SOIL for that ;-) + +/// A bunch of DirectDraw Surface structures and flags +typedef struct { + unsigned int dwMagic; + unsigned int dwSize; + unsigned int dwFlags; + unsigned int dwHeight; + unsigned int dwWidth; + unsigned int dwPitchOrLinearSize; + unsigned int dwDepth; + unsigned int dwMipMapCount; + unsigned int dwReserved1[ 11 ]; + + // DDPIXELFORMAT + struct { + unsigned int dwSize; + unsigned int dwFlags; + unsigned int dwFourCC; + unsigned int dwRGBBitCount; + unsigned int dwRBitMask; + unsigned int dwGBitMask; + unsigned int dwBBitMask; + unsigned int dwAlphaBitMask; + } sPixelFormat; + + // DDCAPS2 + struct { + unsigned int dwCaps1; + unsigned int dwCaps2; + unsigned int dwDDSX; + unsigned int dwReserved; + } sCaps; + unsigned int dwReserved2; +} DDS_header ; + +// the following constants were copied directly off the MSDN website + +// The dwFlags member of the original DDSURFACEDESC2 structure +// can be set to one or more of the following values. +#define DDSD_CAPS 0x00000001 +#define DDSD_HEIGHT 0x00000002 +#define DDSD_WIDTH 0x00000004 +#define DDSD_PITCH 0x00000008 +#define DDSD_PIXELFORMAT 0x00001000 +#define DDSD_MIPMAPCOUNT 0x00020000 +#define DDSD_LINEARSIZE 0x00080000 +#define DDSD_DEPTH 0x00800000 + +// DirectDraw Pixel Format +#define DDPF_ALPHAPIXELS 0x00000001 +#define DDPF_FOURCC 0x00000004 +#define DDPF_RGB 0x00000040 + +// The dwCaps1 member of the DDSCAPS2 structure can be +// set to one or more of the following values. +#define DDSCAPS_COMPLEX 0x00000008 +#define DDSCAPS_TEXTURE 0x00001000 +#define DDSCAPS_MIPMAP 0x00400000 + +// The dwCaps2 member of the DDSCAPS2 structure can be +// set to one or more of the following values. +#define DDSCAPS2_CUBEMAP 0x00000200 +#define DDSCAPS2_CUBEMAP_POSITIVEX 0x00000400 +#define DDSCAPS2_CUBEMAP_NEGATIVEX 0x00000800 +#define DDSCAPS2_CUBEMAP_POSITIVEY 0x00001000 +#define DDSCAPS2_CUBEMAP_NEGATIVEY 0x00002000 +#define DDSCAPS2_CUBEMAP_POSITIVEZ 0x00004000 +#define DDSCAPS2_CUBEMAP_NEGATIVEZ 0x00008000 +#define DDSCAPS2_VOLUME 0x00200000 + +static int dds_test(stbi *s) +{ + // check the magic number + if (get8(s) != 'D') return 0; + if (get8(s) != 'D') return 0; + if (get8(s) != 'S') return 0; + if (get8(s) != ' ') return 0; + // check header size + if (get32le(s) != 124) return 0; + return 1; +} +#ifndef STBI_NO_STDIO +int stbi_dds_test_file (FILE *f) +{ + stbi s; + int r,n = ftell(f); + start_file(&s,f); + r = dds_test(&s); + fseek(f,n,SEEK_SET); + return r; +} +#endif + +int stbi_dds_test_memory (stbi_uc const *buffer, int len) +{ + stbi s; + start_mem(&s,buffer, len); + return dds_test(&s); +} + +// helper functions +int stbi_convert_bit_range( int c, int from_bits, int to_bits ) +{ + int b = (1 << (from_bits - 1)) + c * ((1 << to_bits) - 1); + return (b + (b >> from_bits)) >> from_bits; +} +void stbi_rgb_888_from_565( unsigned int c, int *r, int *g, int *b ) +{ + *r = stbi_convert_bit_range( (c >> 11) & 31, 5, 8 ); + *g = stbi_convert_bit_range( (c >> 05) & 63, 6, 8 ); + *b = stbi_convert_bit_range( (c >> 00) & 31, 5, 8 ); +} +void stbi_decode_DXT1_block( + unsigned char uncompressed[16*4], + unsigned char compressed[8] ) +{ + int next_bit = 4*8; + int i, r, g, b; + int c0, c1; + unsigned char decode_colors[4*4]; + // find the 2 primary colors + c0 = compressed[0] + (compressed[1] << 8); + c1 = compressed[2] + (compressed[3] << 8); + stbi_rgb_888_from_565( c0, &r, &g, &b ); + decode_colors[0] = r; + decode_colors[1] = g; + decode_colors[2] = b; + decode_colors[3] = 255; + stbi_rgb_888_from_565( c1, &r, &g, &b ); + decode_colors[4] = r; + decode_colors[5] = g; + decode_colors[6] = b; + decode_colors[7] = 255; + if( c0 > c1 ) + { + // no alpha, 2 interpolated colors + decode_colors[8] = (2*decode_colors[0] + decode_colors[4]) / 3; + decode_colors[9] = (2*decode_colors[1] + decode_colors[5]) / 3; + decode_colors[10] = (2*decode_colors[2] + decode_colors[6]) / 3; + decode_colors[11] = 255; + decode_colors[12] = (decode_colors[0] + 2*decode_colors[4]) / 3; + decode_colors[13] = (decode_colors[1] + 2*decode_colors[5]) / 3; + decode_colors[14] = (decode_colors[2] + 2*decode_colors[6]) / 3; + decode_colors[15] = 255; + } else + { + // 1 interpolated color, alpha + decode_colors[8] = (decode_colors[0] + decode_colors[4]) / 2; + decode_colors[9] = (decode_colors[1] + decode_colors[5]) / 2; + decode_colors[10] = (decode_colors[2] + decode_colors[6]) / 2; + decode_colors[11] = 255; + decode_colors[12] = 0; + decode_colors[13] = 0; + decode_colors[14] = 0; + decode_colors[15] = 0; + } + // decode the block + for( i = 0; i < 16*4; i += 4 ) + { + int idx = ((compressed[next_bit>>3] >> (next_bit & 7)) & 3) * 4; + next_bit += 2; + uncompressed[i+0] = decode_colors[idx+0]; + uncompressed[i+1] = decode_colors[idx+1]; + uncompressed[i+2] = decode_colors[idx+2]; + uncompressed[i+3] = decode_colors[idx+3]; + } + // done +} +void stbi_decode_DXT23_alpha_block( + unsigned char uncompressed[16*4], + unsigned char compressed[8] ) +{ + int i, next_bit = 0; + // each alpha value gets 4 bits + for( i = 3; i < 16*4; i += 4 ) + { + uncompressed[i] = stbi_convert_bit_range( + (compressed[next_bit>>3] >> (next_bit&7)) & 15, + 4, 8 ); + next_bit += 4; + } +} +void stbi_decode_DXT45_alpha_block( + unsigned char uncompressed[16*4], + unsigned char compressed[8] ) +{ + int i, next_bit = 8*2; + unsigned char decode_alpha[8]; + // each alpha value gets 3 bits, and the 1st 2 bytes are the range + decode_alpha[0] = compressed[0]; + decode_alpha[1] = compressed[1]; + if( decode_alpha[0] > decode_alpha[1] ) + { + // 6 step intermediate + decode_alpha[2] = (6*decode_alpha[0] + 1*decode_alpha[1]) / 7; + decode_alpha[3] = (5*decode_alpha[0] + 2*decode_alpha[1]) / 7; + decode_alpha[4] = (4*decode_alpha[0] + 3*decode_alpha[1]) / 7; + decode_alpha[5] = (3*decode_alpha[0] + 4*decode_alpha[1]) / 7; + decode_alpha[6] = (2*decode_alpha[0] + 5*decode_alpha[1]) / 7; + decode_alpha[7] = (1*decode_alpha[0] + 6*decode_alpha[1]) / 7; + } else + { + // 4 step intermediate, pluss full and none + decode_alpha[2] = (4*decode_alpha[0] + 1*decode_alpha[1]) / 5; + decode_alpha[3] = (3*decode_alpha[0] + 2*decode_alpha[1]) / 5; + decode_alpha[4] = (2*decode_alpha[0] + 3*decode_alpha[1]) / 5; + decode_alpha[5] = (1*decode_alpha[0] + 4*decode_alpha[1]) / 5; + decode_alpha[6] = 0; + decode_alpha[7] = 255; + } + for( i = 3; i < 16*4; i += 4 ) + { + int idx = 0, bit; + bit = (compressed[next_bit>>3] >> (next_bit&7)) & 1; + idx += bit << 0; + ++next_bit; + bit = (compressed[next_bit>>3] >> (next_bit&7)) & 1; + idx += bit << 1; + ++next_bit; + bit = (compressed[next_bit>>3] >> (next_bit&7)) & 1; + idx += bit << 2; + ++next_bit; + uncompressed[i] = decode_alpha[idx & 7]; + } + // done +} +void stbi_decode_DXT_color_block( + unsigned char uncompressed[16*4], + unsigned char compressed[8] ) +{ + int next_bit = 4*8; + int i, r, g, b; + int c0, c1; + unsigned char decode_colors[4*3]; + // find the 2 primary colors + c0 = compressed[0] + (compressed[1] << 8); + c1 = compressed[2] + (compressed[3] << 8); + stbi_rgb_888_from_565( c0, &r, &g, &b ); + decode_colors[0] = r; + decode_colors[1] = g; + decode_colors[2] = b; + stbi_rgb_888_from_565( c1, &r, &g, &b ); + decode_colors[3] = r; + decode_colors[4] = g; + decode_colors[5] = b; + // Like DXT1, but no choicees: + // no alpha, 2 interpolated colors + decode_colors[6] = (2*decode_colors[0] + decode_colors[3]) / 3; + decode_colors[7] = (2*decode_colors[1] + decode_colors[4]) / 3; + decode_colors[8] = (2*decode_colors[2] + decode_colors[5]) / 3; + decode_colors[9] = (decode_colors[0] + 2*decode_colors[3]) / 3; + decode_colors[10] = (decode_colors[1] + 2*decode_colors[4]) / 3; + decode_colors[11] = (decode_colors[2] + 2*decode_colors[5]) / 3; + // decode the block + for( i = 0; i < 16*4; i += 4 ) + { + int idx = ((compressed[next_bit>>3] >> (next_bit & 7)) & 3) * 3; + next_bit += 2; + uncompressed[i+0] = decode_colors[idx+0]; + uncompressed[i+1] = decode_colors[idx+1]; + uncompressed[i+2] = decode_colors[idx+2]; + } + // done +} +static stbi_uc *dds_load(stbi *s, int *x, int *y, int *comp, int req_comp) +{ + // all variables go up front + stbi_uc *dds_data = NULL; + stbi_uc block[16*4]; + stbi_uc compressed[8]; + int flags, DXT_family; + int has_alpha, has_mipmap; + int is_compressed, cubemap_faces; + int block_pitch, num_blocks; + DDS_header header; + int i, sz, cf; + // load the header + if( sizeof( DDS_header ) != 128 ) + { + return NULL; + } + getn( s, (stbi_uc*)(&header), 128 ); + // and do some checking + if( header.dwMagic != (('D' << 0) | ('D' << 8) | ('S' << 16) | (' ' << 24)) ) return NULL; + if( header.dwSize != 124 ) return NULL; + flags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT; + if( (header.dwFlags & flags) != flags ) return NULL; + /* According to the MSDN spec, the dwFlags should contain + DDSD_LINEARSIZE if it's compressed, or DDSD_PITCH if + uncompressed. Some DDS writers do not conform to the + spec, so I need to make my reader more tolerant */ + if( header.sPixelFormat.dwSize != 32 ) return NULL; + flags = DDPF_FOURCC | DDPF_RGB; + if( (header.sPixelFormat.dwFlags & flags) == 0 ) return NULL; + if( (header.sCaps.dwCaps1 & DDSCAPS_TEXTURE) == 0 ) return NULL; + // get the image data + s->img_x = header.dwWidth; + s->img_y = header.dwHeight; + s->img_n = 4; + is_compressed = (header.sPixelFormat.dwFlags & DDPF_FOURCC) / DDPF_FOURCC; + has_alpha = (header.sPixelFormat.dwFlags & DDPF_ALPHAPIXELS) / DDPF_ALPHAPIXELS; + has_mipmap = (header.sCaps.dwCaps1 & DDSCAPS_MIPMAP) && (header.dwMipMapCount > 1); + cubemap_faces = (header.sCaps.dwCaps2 & DDSCAPS2_CUBEMAP) / DDSCAPS2_CUBEMAP; + /* I need cubemaps to have square faces */ + cubemap_faces &= (s->img_x == s->img_y); + cubemap_faces *= 5; + cubemap_faces += 1; + block_pitch = (s->img_x+3) >> 2; + num_blocks = block_pitch * ((s->img_y+3) >> 2); + /* let the user know what's going on */ + *x = s->img_x; + *y = s->img_y; + *comp = s->img_n; + /* is this uncompressed? */ + if( is_compressed ) + { + /* compressed */ + // note: header.sPixelFormat.dwFourCC is something like (('D'<<0)|('X'<<8)|('T'<<16)|('1'<<24)) + DXT_family = 1 + (header.sPixelFormat.dwFourCC >> 24) - '1'; + if( (DXT_family < 1) || (DXT_family > 5) ) return NULL; + /* check the expected size...oops, nevermind... + those non-compliant writers leave + dwPitchOrLinearSize == 0 */ + // passed all the tests, get the RAM for decoding + sz = (s->img_x)*(s->img_y)*4*cubemap_faces; + dds_data = (unsigned char*)malloc( sz ); + /* do this once for each face */ + for( cf = 0; cf < cubemap_faces; ++ cf ) + { + // now read and decode all the blocks + for( i = 0; i < num_blocks; ++i ) + { + // where are we? + int bx, by, bw=4, bh=4; + int ref_x = 4 * (i % block_pitch); + int ref_y = 4 * (i / block_pitch); + // get the next block's worth of compressed data, and decompress it + if( DXT_family == 1 ) + { + // DXT1 + getn( s, compressed, 8 ); + stbi_decode_DXT1_block( block, compressed ); + } else if( DXT_family < 4 ) + { + // DXT2/3 + getn( s, compressed, 8 ); + stbi_decode_DXT23_alpha_block ( block, compressed ); + getn( s, compressed, 8 ); + stbi_decode_DXT_color_block ( block, compressed ); + } else + { + // DXT4/5 + getn( s, compressed, 8 ); + stbi_decode_DXT45_alpha_block ( block, compressed ); + getn( s, compressed, 8 ); + stbi_decode_DXT_color_block ( block, compressed ); + } + // is this a partial block? + if( ref_x + 4 > s->img_x ) + { + bw = s->img_x - ref_x; + } + if( ref_y + 4 > s->img_y ) + { + bh = s->img_y - ref_y; + } + // now drop our decompressed data into the buffer + for( by = 0; by < bh; ++by ) + { + int idx = 4*((ref_y+by+cf*s->img_x)*s->img_x + ref_x); + for( bx = 0; bx < bw*4; ++bx ) + { + + dds_data[idx+bx] = block[by*16+bx]; + } + } + } + /* done reading and decoding the main image... + skip MIPmaps if present */ + if( has_mipmap ) + { + int block_size = 16; + if( DXT_family == 1 ) + { + block_size = 8; + } + for( i = 1; i < header.dwMipMapCount; ++i ) + { + int mx = s->img_x >> (i + 2); + int my = s->img_y >> (i + 2); + if( mx < 1 ) + { + mx = 1; + } + if( my < 1 ) + { + my = 1; + } + skip( s, mx*my*block_size ); + } + } + }/* per cubemap face */ + } else + { + /* uncompressed */ + DXT_family = 0; + s->img_n = 3; + if( has_alpha ) + { + s->img_n = 4; + } + *comp = s->img_n; + sz = s->img_x*s->img_y*s->img_n*cubemap_faces; + dds_data = (unsigned char*)malloc( sz ); + /* do this once for each face */ + for( cf = 0; cf < cubemap_faces; ++ cf ) + { + /* read the main image for this face */ + getn( s, &dds_data[cf*s->img_x*s->img_y*s->img_n], s->img_x*s->img_y*s->img_n ); + /* done reading and decoding the main image... + skip MIPmaps if present */ + if( has_mipmap ) + { + for( i = 1; i < header.dwMipMapCount; ++i ) + { + int mx = s->img_x >> i; + int my = s->img_y >> i; + if( mx < 1 ) + { + mx = 1; + } + if( my < 1 ) + { + my = 1; + } + skip( s, mx*my*s->img_n ); + } + } + } + /* data was BGR, I need it RGB */ + for( i = 0; i < sz; i += s->img_n ) + { + unsigned char temp = dds_data[i]; + dds_data[i] = dds_data[i+2]; + dds_data[i+2] = temp; + } + } + /* finished decompressing into RGBA, + adjust the y size if we have a cubemap + note: sz is already up to date */ + s->img_y *= cubemap_faces; + *y = s->img_y; + // did the user want something else, or + // see if all the alpha values are 255 (i.e. no transparency) + has_alpha = 0; + if( s->img_n == 4) + { + for( i = 3; (i < sz) && (has_alpha == 0); i += 4 ) + { + has_alpha |= (dds_data[i] < 255); + } + } + if( (req_comp <= 4) && (req_comp >= 1) ) + { + // user has some requirements, meet them + if( req_comp != s->img_n ) + { + dds_data = convert_format( dds_data, s->img_n, req_comp, s->img_x, s->img_y ); + *comp = s->img_n; + } + } else + { + // user had no requirements, only drop to RGB is no alpha + if( (has_alpha == 0) && (s->img_n == 4) ) + { + dds_data = convert_format( dds_data, 4, 3, s->img_x, s->img_y ); + *comp = 3; + } + } + // OK, done + return dds_data; +} + +#ifndef STBI_NO_STDIO +stbi_uc *stbi_dds_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_file(&s,f); + return dds_load(&s,x,y,comp,req_comp); +} + +stbi_uc *stbi_dds_load (char *filename, int *x, int *y, int *comp, int req_comp) +{ + stbi_uc *data; + FILE *f = fopen(filename, "rb"); + if (!f) return NULL; + data = stbi_dds_load_from_file(f,x,y,comp,req_comp); + fclose(f); + return data; +} +#endif + +stbi_uc *stbi_dds_load_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi s; + start_mem(&s,buffer, len); + return dds_load(&s,x,y,comp,req_comp); +} diff --git a/3rdparty/libprojectm/Renderer/Shader.cpp b/3rdparty/libprojectm/Renderer/Shader.cpp new file mode 100644 index 000000000..1ffb11926 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/Shader.cpp @@ -0,0 +1,12 @@ +/* + * Shader.cpp + * + * Created on: Jun 29, 2008 + * Author: pete + */ + +#include "Shader.hpp" + +Shader::Shader() + : enabled(false) + {} diff --git a/3rdparty/libprojectm/Renderer/Shader.hpp b/3rdparty/libprojectm/Renderer/Shader.hpp new file mode 100644 index 000000000..beecb79e9 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/Shader.hpp @@ -0,0 +1,28 @@ +/* + * Shader.hpp + * + * Created on: Jun 29, 2008 + * Author: pete + */ + +#ifndef SHADER_HPP_ +#define SHADER_HPP_ + +#include +#include +#include "UserTexture.hpp" + +class Shader +{ +public: + + std::map textures; + + bool enabled; + + std::string programSource; + + Shader(); +}; + +#endif /* SHADER_HPP_ */ diff --git a/3rdparty/libprojectm/Renderer/ShaderEngine.cpp b/3rdparty/libprojectm/Renderer/ShaderEngine.cpp new file mode 100644 index 000000000..5a2babc7b --- /dev/null +++ b/3rdparty/libprojectm/Renderer/ShaderEngine.cpp @@ -0,0 +1,696 @@ +/* + * ShaderEngine.cpp + * + * Created on: Jul 18, 2008 + * Author: pete + */ +#include +#include "PerlinNoise.hpp" +#include "ShaderEngine.hpp" +#include "BeatDetect.hpp" + +ShaderEngine::ShaderEngine() +{ +#ifdef USE_CG + SetupCg(); +#endif +} + +ShaderEngine::~ShaderEngine() +{ + // TODO Auto-generated destructor stub +} + +#ifdef USE_CG + +void ShaderEngine::setParams(const int texsize, const unsigned int texId, const float aspect, BeatDetect *beatDetect, + TextureManager *textureManager) +{ + mainTextureId = texId; + this->beatDetect = beatDetect; + this->textureManager = textureManager; + this->aspect = aspect; + this->texsize = texsize; + + textureManager->setTexture("main", texId, texsize, texsize); + + glGenTextures(1, &blur1_tex); + glBindTexture(GL_TEXTURE_2D, blur1_tex); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texsize/2, texsize/2, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL ); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + glGenTextures(1, &blur2_tex); + glBindTexture(GL_TEXTURE_2D, blur2_tex); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texsize / 4, texsize / 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL ); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + glGenTextures(1, &blur3_tex); + glBindTexture(GL_TEXTURE_2D, blur3_tex); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texsize / 8, texsize / 8, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL ); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + blur1_enabled = false; + blur2_enabled = false; + blur3_enabled = false; + + //std::cout << "Generating Noise Textures" << std::endl; + + PerlinNoise noise; + + glGenTextures(1, &noise_texture_lq_lite); + glBindTexture(GL_TEXTURE_2D, noise_texture_lq_lite); + glTexImage2D(GL_TEXTURE_2D, 0, 4, 32, 32, 0, GL_LUMINANCE, GL_FLOAT, noise.noise_lq_lite); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + textureManager->setTexture("noise_lq_lite", noise_texture_lq_lite, 32, 32); + + glGenTextures(1, &noise_texture_lq); + glBindTexture(GL_TEXTURE_2D, noise_texture_lq); + glTexImage2D(GL_TEXTURE_2D, 0, 4, 256, 256, 0, GL_LUMINANCE, GL_FLOAT, noise.noise_lq); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + textureManager->setTexture("noise_lq", noise_texture_lq, 256, 256); + + glGenTextures(1, &noise_texture_mq); + glBindTexture(GL_TEXTURE_2D, noise_texture_mq); + glTexImage2D(GL_TEXTURE_2D, 0, 4, 256, 256, 0, GL_LUMINANCE, GL_FLOAT, noise.noise_mq); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + textureManager->setTexture("noise_mq", noise_texture_mq, 256, 256); + + glGenTextures(1, &noise_texture_hq); + glBindTexture(GL_TEXTURE_2D, noise_texture_hq); + glTexImage2D(GL_TEXTURE_2D, 0, 4, 256, 256, 0, GL_LUMINANCE, GL_FLOAT, noise.noise_hq); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + textureManager->setTexture("noise_hq", noise_texture_hq, 256, 256); + + glGenTextures(1, &noise_texture_perlin); + glBindTexture(GL_TEXTURE_2D, noise_texture_perlin); + glTexImage2D(GL_TEXTURE_2D, 0, 4, 512, 512, 0, GL_LUMINANCE, GL_FLOAT, noise.noise_perlin); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + textureManager->setTexture("noise_perlin", noise_texture_perlin, 512, 512); + + /* + glGenTextures( 1, &noise_texture_lq_vol ); + glBindTexture( GL_TEXTURE_3D, noise_texture_lq_vol ); + glTexImage3D(GL_TEXTURE_3D,0,4,32,32,32,0,GL_LUMINANCE,GL_FLOAT,noise.noise_lq_vol); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + textureManager->setTexture("noisevol_lq", noise_texture_lq_vol, 256, 256); + + glGenTextures( 1, &noise_texture_hq_vol ); + glBindTexture( GL_TEXTURE_3D, noise_texture_hq_vol ); + glTexImage3D(GL_TEXTURE_3D,0,4,32,32,32,0,GL_LUMINANCE,GL_FLOAT,noise.noise_hq_vol); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + textureManager->setTexture("noisevol_hq", noise_texture_hq_vol, 8, 8); + */ + +} + +bool ShaderEngine::LoadCgProgram(Shader &shader) +{ + //if (p != NULL) cgDestroyProgram(p); + //p = NULL; + std::string program = shader.programSource; + + if (program.length() > 0) + { + size_t found = program.rfind('}'); + if (found != std::string::npos) + { + //std::cout << "last '}' found at: " << int(found) << std::endl; + program.replace(int(found), 1, "OUT.color.xyz=ret.xyz;\nOUT.color.w=1;\nreturn OUT;\n}"); + } + else + return false; + found = program.rfind('{'); + if (found != std::string::npos) + { + //std::cout << "first '{' found at: " << int(found) << std::endl; + program.replace(int(found), 1, "{\nfloat rad=getrad;\nfloat ang=getang;\n"); + } + else + return false; + found = program.find("shader_body"); + if (found != std::string::npos) + { + //std::cout << "first 'shader_body' found at: " << int(found) << std::endl; + program.replace(int(found), 11, "outtype projectm(float2 uv : TEXCOORD0)\n"); + } + else + return false; + + shader.textures.clear(); + + found = 0; + found = program.find("sampler_", found); + while (found != std::string::npos) + { + found += 8; + size_t end = program.find_first_of(" ;,\n\r)", found); + + if (end != std::string::npos) + { + + std::string sampler = program.substr((int) found, (int) end - found); + UserTexture* texture = new UserTexture(sampler); + + texture->texID = textureManager->getTexture(texture->name); + if (texture->texID != 0) + { + texture->width = textureManager->getTextureWidth(texture->name); + texture->height = textureManager->getTextureHeight(texture->name); + } + else + { + if (sampler.substr(0, 4) == "rand") + { + std::string random_name = textureManager->getRandomTextureName(texture->name); + if (random_name.size() > 0) + { + texture->texID = textureManager->getTexture(random_name); + texture->width = textureManager->getTextureWidth(random_name); + texture->height = textureManager->getTextureHeight(random_name); + } + } + else + { + std::string extensions[6]; + extensions[0] = ".jpg"; + extensions[1] = ".dds"; + extensions[2] = ".png"; + extensions[3] = ".tga"; + extensions[4] = ".bmp"; + extensions[5] = ".dib"; + + for (int x = 0; x < 6; x++) + { + + std::string filename = texture->name + extensions[x]; + texture->texID = textureManager->getTexture(filename); + if (texture->texID != 0) + { + texture->width = textureManager->getTextureWidth(filename); + texture->height = textureManager->getTextureHeight(filename); + break; + } + } + + } + } + if (texture->texID != 0 && shader.textures.find(texture->qname) == shader.textures.end()) + shader.textures[texture->qname] = texture; + + else + delete (texture); + + } + + found = program.find("sampler_", found); + } + textureManager->clearRandomTextures(); + + found = 0; + found = program.find("texsize_", found); + while (found != std::string::npos) + { + found += 8; + size_t end = program.find_first_of(" ;.,\n\r)", found); + + if (end != std::string::npos) + { + std::string tex = program.substr((int) found, (int) end - found); + if (shader.textures.find(tex) != shader.textures.end()) + { + UserTexture* texture = shader.textures[tex]; + texture->texsizeDefined = true; + //std::cout << "texsize_" << tex << " found" << std::endl; + } + } + found = program.find("texsize_", found); + } + + found = program.find("GetBlur3"); + if (found != std::string::npos) + blur1_enabled = blur2_enabled = blur3_enabled = true; + else + { + found = program.find("GetBlur2"); + if (found != std::string::npos) + blur1_enabled = blur2_enabled = true; + else + { + found = program.find("GetBlur1"); + if (found != std::string::npos) + blur1_enabled = true; + } + } + + std::string temp; + + temp.append(cgTemplate); + temp.append(program); + + //std::cout << "Cg: Compilation Results:" << std::endl << std::endl; + //std::cout << program << std::endl; + + CGprogram p = cgCreateProgram(myCgContext, CG_SOURCE, temp.c_str(),//temp.c_str(), + myCgProfile, "projectm", NULL); + + checkForCgCompileError("creating shader program"); + if (p == NULL) + return false; + + cgGLLoadProgram(p); + + if (checkForCgCompileError("loading shader program")) + { + p = NULL; + return false; + } + + programs[&shader] = p; + + return true; + } + else + return false; +} + +bool ShaderEngine::checkForCgCompileError(const char *situation) +{ + CGerror error; + const char *string = cgGetLastErrorString(&error); + error = cgGetError(); + if (error != CG_NO_ERROR) + { + std::cout << "Cg: Compilation Error" << std::endl; + std::cout << "Cg: %" << situation << " - " << string << std::endl; + if (error == CG_COMPILER_ERROR) + { + std::cout << "Cg: " << cgGetLastListing(myCgContext) << std::endl; + + } + return true; + } + + return false; +} + +void ShaderEngine::checkForCgError(const char *situation) +{ + CGerror error; + const char *string = cgGetLastErrorString(&error); + + if (error != CG_NO_ERROR) + { + std::cout << "Cg: %" << situation << " - " << string << std::endl; + if (error == CG_COMPILER_ERROR) + { + std::cout << "Cg: " << cgGetLastListing(myCgContext) << std::endl; + } + exit(1); + } +} + +void ShaderEngine::SetupCg() +{ + std::string line; + std::ifstream myfile(CMAKE_INSTALL_PREFIX "/share/projectM/shaders/projectM.cg"); + if (myfile.is_open()) + { + while (!myfile.eof()) + { + std::getline(myfile, line); + cgTemplate.append(line + "\n"); + } + myfile.close(); + } + + else + std::cout << "Unable to load shader template \"" << CMAKE_INSTALL_PREFIX "/share/projectM/shaders/projectM.cg\"" << std::endl; + + std::ifstream myfile2(CMAKE_INSTALL_PREFIX "/share/projectM/shaders/blur.cg"); + if (myfile2.is_open()) + { + while (!myfile2.eof()) + { + std::getline(myfile2, line); + blurProgram.append(line + "\n"); + } + myfile2.close(); + } + + else + std::cout << "Unable to load blur template" << std::endl; + + myCgContext = cgCreateContext(); + checkForCgError("creating context"); + cgGLSetDebugMode(CG_FALSE); + cgSetParameterSettingMode(myCgContext, CG_DEFERRED_PARAMETER_SETTING); + + myCgProfile = cgGLGetLatestProfile(CG_GL_FRAGMENT); + cgGLSetOptimalOptions(myCgProfile); + checkForCgError("selecting fragment profile"); + + profileName = cgGetProfileString(myCgProfile); + std::cout << "Cg: Initialized profile: " << profileName << std::endl; +//std::cout<< blurProgram.c_str()<bass); + cgGLSetParameter1f(cgGetNamedParameter(program, "mid"), beatDetect->mid); + cgGLSetParameter1f(cgGetNamedParameter(program, "treb"), beatDetect->treb); + cgGLSetParameter1f(cgGetNamedParameter(program, "bass_att"), beatDetect->bass_att); + cgGLSetParameter1f(cgGetNamedParameter(program, "mid_att"), beatDetect->mid_att); + cgGLSetParameter1f(cgGetNamedParameter(program, "treb_att"), beatDetect->treb_att); + cgGLSetParameter1f(cgGetNamedParameter(program, "vol"), beatDetect->vol); + cgGLSetParameter1f(cgGetNamedParameter(program, "vol_att"), beatDetect->vol); + + cgGLSetParameter4f(cgGetNamedParameter(program, "texsize"), texsize, texsize, 1 / (float) texsize, 1 + / (float) texsize); + cgGLSetParameter4f(cgGetNamedParameter(program, "aspect"), 1 / aspect, 1, aspect, 1); + + if (blur1_enabled) + { + cgGLSetTextureParameter(cgGetNamedParameter(program, "sampler_blur1"), blur1_tex); + cgGLEnableTextureParameter(cgGetNamedParameter(program, "sampler_blur1")); + } + if (blur2_enabled) + { + cgGLSetTextureParameter(cgGetNamedParameter(program, "sampler_blur2"), blur2_tex); + cgGLEnableTextureParameter(cgGetNamedParameter(program, "sampler_blur2")); + } + if (blur3_enabled) + { + cgGLSetTextureParameter(cgGetNamedParameter(program, "sampler_blur3"), blur3_tex); + cgGLEnableTextureParameter(cgGetNamedParameter(program, "sampler_blur3")); + } + +} + +void ShaderEngine::SetupUserTexture(CGprogram program, const UserTexture* texture) +{ + std::string samplerName = "sampler_" + texture->qname; + + CGparameter param = cgGetNamedParameter(program, samplerName.c_str()); + checkForCgError("getting parameter"); + cgGLSetTextureParameter(param, texture->texID); + checkForCgError("setting parameter"); + cgGLEnableTextureParameter(param); + checkForCgError("enabling parameter"); + //std::cout<texID<<" "<texsizeDefined) + { + std::string texsizeName = "texsize_" + texture->name; + cgGLSetParameter4f(cgGetNamedParameter(program, texsizeName.c_str()), texture->width, texture->height, 1 + / (float) texture->width, 1 / (float) texture->height); + checkForCgError("setting parameter texsize"); + } +} + +void ShaderEngine::SetupUserTextureState( const UserTexture* texture) +{ + glBindTexture(GL_TEXTURE_2D, texture->texID); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, texture->bilinear ? GL_LINEAR : GL_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, texture->bilinear ? GL_LINEAR : GL_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, texture->wrap ? GL_REPEAT : GL_CLAMP); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, texture->wrap ? GL_REPEAT : GL_CLAMP); +} + +void ShaderEngine::SetupCgQVariables(CGprogram program, const Pipeline &q) +{ + cgGLSetParameter4f(cgGetNamedParameter(program, "_qa"), q.q[0], q.q[1], q.q[2], q.q[3]); + cgGLSetParameter4f(cgGetNamedParameter(program, "_qb"), q.q[4], q.q[5], q.q[6], q.q[7]); + cgGLSetParameter4f(cgGetNamedParameter(program, "_qc"), q.q[8], q.q[9], q.q[10], q.q[11]); + cgGLSetParameter4f(cgGetNamedParameter(program, "_qd"), q.q[12], q.q[13], q.q[14], q.q[15]); + cgGLSetParameter4f(cgGetNamedParameter(program, "_qe"), q.q[16], q.q[17], q.q[18], q.q[19]); + cgGLSetParameter4f(cgGetNamedParameter(program, "_qf"), q.q[20], q.q[21], q.q[22], q.q[23]); + cgGLSetParameter4f(cgGetNamedParameter(program, "_qg"), q.q[24], q.q[25], q.q[26], q.q[27]); + cgGLSetParameter4f(cgGetNamedParameter(program, "_qh"), q.q[28], q.q[29], q.q[30], q.q[31]); +} + +void ShaderEngine::setAspect(float aspect) +{ + this->aspect = aspect; +} +void ShaderEngine::RenderBlurTextures(const Pipeline &pipeline, const PipelineContext &pipelineContext, + const int texsize) +{ + if (blur1_enabled || blur2_enabled || blur3_enabled) + { + float tex[4][2] = + { + { 0, 1 }, + { 0, 0 }, + { 1, 0 }, + { 1, 1 } }; + + glBlendFunc(GL_ONE, GL_ZERO); + glColor4f(1.0, 1.0, 1.0, 1.0f); + + glBindTexture(GL_TEXTURE_2D, mainTextureId); + glEnable(GL_TEXTURE_2D); + + glEnableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glTexCoordPointer(2, GL_FLOAT, 0, tex); + + cgGLEnableProfile(myCgProfile); + checkForCgError("enabling profile"); + + if (blur1_enabled) + { + cgGLSetParameter4f(cgGetNamedParameter(blur1Program, "srctexsize"), texsize/2, texsize/2, 2 / (float) texsize, + 2 / (float) texsize); + cgGLSetParameter4f(cgGetNamedParameter(blur2Program, "srctexsize"), texsize/2 , texsize/2, 2 / (float) texsize, + 2 / (float) texsize); + + + + float pointsold[4][2] = + { + { 0, 1 }, + { 0, 0 }, + { 1, 0 }, + { 1, 1 } }; + float points[4][2] = + { + { 0, 0.5 }, + { 0, 0 }, + { 0.5, 0 }, + { 0.5, 0.5 } }; + + cgGLBindProgram(blur1Program); + checkForCgError("binding blur1 program"); + + glVertexPointer(2, GL_FLOAT, 0, points); + glBlendFunc(GL_ONE,GL_ZERO); + glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + + + glBindTexture(GL_TEXTURE_2D, blur1_tex); + glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, texsize/2, texsize/2); + + + } + + if (blur2_enabled) + { + cgGLSetParameter4f(cgGetNamedParameter(blur1Program, "srctexsize"), texsize/2, texsize/2, 2 / (float) texsize, + 2 / (float) texsize); + cgGLSetParameter4f(cgGetNamedParameter(blur2Program, "srctexsize"), texsize/2, texsize/2, 2 / (float) texsize, + 2 / (float) texsize); + + + + float points[4][2] = + { + { 0, 0.25 }, + { 0, 0 }, + { 0.25, 0 }, + { 0.25, 0.25 } }; + + glVertexPointer(2, GL_FLOAT, 0, points); + glBlendFunc(GL_ONE,GL_ZERO); + glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + + + + glBindTexture(GL_TEXTURE_2D, blur2_tex); + glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, texsize/4, texsize/4); + + + } + + if (blur3_enabled) + { + cgGLSetParameter4f(cgGetNamedParameter(blur2Program, "srctexsize"), texsize/4, texsize/4, 4 / (float) texsize, + 4/ (float) texsize); + cgGLSetParameter4f(cgGetNamedParameter(blur2Program, "srctexsize"), texsize / 4, texsize / 4, 4 + / (float) texsize, 4 / (float) texsize); + float points[4][2] = + { + { 0, 0.125 }, + { 0, 0 }, + { 0.125, 0 }, + { 0.125, 0.125 } }; + + glVertexPointer(2, GL_FLOAT, 0, points); + glBlendFunc(GL_ONE,GL_ZERO); + glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + + + + glBindTexture(GL_TEXTURE_2D, blur3_tex); + glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, texsize/8, texsize/8); + + + } + + + cgGLUnbindProgram(myCgProfile); + checkForCgError("unbinding blur2 program"); + + + cgGLDisableProfile(myCgProfile); + checkForCgError("disabling blur profile"); + + glDisable(GL_TEXTURE_2D); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + } +} + +void ShaderEngine::loadShader(Shader &shader) +{ + if (shader.enabled) + { + cgDestroyProgram(programs[&shader]); + programs.erase(&shader); + } + shader.enabled = LoadCgProgram(shader); +} + +void ShaderEngine::disableShader() +{ + if (enabled) + { + cgGLUnbindProgram(myCgProfile); + checkForCgError("disabling fragment profile"); + cgGLDisableProfile(myCgProfile); + checkForCgError("disabling fragment profile"); + } + enabled = false; +} + +void ShaderEngine::enableShader(Shader &shader, const Pipeline &pipeline, const PipelineContext &pipelineContext) +{ + enabled = false; + if (shader.enabled) + { + + for (std::map::const_iterator pos = shader.textures.begin(); pos != shader.textures.end(); ++pos) + SetupUserTextureState( pos->second); + + + CGprogram program = programs[&shader]; + for (std::map::const_iterator pos = shader.textures.begin(); pos + != shader.textures.end(); ++pos) + SetupUserTexture(program, pos->second); + + cgGLEnableProfile(myCgProfile); + checkForCgError("enabling warp profile"); + + cgGLBindProgram(program); + checkForCgError("binding warp program"); + + SetupCgVariables(program, pipeline, pipelineContext); + SetupCgQVariables(program, pipeline); + + enabled = true; + } +} + +void ShaderEngine::reset() +{ + rand_preset[0] = (rand() % 100) * .01; + rand_preset[1] = (rand() % 100) * .01; + rand_preset[2] = (rand() % 100) * .01; + rand_preset[3] = (rand() % 100) * .01; +} + +#endif diff --git a/3rdparty/libprojectm/Renderer/ShaderEngine.hpp b/3rdparty/libprojectm/Renderer/ShaderEngine.hpp new file mode 100644 index 000000000..754289625 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/ShaderEngine.hpp @@ -0,0 +1,113 @@ +/* + * ShaderEngine.hpp + * + * Created on: Jul 18, 2008 + * Author: pete + */ + +#ifndef SHADERENGINE_HPP_ +#define SHADERENGINE_HPP_ + +#include "Common.hpp" + +#ifdef USE_GLES1 +#include +#else +#ifdef __APPLE__ +#include +#include +#else +#include +#include +#endif +#endif + + +#ifdef USE_CG +#include /* Can't include this? Is Cg Toolkit installed! */ +#include +#endif + + +#include "Pipeline.hpp" +#include "PipelineContext.hpp" +class ShaderEngine; +#include "TextureManager.hpp" + +#include +#include +#include +#include "Shader.hpp" +class ShaderEngine +{ +#ifdef USE_CG + + + unsigned int mainTextureId; + int texsize; + float aspect; + BeatDetect *beatDetect; + TextureManager *textureManager; + + GLuint noise_texture_lq_lite; + GLuint noise_texture_lq; + GLuint noise_texture_mq; + GLuint noise_texture_hq; + GLuint noise_texture_perlin; + GLuint noise_texture_lq_vol; + GLuint noise_texture_hq_vol; + + bool blur1_enabled; + bool blur2_enabled; + bool blur3_enabled; + GLuint blur1_tex; + GLuint blur2_tex; + GLuint blur3_tex; + + float rand_preset[4]; + + CGcontext myCgContext; + CGprofile myCgProfile; + CGprogram blur1Program; + CGprogram blur2Program; + + bool enabled; + + std::map programs; + + std::string cgTemplate; + std::string blurProgram; + + bool LoadCgProgram(Shader &shader); + bool checkForCgCompileError(const char *situation); + void checkForCgError(const char *situation); + + void SetupCg(); + void SetupCgVariables(CGprogram program, const Pipeline &pipeline, const PipelineContext &pipelineContext); + void SetupCgQVariables(CGprogram program, const Pipeline &pipeline); + + void SetupUserTexture(CGprogram program, const UserTexture* texture); + void SetupUserTextureState(const UserTexture* texture); + + + +#endif +public: + ShaderEngine(); + virtual ~ShaderEngine(); +#ifdef USE_CG + void RenderBlurTextures(const Pipeline &pipeline, const PipelineContext &pipelineContext, const int texsize); + void loadShader(Shader &shader); + + void setParams(const int texsize, const unsigned int texId, const float aspect, BeatDetect *beatDetect, TextureManager *textureManager); + void enableShader(Shader &shader, const Pipeline &pipeline, const PipelineContext &pipelineContext); + void disableShader(); + void reset(); + void setAspect(float aspect); + std::string profileName; + +#endif +}; + +#endif /* SHADERENGINE_HPP_ */ + diff --git a/3rdparty/libprojectm/Renderer/TextureManager.cpp b/3rdparty/libprojectm/Renderer/TextureManager.cpp new file mode 100644 index 000000000..ba6db22e0 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/TextureManager.cpp @@ -0,0 +1,279 @@ +#ifdef LINUX +#include +#endif +#ifdef WIN32 +#include "glew.h" +#endif +#ifdef __APPLE__ +#include +#endif + +#ifdef USE_DEVIL +#include +#else +#include "SOIL/SOIL.h" +#endif + +#ifdef WIN32 +#include "win32-dirent.h" +#endif + +#ifdef LINUX +#include +#endif + +#ifdef MACOS +#include +#endif +#include "TextureManager.hpp" +#include "Common.hpp" +#include "IdleTextures.hpp" + + + +TextureManager::TextureManager(const std::string _presetURL): presetURL(_presetURL) +{ +#ifdef USE_DEVIL +ilInit(); +iluInit(); +ilutInit(); +ilutRenderer(ILUT_OPENGL); +#endif + + Preload(); + loadTextureDir(); +} + +TextureManager::~TextureManager() +{ + Clear(); +} + +void TextureManager::Preload() +{ + +#ifdef USE_DEVIL + ILuint image; + ilGenImages(1, &image); + ilBindImage(image); + ilLoadL(IL_TYPE_UNKNOWN,(ILvoid*) M_data, M_bytes); + GLuint tex = ilutGLBindTexImage(); +#else + unsigned int tex = SOIL_load_OGL_texture_from_memory( + M_data, + M_bytes, + SOIL_LOAD_AUTO, + SOIL_CREATE_NEW_ID, + + SOIL_FLAG_POWER_OF_TWO + | SOIL_FLAG_MULTIPLY_ALPHA + // | SOIL_FLAG_COMPRESS_TO_DXT + ); +#endif + + textures["M.tga"]=tex; + +#ifdef USE_DEVIL + ilLoadL(IL_TYPE_UNKNOWN,(ILvoid*) project_data,project_bytes); + tex = ilutGLBindTexImage(); +#else + tex = SOIL_load_OGL_texture_from_memory( + project_data, + project_bytes, + SOIL_LOAD_AUTO, + SOIL_CREATE_NEW_ID, + + SOIL_FLAG_POWER_OF_TWO + | SOIL_FLAG_MULTIPLY_ALPHA + //| SOIL_FLAG_COMPRESS_TO_DXT + ); +#endif + + textures["project.tga"]=tex; + +#ifdef USE_DEVIL + ilLoadL(IL_TYPE_UNKNOWN,(ILvoid*) headphones_data, headphones_bytes); + tex = ilutGLBindTexImage(); +#else + tex = SOIL_load_OGL_texture_from_memory( + headphones_data, + headphones_bytes, + SOIL_LOAD_AUTO, + SOIL_CREATE_NEW_ID, + + SOIL_FLAG_POWER_OF_TWO + | SOIL_FLAG_MULTIPLY_ALPHA + // | SOIL_FLAG_COMPRESS_TO_DXT + ); +#endif + + textures["headphones.tga"]=tex; +} + +void TextureManager::Clear() +{ + + + for(std::map::const_iterator iter = textures.begin(); iter != textures.end(); iter++) + { + glDeleteTextures(1,&iter->second); + } + textures.clear(); +} + +void TextureManager::setTexture(const std::string name, const unsigned int texId, const int width, const int height) +{ + textures[name] = texId; + widths[name] = width; + heights[name] = height; +} + +//void TextureManager::unloadTextures(const PresetOutputs::cshape_container &shapes) +//{ + /* + for (PresetOutputs::cshape_container::const_iterator pos = shapes.begin(); + pos != shapes.end(); ++pos) + { + + if( (*pos)->enabled==1) + { + + if ( (*pos)->textured) + { + std::string imageUrl = (*pos)->getImageUrl(); + if (imageUrl != "") + { + std::string fullUrl = presetURL + "/" + imageUrl; + ReleaseTexture(LoadTexture(fullUrl.c_str())); + } + } + } + } + */ +//} + +GLuint TextureManager::getTexture(const std::string filename) +{ + std::string fullURL = presetURL + PATH_SEPARATOR + filename; + return getTextureFullpath(filename,fullURL); +} + +GLuint TextureManager::getTextureFullpath(const std::string filename, const std::string imageURL) +{ + + if (textures.find(filename)!= textures.end()) + { + return textures[filename]; + } + else + { + +#ifdef USE_DEVIL + GLuint tex = ilutGLLoadImage((char *)imageURL.c_str()); +#else + int width, height; + + unsigned int tex = SOIL_load_OGL_texture_size( + imageURL.c_str(), + SOIL_LOAD_AUTO, + SOIL_CREATE_NEW_ID, + + //SOIL_FLAG_POWER_OF_TWO + // SOIL_FLAG_MIPMAPS + SOIL_FLAG_MULTIPLY_ALPHA + //| SOIL_FLAG_COMPRESS_TO_DXT + //| SOIL_FLAG_DDS_LOAD_DIRECT + ,&width,&height); + +#endif + textures[filename]=tex; + widths[filename]=width; + heights[filename]=height; + return tex; + + + } +} + +int TextureManager::getTextureWidth(const std::string imageURL) +{ + return widths[imageURL]; +} + +int TextureManager::getTextureHeight(const std::string imageURL) +{ + return heights[imageURL]; +} + +unsigned int TextureManager::getTextureMemorySize() +{ + return 0; +} + +void TextureManager::loadTextureDir() +{ + std::string dirname = CMAKE_INSTALL_PREFIX "/share/projectM/textures"; + + DIR * m_dir; + + // Allocate a new a stream given the current directory name + if ((m_dir = opendir(dirname.c_str())) == NULL) + { + std::cout<<"No Textures Loaded from "<d_name); + + if (filename.length() > 0 && filename[0] == '.') + continue; + + // Create full path name + std::string fullname = dirname + PATH_SEPARATOR + filename; + + unsigned int texId = getTextureFullpath(filename, fullname); + if(texId != 0) + { + user_textures.push_back(texId); + textures[filename]=texId; + user_texture_names.push_back(filename); + } + } + + if (m_dir) + { + closedir(m_dir); + m_dir = 0; + } + +} + +std::string TextureManager::getRandomTextureName(std::string random_id) +{ + if (user_texture_names.size() > 0) + { + std::string random_name = user_texture_names[rand() % user_texture_names.size()]; + random_textures.push_back(random_id); + textures[random_id] = textures[random_name]; + return random_name; + } + else return ""; +} + +void TextureManager::clearRandomTextures() +{ + for (std::vector::iterator pos = random_textures.begin(); pos != random_textures.end(); ++pos) + { + textures.erase(*pos); + widths.erase(*pos); + heights.erase(*pos); + } + random_textures.clear(); + +} diff --git a/3rdparty/libprojectm/Renderer/TextureManager.hpp b/3rdparty/libprojectm/Renderer/TextureManager.hpp new file mode 100644 index 000000000..fb87c594b --- /dev/null +++ b/3rdparty/libprojectm/Renderer/TextureManager.hpp @@ -0,0 +1,35 @@ +#ifndef TextureManager_HPP +#define TextureManager_HPP + +#include +#include +#include +#include + +class TextureManager +{ + std::string presetURL; + std::map textures; + std::map heights; + std::map widths; + std::vector user_textures; + std::vector user_texture_names; + std::vector random_textures; +public: + ~TextureManager(); + TextureManager(std::string _presetURL); + //void unloadTextures(const PresetOutputs::cshape_container &shapes); + void Clear(); + void Preload(); + unsigned int getTexture(const std::string filenamne); + unsigned int getTextureFullpath(const std::string filename, const std::string imageUrl); + unsigned int getTextureMemorySize(); + int getTextureWidth(const std::string imageUrl); + int getTextureHeight(const std::string imageUrl); + void setTexture(const std::string name, const unsigned int texId, const int width, const int height); + void loadTextureDir(); + std::string getRandomTextureName(std::string rand_name); + void clearRandomTextures(); +}; + +#endif diff --git a/3rdparty/libprojectm/Renderer/Transformation.hpp b/3rdparty/libprojectm/Renderer/Transformation.hpp new file mode 100644 index 000000000..1542809d9 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/Transformation.hpp @@ -0,0 +1,66 @@ +#ifndef Transformation_HPP +#define Transformation_HPP + +#include "PerPixelMesh.hpp" +#include + + +class Transforms +{ +public: + + inline static void Zoom(Point &p, const PerPixelContext &context, float zoom, float zoomExponent) + { + float fZoom2 = powf( zoom, powf( zoomExponent, context.rad*2.0f - 1.0f)); + float fZoom2Inv = 1.0f/fZoom2; + p.x -= 0.5; + p.y -= 0.5; + p.x *= fZoom2Inv; + p.y *= fZoom2Inv; + p.x += 0.5; + p.y += 0.5; + } + + inline static void Transform(Point &p, const PerPixelContext &context, float dx, float dy) + { + p.x -= dx; + p.y -= dy; + } + + inline static void Scale(Point &p, const PerPixelContext &context, float sy, float sx, float cx, float cy) + { + p.x = (p.x - cx)/sx + cx; + p.y = (p.y - cy)/sy + cy; + } + + inline static void Rotate(Point &p, const PerPixelContext &context, float angle, float cx, float cy) + { + float u2 = p.x - cx; + float v2 = p.y - cy; + + float cos_rot = cosf(angle); + float sin_rot = sinf(angle); + + p.x = u2*cos_rot - v2*sin_rot + cx; + p.y = u2*sin_rot + v2*cos_rot + cy; + } + + inline static void Warp(Point &p, const PerPixelContext &context, float time, float speed, float scale, float warp) + { + float fWarpTime = time * speed; + float fWarpScaleInv = 1.0f / scale; + float f[4]; + f[0] = 11.68f + 4.0f*cosf(fWarpTime*1.413f + 10); + f[1] = 8.77f + 3.0f*cosf(fWarpTime*1.113f + 7); + f[2] = 10.54f + 3.0f*cosf(fWarpTime*1.233f + 3); + f[3] = 11.49f + 4.0f*cosf(fWarpTime*0.933f + 5); + + p.x += warp*0.0035f*sinf(fWarpTime*0.333f + fWarpScaleInv*(context.x*f[0] - context.y*f[3])); + p.y += warp*0.0035f*cosf(fWarpTime*0.375f - fWarpScaleInv*(context.x*f[2] + context.y*f[1])); + p.x += warp*0.0035f*cosf(fWarpTime*0.753f - fWarpScaleInv*(context.x*f[1] - context.y*f[2])); + p.y += warp*0.0035f*sinf(fWarpTime*0.825f + fWarpScaleInv*(context.x*f[0] + context.y*f[3])); + } + +}; + +#endif diff --git a/3rdparty/libprojectm/Renderer/UserTexture.cpp b/3rdparty/libprojectm/Renderer/UserTexture.cpp new file mode 100644 index 000000000..a280d4ca0 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/UserTexture.cpp @@ -0,0 +1,50 @@ +/* + * UserTexture.cpp + * + * Created on: Jul 16, 2008 + * Author: pete + */ + +#include "UserTexture.hpp" + +UserTexture::UserTexture(std::string qualifiedName): qname(qualifiedName) +{ + + if (qualifiedName.substr(0,3) == "fc_") + { + name = qualifiedName.substr(3); + bilinear = true; + wrap = false; + } + else if (qualifiedName.substr(0,3) == "fw_") + { + name = qualifiedName.substr(3); + bilinear = true; + wrap = true; + } + else if (qualifiedName.substr(0,3) == "pc_") + { + name = qualifiedName.substr(3); + bilinear = false; + wrap = false; + } + else if (qualifiedName.substr(0,3) == "pw_") + { + name = qualifiedName.substr(3); + bilinear = false; + wrap = true; + } + else + { + name = qualifiedName; + bilinear = true; + wrap = true; + } + + texsizeDefined = false; +} + +UserTexture::~UserTexture() +{ + // TODO Auto-generated destructor stub +} diff --git a/3rdparty/libprojectm/Renderer/UserTexture.hpp b/3rdparty/libprojectm/Renderer/UserTexture.hpp new file mode 100644 index 000000000..19fdc634d --- /dev/null +++ b/3rdparty/libprojectm/Renderer/UserTexture.hpp @@ -0,0 +1,34 @@ +/* + * UserTexture.hpp + * + * Created on: Jul 16, 2008 + * Author: pete + */ + +#ifndef USERTEXTURE_HPP_ +#define USERTEXTURE_HPP_ + +#include + +class UserTexture +{ +public: + + bool wrap; + bool bilinear; + + bool texsizeDefined; + + int width; + int height; + + unsigned int texID; + + std::string qname; + std::string name; + + UserTexture(std::string qualifiedName); + virtual ~UserTexture(); +}; + +#endif /* USERTEXTURE_HPP_ */ diff --git a/3rdparty/libprojectm/Renderer/VideoEcho.cpp b/3rdparty/libprojectm/Renderer/VideoEcho.cpp new file mode 100644 index 000000000..1ddad57a1 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/VideoEcho.cpp @@ -0,0 +1,93 @@ +/* + * VideoEcho.cpp + * + * Created on: Jun 29, 2008 + * Author: pete + */ + +#include "Common.hpp" + +#ifdef USE_GLES1 +#include +#else +#ifdef __APPLE__ +#include +#include +#else +#include +#include +#endif +#endif + +#include "VideoEcho.hpp" + +VideoEcho::VideoEcho(): a(0), zoom(1), orientation(Normal) +{ + // TODO Auto-generated constructor stub + +} + +VideoEcho::~VideoEcho() +{ + // TODO Auto-generated destructor stub +} + +void VideoEcho::Draw(RenderContext &context) +{ + + + glEnable(GL_TEXTURE_2D); + + + float tex[4][2] = {{0, 1}, + {0, 0}, + {1, 0}, + {1, 1}}; + + float points[4][2] = {{-0.5, -0.5}, + {-0.5, 0.5}, + { 0.5, 0.5}, + { 0.5, -0.5}}; + + glEnableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + + glVertexPointer(2,GL_FLOAT,0,points); + glTexCoordPointer(2,GL_FLOAT,0,tex); + + //Now Blend the Video Echo + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glMatrixMode(GL_TEXTURE); + + //draw video echo + glColor4f(1.0, 1.0, 1.0, a * masterAlpha); + glTranslatef(.5, .5, 0); + glScalef(1.0/zoom, 1.0/zoom, 1); + glTranslatef(-.5, -.5, 0); + + int flipx=1, flipy=1; + switch (orientation) + { + case Normal: flipx=1;flipy=1;break; + case FlipX: flipx=-1;flipy=1;break; + case FlipY: flipx=1;flipy=-1;break; + case FlipXY: flipx=-1;flipy=-1;break; + default: flipx=1;flipy=1; break; + } + + float pointsFlip[4][2] = {{-0.5*flipx, -0.5*flipy}, + {-0.5*flipx, 0.5*flipy}, + { 0.5*flipx, 0.5*flipy}, + { 0.5*flipx, -0.5*flipy}}; + + glVertexPointer(2,GL_FLOAT,0,pointsFlip); + glDrawArrays(GL_TRIANGLE_FAN,0,4); + + glDisable(GL_TEXTURE_2D); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + +} diff --git a/3rdparty/libprojectm/Renderer/VideoEcho.hpp b/3rdparty/libprojectm/Renderer/VideoEcho.hpp new file mode 100644 index 000000000..13f027e35 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/VideoEcho.hpp @@ -0,0 +1,31 @@ +/* + * VideoEcho.hpp + * + * Created on: Jun 29, 2008 + * Author: pete + */ + +#ifndef VIDEOECHO_HPP_ +#define VIDEOECHO_HPP_ + +#include "Renderable.hpp" + +enum Orientation +{ + Normal=0, FlipX, FlipY, FlipXY +}; + +class VideoEcho: public RenderItem +{ +public: + VideoEcho(); + virtual ~VideoEcho(); + + float a; + float zoom; + Orientation orientation; + + void Draw(RenderContext &context); +}; + +#endif /* VIDEOECHO_HPP_ */ diff --git a/3rdparty/libprojectm/Renderer/Waveform.cpp b/3rdparty/libprojectm/Renderer/Waveform.cpp new file mode 100644 index 000000000..8779efaa9 --- /dev/null +++ b/3rdparty/libprojectm/Renderer/Waveform.cpp @@ -0,0 +1,124 @@ +/* + * Waveform.hpp + * + * Created on: Jun 25, 2008 + * Author: pete + */ + +#ifdef LINUX +#include +#endif +#ifdef WIN32 +#include "glew.h" +#endif +#ifdef __APPLE__ +#include +#endif + +#include "Waveform.hpp" +#include +#include "BeatDetect.hpp" + +typedef float floatPair[2]; +typedef float floatTriple[3]; +typedef float floatQuad[4]; + +Waveform::Waveform(int samples) +: RenderItem(),samples(samples), points(samples), pointContext(samples) +{ + + spectrum = false; /* spectrum data or pcm data */ + dots = false; /* draw wave as dots or lines */ + thick = false; /* draw thicker lines */ + additive = false; /* add color values together */ + + scaling= 1; /* scale factor of waveform */ + smoothing = 0; /* smooth factor of waveform */ + sep = 0; + +} +void Waveform::Draw(RenderContext &context) + { + + //if (samples > 2048) samples = 2048; + + + if (additive) glBlendFunc(GL_SRC_ALPHA, GL_ONE); + else glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + if (thick) + { + glLineWidth(context.texsize <= 512 ? 2 : 2*context.texsize/512); + glPointSize(context.texsize <= 512 ? 2 : 2*context.texsize/512); + + } + else glPointSize(context.texsize <= 512 ? 1 : context.texsize/512); + + + float *value1 = new float[samples]; + float *value2 = new float[samples]; + context.beatDetect->pcm->getPCM( value1, samples, 0, spectrum, smoothing, 0); + context.beatDetect->pcm->getPCM( value2, samples, 1, spectrum, smoothing, 0); + // printf("%f\n",pcmL[0]); + + + float mult= scaling*( spectrum ? 0.015f :1.0f); + + + std::transform(&value1[0],&value1[samples],&value1[0],std::bind2nd(std::multiplies(),mult)); + std::transform(&value2[0],&value2[samples],&value2[0],std::bind2nd(std::multiplies(),mult)); + + WaveformContext waveContext(samples, context.beatDetect); + + for(int x=0;x< samples;x++) + { + waveContext.sample = x/(float)(samples - 1); + waveContext.sample_int = x; + waveContext.left = value1[x]; + waveContext.right = value2[x]; + + points[x] = PerPoint(points[x],waveContext); + } + + floatQuad *colors = new float[samples][4]; + floatPair *p = new float[samples][2]; + + for(int x=0;x< samples;x++) + { + colors[x][0] = points[x].r; + colors[x][1] = points[x].g; + colors[x][2] = points[x].b; + colors[x][3] = points[x].a * masterAlpha; + + p[x][0] = points[x].x; + p[x][1] = -(points[x].y-1); + + } + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + + glVertexPointer(2,GL_FLOAT,0,p); + glColorPointer(4,GL_FLOAT,0,colors); + + if (dots) glDrawArrays(GL_POINTS,0,samples); + else glDrawArrays(GL_LINE_STRIP,0,samples); + + glPointSize(context.texsize < 512 ? 1 : context.texsize/512); + glLineWidth(context.texsize < 512 ? 1 : context.texsize/512); +#ifndef USE_GLES1 + glDisable(GL_LINE_STIPPLE); +#endif + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + // glPopMatrix(); + + delete[] colors; + delete[] p; + delete[] value1; + delete[] value2; + + } + + + diff --git a/3rdparty/libprojectm/Renderer/Waveform.hpp b/3rdparty/libprojectm/Renderer/Waveform.hpp new file mode 100644 index 000000000..b6aa4680d --- /dev/null +++ b/3rdparty/libprojectm/Renderer/Waveform.hpp @@ -0,0 +1,64 @@ +/* + * Waveform.hpp + * + * Created on: Jun 25, 2008 + * Author: pete + */ + +#ifndef WAVEFORM_HPP_ +#define WAVEFORM_HPP_ + +#include "Renderable.hpp" +#include + +class ColoredPoint +{ +public: + float x; + float y; + float r; + float g; + float b; + float a; + + ColoredPoint():x(0.5),y(0.5),r(1),g(1),b(1),a(1){}; +}; + +class WaveformContext +{ +public: + float sample; + int samples; + int sample_int; + float left; + float right; + BeatDetect *music; + + WaveformContext(int samples, BeatDetect *music):samples(samples),music(music){}; +}; + + +class Waveform : public RenderItem +{ +public: + + int samples; /* number of samples associated with this wave form. Usually powers of 2 */ + bool spectrum; /* spectrum data or pcm data */ + bool dots; /* draw wave as dots or lines */ + bool thick; /* draw thicker lines */ + bool additive; /* add color values together */ + + float scaling; /* scale factor of waveform */ + float smoothing; /* smooth factor of waveform */ + int sep; /* no idea what this is yet... */ + + Waveform(int samples); + void Draw(RenderContext &context); + +private: + virtual ColoredPoint PerPoint(ColoredPoint p, const WaveformContext context)=0; + std::vector points; + std::vector pointContext; + +}; +#endif /* WAVEFORM_HPP_ */ diff --git a/3rdparty/libprojectm/Renderer/blur.cg b/3rdparty/libprojectm/Renderer/blur.cg new file mode 100644 index 000000000..f641eb69a --- /dev/null +++ b/3rdparty/libprojectm/Renderer/blur.cg @@ -0,0 +1,151 @@ +struct outtype {float4 color : COLOR;}; + +uniform float4 srctexsize; + +outtype blur1(float2 uv : TEXCOORD0, uniform sampler2D sampler_blur : TEX0) +{ +float2 uv2 = uv.xy + srctexsize.zw*float2(1,1); + +float d=.00175; + +float3 val = tex2D(sampler_blur, float2(uv.x-d, uv.y)).xyz; +val += tex2D(sampler_blur, float2(uv.x+d, uv.y)).xyz; +val += tex2D(sampler_blur, float2(uv.x, uv.y + d)).xyz; +val += tex2D(sampler_blur, float2(uv.x, uv.y - d)).xyz; + +float3 val2 = tex2D(sampler_blur, float2(uv.x-d, uv.y -d)).xyz; +val += tex2D(sampler_blur, float2(uv.x-d, uv.y +d)).xyz; +val += tex2D(sampler_blur, float2(uv.x+d, uv.y + d)).xyz; +val += tex2D(sampler_blur, float2(uv.x +d, uv.y - d)).xyz; + +outtype OUT; +val *= 0.65; +val2 *= 0.35; + +OUT.color.xyz = val* 0.25 + val2 * 0.25; +OUT.color.w = 1; +return OUT; +} + +outtype blur2(float2 uv : TEXCOORD0, uniform sampler2D sampler_blur : TEX0) +{ +float2 uv2 = uv.xy + srctexsize.zw*float2(1,0); + +float d = srctexsize.z; +d=.0015; + +float3 val = tex2D(sampler_blur, float2(uv.x-d, uv.y)).xyz; +val += tex2D(sampler_blur, float2(uv.x+d, uv.y)).xyz; +val += tex2D(sampler_blur, float2(uv.x, uv.y + d)).xyz; +val += tex2D(sampler_blur, float2(uv.x, uv.y - d)).xyz; + +val *= 0.25; + +float t = min( min(uv.x, uv.y), 1-max(uv.x,uv.y) ); +t = sqrt(t); + +float minimum = 0.5; +float variance = 0.5; +float size = 50; + +t = minimum + variance*saturate(t*size); +t = 1; +val.xyz *= t; + +outtype OUT; +OUT.color.xyz = val; +OUT.color.w = 1; +return OUT; +} + +outtype blurHoriz(float2 uv : TEXCOORD0, uniform sampler2D sampler_blur : TEX0) +{ + + // LONG HORIZ. PASS 1: + const float w[8] = { 4.0, 3.8, 3.5, 2.9, 1.9, 1.2, 0.7, 0.3 }; + const float w1 = w[0] + w[1]; + const float w2 = w[2] + w[3]; + const float w3 = w[4] + w[5]; + const float w4 = w[6] + w[7]; + const float d1 = 0 + 2*w[1]/w1; + const float d2 = 2 + 2*w[3]/w2; + const float d3 = 4 + 2*w[5]/w3; + const float d4 = 6 + 2*w[7]/w4; + const float w_div = 0.5/(w1+w2+w3+w4); + +float fscale = 1; +float fbias = 0; + + + // note: if you just take one sample at exactly uv.xy, you get an avg of 4 pixels. + //float2 uv2 = uv.xy;// + srctexsize.zw*float2(0.5,0.5); + float2 uv2 = uv.xy + srctexsize.zw*float2(1,1); // + moves blur UP, LEFT by 1-pixel increments + + float3 blur = + ( tex2D( sampler_blur, uv2 + float2( d1*srctexsize.z,0) ).xyz + + tex2D( sampler_blur, uv2 + float2(-d1*srctexsize.z,0) ).xyz)*w1 + + ( tex2D( sampler_blur, uv2 + float2( d2*srctexsize.z,0) ).xyz + + tex2D( sampler_blur, uv2 + float2(-d2*srctexsize.z,0) ).xyz)*w2 + + ( tex2D( sampler_blur, uv2 + float2( d3*srctexsize.z,0) ).xyz + + tex2D( sampler_blur, uv2 + float2(-d3*srctexsize.z,0) ).xyz)*w3 + + ( tex2D( sampler_blur, uv2 + float2( d4*srctexsize.z,0) ).xyz + + tex2D( sampler_blur, uv2 + float2(-d4*srctexsize.z,0) ).xyz)*w4 + ; + blur.xyz *= w_div; + + blur.xyz = blur.xyz*fscale + fbias; + + outtype OUT; + OUT.color.xyz = blur; + OUT.color.w = 1; + +return OUT; +} + +outtype blurVert(float2 uv : TEXCOORD0, uniform sampler2D sampler_blur : TEX0) +{ + //SHORT VERTICAL PASS 2: + + + const float w[8] = { 4.0, 3.8, 3.5, 2.9, 1.9, 1.2, 0.7, 0.3 }; + + const float w1 = w[0]+w[1] + w[2]+w[3]; + const float w2 = w[4]+w[5] + w[6]+w[7]; + const float d1 = 0 + 2*((w[2]+w[3])/w1); + const float d2 = 2 + 2*((w[6]+w[7])/w2); + const float w_div = 1.0/((w1+w2)*2); + + + + // note: if you just take one sample at exactly uv.xy, you get an avg of 4 pixels. + //float2 uv2 = uv.xy;// + srctexsize.zw*float2(-0.5,-0.5); + float2 uv2 = uv.xy + srctexsize.zw*float2(1,0); // + moves blur UP, LEFT by TWO-pixel increments! (since texture is 1/2 the size of blur1_ps) + + float3 blur = + ( tex2D( sampler_blur, uv2 + float2(0, d1*srctexsize.w) ).xyz + + tex2D( sampler_blur, uv2 + float2(0,-d1*srctexsize.w) ).xyz)*w1 + + ( tex2D( sampler_blur, uv2 + float2(0, d2*srctexsize.w) ).xyz + + tex2D( sampler_blur, uv2 + float2(0,-d2*srctexsize.w) ).xyz)*w2 + ; + blur.xyz *= w_div; + + // tone it down at the edges: (only happens on 1st X pass!) + float t = min( min(uv.x, uv.y), 1-max(uv.x,uv.y) ); + + float minimum = 0.5; + float variance = 0.5; + float size = 50; + + + blur.xyz *= t; + + t = sqrt(t); + t = minimum + variance*saturate(t*size); + t=1; + blur.xyz *= t; + +outtype OUT; +OUT.color.xyz = blur; +OUT.color.w = 1; +return OUT; +} diff --git a/3rdparty/libprojectm/Renderer/projectM.cg b/3rdparty/libprojectm/Renderer/projectM.cg new file mode 100644 index 000000000..c84e3399d --- /dev/null +++ b/3rdparty/libprojectm/Renderer/projectM.cg @@ -0,0 +1,119 @@ +#define M_PI 3.14159265359 +#define M_PI_2 6.28318530718 +#define M_INV_PI_2 0.159154943091895 + +#define q1 _qa.x +#define q2 _qa.y +#define q3 _qa.z +#define q4 _qa.w +#define q5 _qb.x +#define q6 _qb.y +#define q7 _qb.z +#define q8 _qb.w +#define q9 _qc.x +#define q10 _qc.y +#define q11 _qc.z +#define q12 _qc.w +#define q13 _qd.x +#define q14 _qd.y +#define q15 _qd.z +#define q16 _qd.w +#define q17 _qe.x +#define q18 _qe.y +#define q19 _qe.z +#define q20 _qe.w +#define q21 _qf.x +#define q22 _qf.y +#define q23 _qf.z +#define q24 _qf.w +#define q25 _qg.x +#define q26 _qg.y +#define q27 _qg.z +#define q28 _qg.w +#define q29 _qh.x +#define q30 _qh.y +#define q31 _qh.z +#define q32 _qh.w + +#define lum(x) (dot(x,float3(0.32,0.49,0.29))) +#define tex2d tex2D +#define tex3d tex3D + +#define getrad sqrt((uv.x-0.5)*2*(uv.x-0.5)*2+(uv.y-0.5)*2*(uv.y-0.5)*2)*.7071067 +#define getang atan2(((uv.y-0.5)*2),((uv.x-0.5)*2)) + +#define GetMain(uv) (tex2D(sampler_main,uv).xyz) +#define GetPixel(uv) (tex2D(sampler_main,uv).xyz) + +#define uv_orig uv + +uniform sampler2D sampler_main; +uniform sampler2D sampler_fw_main; +uniform sampler2D sampler_pw_main; +uniform sampler2D sampler_fc_main; +uniform sampler2D sampler_pc_main; + +uniform sampler2D sampler_noise_lq; +uniform sampler2D sampler_noise_lq_lite; +uniform sampler2D sampler_noise_mq; +uniform sampler2D sampler_noise_hq; +uniform sampler2D sampler_noise_perlin; +uniform sampler3D sampler_noisevol_lq; +uniform sampler3D sampler_noisevol_hq; + +uniform sampler2D sampler_blur1; +uniform sampler2D sampler_blur2; +uniform sampler2D sampler_blur3; + +float4 texsize_noise_lq; +float4 texsize_noise_mq; +float4 texsize_noise_hq; +float4 texsize_noise_perlin; +float4 texsize_noise_lq_lite; + +float4 _qa; +float4 _qb; +float4 _qc; +float4 _qd; +float4 _qe; +float4 _qf; +float4 _qg; +float4 _qh; + +float blur1_min; +float blur1_max; +float blur2_min; +float blur2_max; +float blur3_min; +float blur3_max; + +#define GetBlur1(uv) (tex2D(sampler_blur1,uv).xyz*blur1_max+blur1_min) +#define GetBlur2(uv) (tex2D(sampler_blur2,uv).xyz*blur2_max+blur2_min) +#define GetBlur3(uv) (tex2D(sampler_blur3,uv).xyz*blur3_max+blur3_min) + +float4 slow_roam_cos; +float4 roam_cos; +float4 slow_roam_sin; +float4 roam_sin; + +float time; +float4 rand_preset; +float4 rand_frame; +float progress; +float frame; +float fps; +float bass; +float mid; +float treb; +float vol; +float bass_att; +float mid_att; +float treb_att; +float vol_att; +float4 texsize; +float4 aspect; + + +struct outtype {float4 color : COLOR;}; +outtype OUT; +float3 ret; diff --git a/3rdparty/libprojectm/TimeKeeper.cpp b/3rdparty/libprojectm/TimeKeeper.cpp new file mode 100644 index 000000000..39afb402f --- /dev/null +++ b/3rdparty/libprojectm/TimeKeeper.cpp @@ -0,0 +1,116 @@ +#ifndef WIN32 +#include +#else +#endif /** !WIN32 */ +#include +#ifdef LINUX +#include +#endif +#ifdef WIN32 +#include "glew.h" +#endif + +#ifdef __APPLE__ +#include +#endif + +#include "TimeKeeper.hpp" +#include "RandomNumberGenerators.hpp" + +TimeKeeper::TimeKeeper(double presetDuration, double smoothDuration, double easterEgg) + { + _smoothDuration = smoothDuration; + _presetDuration = presetDuration; + _easterEgg = easterEgg; + +#ifndef WIN32 + gettimeofday ( &this->startTime, NULL ); +#else + startTime = GetTickCount(); +#endif /** !WIN32 */ + + UpdateTimers(); + } + + void TimeKeeper::UpdateTimers() + { +#ifndef WIN32 + _currentTime = getTicks ( &startTime ) * 0.001; +#else + _currentTime = getTicks ( startTime ) * 0.001; +#endif /** !WIN32 */ + + _presetFrameA++; + _presetFrameB++; + + } + + void TimeKeeper::StartPreset() + { + _isSmoothing = false; + _presetTimeA = _currentTime; + _presetFrameA = 1; + _presetDurationA = sampledPresetDuration(); + } + void TimeKeeper::StartSmoothing() + { + _isSmoothing = true; + _presetTimeB = _currentTime; + _presetFrameB = 1; + _presetDurationB = sampledPresetDuration(); + } + void TimeKeeper::EndSmoothing() + { + _isSmoothing = false; + _presetTimeA = _presetTimeB; + _presetFrameA = _presetFrameB; + _presetDurationA = _presetDurationB; + } + + bool TimeKeeper::CanHardCut() + { + return ((_currentTime - _presetTimeA) > HARD_CUT_DELAY); + } + + double TimeKeeper::SmoothRatio() + { + return (_currentTime - _presetTimeB) / _smoothDuration; + } + bool TimeKeeper::IsSmoothing() + { + return _isSmoothing; + } + + double TimeKeeper::GetRunningTime() + { + return _currentTime; + } + + double TimeKeeper::PresetProgressA() + { + if (_isSmoothing) return 1.0; + else return (_currentTime - _presetTimeA) / _presetDurationA; + } + double TimeKeeper::PresetProgressB() + { + return (_currentTime - _presetTimeB) / _presetDurationB; + } + +int TimeKeeper::PresetFrameB() + { + return _presetFrameB; + } + +int TimeKeeper::PresetFrameA() + { + return _presetFrameA; + } + +double TimeKeeper::sampledPresetDuration() { +#ifdef WIN32 + return _presetDuration; +#else + return fmax(1, fmin(60, RandomNumberGenerators::gaussian + (_presetDuration, _easterEgg))); +#endif +} diff --git a/3rdparty/libprojectm/TimeKeeper.hpp b/3rdparty/libprojectm/TimeKeeper.hpp new file mode 100644 index 000000000..969d65b46 --- /dev/null +++ b/3rdparty/libprojectm/TimeKeeper.hpp @@ -0,0 +1,65 @@ +#ifndef TimeKeeper_HPP +#define TimeKeeper_HPP + +#ifndef WIN32 +#include +#endif + +#include "timer.h" + +#define HARD_CUT_DELAY 3 + +class TimeKeeper +{ + +public: + + TimeKeeper(double presetDuration, double smoothDuration, double easterEgg); + + void UpdateTimers(); + + void StartPreset(); + void StartSmoothing(); + void EndSmoothing(); + + bool CanHardCut(); + + double SmoothRatio(); + bool IsSmoothing(); + + double GetRunningTime(); + + double PresetProgressA(); + double PresetProgressB(); + + int PresetFrameA(); + int PresetFrameB(); + + double sampledPresetDuration(); + +#ifndef WIN32 + /* The first ticks value of the application */ + struct timeval startTime; +#else + long startTime; +#endif /** !WIN32 */ + +private: + + double _easterEgg; + double _presetDuration; + double _presetDurationA; + double _presetDurationB; + double _smoothDuration; + + double _currentTime; + double _presetTimeA; + double _presetTimeB; + int _presetFrameA; + int _presetFrameB; + + bool _isSmoothing; + + +}; +#endif diff --git a/3rdparty/libprojectm/carbontoprojectM.h b/3rdparty/libprojectm/carbontoprojectM.h new file mode 100755 index 000000000..42f1cdf4b --- /dev/null +++ b/3rdparty/libprojectm/carbontoprojectM.h @@ -0,0 +1,105 @@ +r/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id: carbontoprojectM.hpp,v 1.2 2004/11/12 15:12:58 cvs Exp $ + * + * Translates CARBON -> projectM variables + * + * $Log$ + */ + +#ifndef _CARBONTOPROJECTM_H +#define _CARBONTOPROJECTM_H + +#include "event.h" + +#ifdef WIN32 +#else +#endif + +projectMEvent carbon2pmEvent( EventRecord *event ) { + + switch ( event->what ) { + case updateEvt: + return PROJECTM_VIDEORESIZE; + case keyUp: + return PROJECTM_KEYUP; + case keyDown: + return PROJECTM_KEYDOWN; + default: + return PROJECTM_KEYUP; + } + } + +projectMKeycode carbon2pmKeycode( EventRecord *event ) { + projectMKeycode char_code = (projectMKeycode)(event->message & charCodeMask); + switch ( char_code ) { + case kFunctionKeyCharCode: { + switch ( ( event->message << 16 ) >> 24 ) { + case 111: { + return PROJECTM_K_F12; + } + case 103: { + return PROJECTM_K_F11; + } + case 109: { + return PROJECTM_K_F10; + } + case 101: { + return PROJECTM_K_F9; + } + case 100: { + return PROJECTM_K_F8; + } + case 98: { + return PROJECTM_K_F7; + } + case 97: { + return PROJECTM_K_F6; + } + case 96: { + return PROJECTM_K_F5; + } + case 118: { + return PROJECTM_K_F4; + } + case 99: { + return PROJECTM_K_F3; + } + case 120: { + return PROJECTM_K_F2; + } + case 122: { + return PROJECTM_K_F1; + } + } + } + default: { + return char_code; + } + } + } + +projectMModifier carbon2pmModifier( EventRecord *event ) { + return (projectMModifier)PROJECTM_K_LSHIFT; + } + +#endif /** _CARBONTOPROJECTM_H */ diff --git a/3rdparty/libprojectm/config.inp b/3rdparty/libprojectm/config.inp new file mode 100644 index 000000000..ce83ecd4a --- /dev/null +++ b/3rdparty/libprojectm/config.inp @@ -0,0 +1,22 @@ +# config.inp +# Configuration File for projectM + +Texture Size = 1024 # Size of internal rendering texture +Mesh X = 32 # Width of PerPixel Equation mesh +Mesh Y = 24 # Height of PerPixel Equation mesh +FPS = 35 # Frames Per Second +Fullscreen = false +Window Width = 512 # startup window width +Window Height = 512 # startup window height + +Smooth Transition Duration = 5 # in seconds +Preset Duration = 30 # in seconds +Easter Egg Parameter = 1 + +Hard Cut Sensitivity = 10 # Lower to make hard cuts more frequent +Aspect Correction = true # Custom Shape Aspect Correction + +Preset Path = /usr/local/share/projectM/presets # preset location +Title Font = /usr/local/share/projectM/fonts/Vera.ttf +Menu Font = /usr/local/share/projectM/fonts/VeraMono.ttf + diff --git a/3rdparty/libprojectm/config.inp.in b/3rdparty/libprojectm/config.inp.in new file mode 100644 index 000000000..b27b193d2 --- /dev/null +++ b/3rdparty/libprojectm/config.inp.in @@ -0,0 +1,22 @@ +# config.inp +# Configuration File for projectM + +Texture Size = 1024 # Size of internal rendering texture +Mesh X = 32 # Width of PerPixel Equation mesh +Mesh Y = 24 # Height of PerPixel Equation mesh +FPS = 35 # Frames Per Second +Fullscreen = false +Window Width = 512 # startup window width +Window Height = 512 # startup window height + +Smooth Transition Duration = 5 # in seconds +Preset Duration = 30 # in seconds +Easter Egg Parameter = 1 + +Hard Cut Sensitivity = 10 # Lower to make hard cuts more frequent +Aspect Correction = true # Custom Shape Aspect Correction + +Preset Path = @CMAKE_INSTALL_PREFIX@/@RESOURCE_PREFIX@/presets # preset location +Title Font = @CMAKE_INSTALL_PREFIX@/@RESOURCE_PREFIX@/fonts/Vera.ttf +Menu Font = @CMAKE_INSTALL_PREFIX@/@RESOURCE_PREFIX@/fonts/VeraMono.ttf + diff --git a/3rdparty/libprojectm/dlldefs.h b/3rdparty/libprojectm/dlldefs.h new file mode 100755 index 000000000..b944fe730 --- /dev/null +++ b/3rdparty/libprojectm/dlldefs.h @@ -0,0 +1,40 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id$ + * + * DLL definitions for exporting symbols on various platforms + * + * $Log$ + */ + +#ifndef _DLLDEFS_H +#define _DLLDEFS_H + +#ifndef DLLEXPORT +#ifdef WIN32 +#define DLLEXPORT __declspec(dllexport) +#else /** !WIN32 */ +#define DLLEXPORT +#endif /** WIN32 */ +#endif /** !DLLEXPORT */ + +#endif /** !_DLLDEFS_H */ diff --git a/3rdparty/libprojectm/event.h b/3rdparty/libprojectm/event.h new file mode 100755 index 000000000..c480926e3 --- /dev/null +++ b/3rdparty/libprojectm/event.h @@ -0,0 +1,151 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2004 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id: event.h,v 1.2 2004/10/08 10:54:27 cvs Exp $ + * + * projectM keycodes. Enables translation from various event schemes such as Win32, SDL + * &c. + * + * $Log: event.h,v $ + */ + +#ifndef _PROJECTM_EVENT_H +#define _PROJECTM_EVENT_H + +typedef enum { + /** Event types */ + PROJECTM_KEYUP, + PROJECTM_KEYDOWN, + PROJECTM_VIDEORESIZE, + PROJECTM_VIDEOQUIT, + } projectMEvent; + +typedef enum { + /** Keycodes */ + PROJECTM_K_RETURN, + PROJECTM_K_RIGHT, + PROJECTM_K_LEFT, + PROJECTM_K_UP, + PROJECTM_K_DOWN, + PROJECTM_K_PAGEUP, + PROJECTM_K_PAGEDOWN, + PROJECTM_K_INSERT, + PROJECTM_K_DELETE, + PROJECTM_K_ESCAPE, + PROJECTM_K_LSHIFT, + PROJECTM_K_RSHIFT, + PROJECTM_K_CAPSLOCK, + PROJECTM_K_LCTRL, + PROJECTM_K_HOME, + PROJECTM_K_END, + PROJECTM_K_BACKSPACE, + + PROJECTM_K_F1, + PROJECTM_K_F2, + PROJECTM_K_F3, + PROJECTM_K_F4, + PROJECTM_K_F5, + PROJECTM_K_F6, + PROJECTM_K_F7, + PROJECTM_K_F8, + PROJECTM_K_F9, + PROJECTM_K_F10, + PROJECTM_K_F11, + PROJECTM_K_F12, + + PROJECTM_K_0 = 48, + PROJECTM_K_1, + PROJECTM_K_2, + PROJECTM_K_3, + PROJECTM_K_4, + PROJECTM_K_5, + PROJECTM_K_6, + PROJECTM_K_7, + PROJECTM_K_8, + PROJECTM_K_9, + + PROJECTM_K_A = 65, + PROJECTM_K_B, + PROJECTM_K_C, + PROJECTM_K_D, + PROJECTM_K_E, + PROJECTM_K_F, + PROJECTM_K_G, + PROJECTM_K_H, + PROJECTM_K_I, + PROJECTM_K_J, + PROJECTM_K_K, + PROJECTM_K_L, + PROJECTM_K_M, + PROJECTM_K_N, + PROJECTM_K_O, + PROJECTM_K_P, + PROJECTM_K_Q, + PROJECTM_K_R, + PROJECTM_K_S, + PROJECTM_K_T, + PROJECTM_K_U, + PROJECTM_K_V, + PROJECTM_K_W, + PROJECTM_K_X, + PROJECTM_K_Y, + PROJECTM_K_Z, + + PROJECTM_K_a = 97, + PROJECTM_K_b, + PROJECTM_K_c, + PROJECTM_K_d, + PROJECTM_K_e, + PROJECTM_K_f, + PROJECTM_K_g, + PROJECTM_K_h, + PROJECTM_K_i, + PROJECTM_K_j, + PROJECTM_K_k, + PROJECTM_K_l, + PROJECTM_K_m, + PROJECTM_K_n, + PROJECTM_K_o, + PROJECTM_K_p, + PROJECTM_K_q, + PROJECTM_K_r, + PROJECTM_K_s, + PROJECTM_K_t, + PROJECTM_K_u, + PROJECTM_K_v, + PROJECTM_K_w, + PROJECTM_K_x, + PROJECTM_K_y, + PROJECTM_K_z, + PROJECTM_K_NONE, + } projectMKeycode; + +typedef enum { + /** Modifiers */ + PROJECTM_KMOD_LSHIFT, + PROJECTM_KMOD_RSHIFT, + PROJECTM_KMOD_CAPS, + PROJECTM_KMOD_LCTRL, + PROJECTM_KMOD_RCTRL, + } projectMModifier; + +#endif /** !_PROJECTM_EVENT_H */ + diff --git a/3rdparty/libprojectm/fatal.h b/3rdparty/libprojectm/fatal.h new file mode 100755 index 000000000..57a62850e --- /dev/null +++ b/3rdparty/libprojectm/fatal.h @@ -0,0 +1,43 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id: fatal.h,v 1.1.1.1 2005/12/23 18:05:05 psperl Exp $ + * + * Error codes + * + * $Log$ + */ + +#ifndef _FATAL_H +#define _FATAL_H + +/* Fatal Error Definitions */ + +#define PROJECTM_OUTOFMEM_ERROR -7; /* out of memory */ +#define PROJECTM_ERROR -1 /* non specific error */ +#define PROJECTM_SUCCESS 1 +#define PROJECTM_FAILURE -1 +#define PROJECTM_PARSE_ERROR -11 +#define PROJECTM_DIV_BY_ZERO -3 +#define PROJECTM_OK 2 + +#endif /** !_FATAL_H */ + diff --git a/3rdparty/libprojectm/fftsg.cpp b/3rdparty/libprojectm/fftsg.cpp new file mode 100755 index 000000000..d005f77c5 --- /dev/null +++ b/3rdparty/libprojectm/fftsg.cpp @@ -0,0 +1,3314 @@ +/* +Fast Fourier/Cosine/Sine Transform + dimension :one + data length :power of 2 + decimation :frequency + radix :split-radix + data :inplace + table :use +functions + cdft: Complex Discrete Fourier Transform + rdft: Real Discrete Fourier Transform + ddct: Discrete Cosine Transform + ddst: Discrete Sine Transform + dfct: Cosine Transform of RDFT (Real Symmetric DFT) + dfst: Sine Transform of RDFT (Real Anti-symmetric DFT) +function prototypes + void cdft(int, int, double *, int *, double *); + void rdft(int, int, double *, int *, double *); + void ddct(int, int, double *, int *, double *); + void ddst(int, int, double *, int *, double *); + void dfct(int, double *, double *, int *, double *); + void dfst(int, double *, double *, int *, double *); +macro definitions + USE_CDFT_PTHREADS : default=not defined + CDFT_THREADS_BEGIN_N : must be >= 512, default=8192 + CDFT_4THREADS_BEGIN_N : must be >= 512, default=65536 + USE_CDFT_WINTHREADS : default=not defined + CDFT_THREADS_BEGIN_N : must be >= 512, default=32768 + CDFT_4THREADS_BEGIN_N : must be >= 512, default=524288 + + +-------- Complex DFT (Discrete Fourier Transform) -------- + [definition] + + X[k] = sum_j=0^n-1 x[j]*exp(2*pi*i*j*k/n), 0<=k + X[k] = sum_j=0^n-1 x[j]*exp(-2*pi*i*j*k/n), 0<=k + ip[0] = 0; // first time only + cdft(2*n, 1, a, ip, w); + + ip[0] = 0; // first time only + cdft(2*n, -1, a, ip, w); + [parameters] + 2*n :data length (int) + n >= 1, n = power of 2 + a[0...2*n-1] :input/output data (double *) + input data + a[2*j] = Re(x[j]), + a[2*j+1] = Im(x[j]), 0<=j= 2+sqrt(n) + strictly, + length of ip >= + 2+(1<<(int)(log(n+0.5)/log(2))/2). + ip[0],ip[1] are pointers of the cos/sin table. + w[0...n/2-1] :cos/sin table (double *) + w[],ip[] are initialized if ip[0] == 0. + [remark] + Inverse of + cdft(2*n, -1, a, ip, w); + is + cdft(2*n, 1, a, ip, w); + for (j = 0; j <= 2 * n - 1; j++) { + a[j] *= 1.0 / n; + } + . + + +-------- Real DFT / Inverse of Real DFT -------- + [definition] + RDFT + R[k] = sum_j=0^n-1 a[j]*cos(2*pi*j*k/n), 0<=k<=n/2 + I[k] = sum_j=0^n-1 a[j]*sin(2*pi*j*k/n), 0 IRDFT (excluding scale) + a[k] = (R[0] + R[n/2]*cos(pi*k))/2 + + sum_j=1^n/2-1 R[j]*cos(2*pi*j*k/n) + + sum_j=1^n/2-1 I[j]*sin(2*pi*j*k/n), 0<=k + ip[0] = 0; // first time only + rdft(n, 1, a, ip, w); + + ip[0] = 0; // first time only + rdft(n, -1, a, ip, w); + [parameters] + n :data length (int) + n >= 2, n = power of 2 + a[0...n-1] :input/output data (double *) + + output data + a[2*k] = R[k], 0<=k + input data + a[2*j] = R[j], 0<=j= 2+sqrt(n/2) + strictly, + length of ip >= + 2+(1<<(int)(log(n/2+0.5)/log(2))/2). + ip[0],ip[1] are pointers of the cos/sin table. + w[0...n/2-1] :cos/sin table (double *) + w[],ip[] are initialized if ip[0] == 0. + [remark] + Inverse of + rdft(n, 1, a, ip, w); + is + rdft(n, -1, a, ip, w); + for (j = 0; j <= n - 1; j++) { + a[j] *= 2.0 / n; + } + . + + +-------- DCT (Discrete Cosine Transform) / Inverse of DCT -------- + [definition] + IDCT (excluding scale) + C[k] = sum_j=0^n-1 a[j]*cos(pi*j*(k+1/2)/n), 0<=k DCT + C[k] = sum_j=0^n-1 a[j]*cos(pi*(j+1/2)*k/n), 0<=k + ip[0] = 0; // first time only + ddct(n, 1, a, ip, w); + + ip[0] = 0; // first time only + ddct(n, -1, a, ip, w); + [parameters] + n :data length (int) + n >= 2, n = power of 2 + a[0...n-1] :input/output data (double *) + output data + a[k] = C[k], 0<=k= 2+sqrt(n/2) + strictly, + length of ip >= + 2+(1<<(int)(log(n/2+0.5)/log(2))/2). + ip[0],ip[1] are pointers of the cos/sin table. + w[0...n*5/4-1] :cos/sin table (double *) + w[],ip[] are initialized if ip[0] == 0. + [remark] + Inverse of + ddct(n, -1, a, ip, w); + is + a[0] *= 0.5; + ddct(n, 1, a, ip, w); + for (j = 0; j <= n - 1; j++) { + a[j] *= 2.0 / n; + } + . + + +-------- DST (Discrete Sine Transform) / Inverse of DST -------- + [definition] + IDST (excluding scale) + S[k] = sum_j=1^n A[j]*sin(pi*j*(k+1/2)/n), 0<=k DST + S[k] = sum_j=0^n-1 a[j]*sin(pi*(j+1/2)*k/n), 0 + ip[0] = 0; // first time only + ddst(n, 1, a, ip, w); + + ip[0] = 0; // first time only + ddst(n, -1, a, ip, w); + [parameters] + n :data length (int) + n >= 2, n = power of 2 + a[0...n-1] :input/output data (double *) + + input data + a[j] = A[j], 0 + output data + a[k] = S[k], 0= 2+sqrt(n/2) + strictly, + length of ip >= + 2+(1<<(int)(log(n/2+0.5)/log(2))/2). + ip[0],ip[1] are pointers of the cos/sin table. + w[0...n*5/4-1] :cos/sin table (double *) + w[],ip[] are initialized if ip[0] == 0. + [remark] + Inverse of + ddst(n, -1, a, ip, w); + is + a[0] *= 0.5; + ddst(n, 1, a, ip, w); + for (j = 0; j <= n - 1; j++) { + a[j] *= 2.0 / n; + } + . + + +-------- Cosine Transform of RDFT (Real Symmetric DFT) -------- + [definition] + C[k] = sum_j=0^n a[j]*cos(pi*j*k/n), 0<=k<=n + [usage] + ip[0] = 0; // first time only + dfct(n, a, t, ip, w); + [parameters] + n :data length - 1 (int) + n >= 2, n = power of 2 + a[0...n] :input/output data (double *) + output data + a[k] = C[k], 0<=k<=n + t[0...n/2] :work area (double *) + ip[0...*] :work area for bit reversal (int *) + length of ip >= 2+sqrt(n/4) + strictly, + length of ip >= + 2+(1<<(int)(log(n/4+0.5)/log(2))/2). + ip[0],ip[1] are pointers of the cos/sin table. + w[0...n*5/8-1] :cos/sin table (double *) + w[],ip[] are initialized if ip[0] == 0. + [remark] + Inverse of + a[0] *= 0.5; + a[n] *= 0.5; + dfct(n, a, t, ip, w); + is + a[0] *= 0.5; + a[n] *= 0.5; + dfct(n, a, t, ip, w); + for (j = 0; j <= n; j++) { + a[j] *= 2.0 / n; + } + . + + +-------- Sine Transform of RDFT (Real Anti-symmetric DFT) -------- + [definition] + S[k] = sum_j=1^n-1 a[j]*sin(pi*j*k/n), 0= 2, n = power of 2 + a[0...n-1] :input/output data (double *) + output data + a[k] = S[k], 0= 2+sqrt(n/4) + strictly, + length of ip >= + 2+(1<<(int)(log(n/4+0.5)/log(2))/2). + ip[0],ip[1] are pointers of the cos/sin table. + w[0...n*5/8-1] :cos/sin table (double *) + w[],ip[] are initialized if ip[0] == 0. + [remark] + Inverse of + dfst(n, a, t, ip, w); + is + dfst(n, a, t, ip, w); + for (j = 1; j <= n - 1; j++) { + a[j] *= 2.0 / n; + } + . + + +Appendix : + The cos/sin table is recalculated when the larger table required. + w[] and ip[] are compatible with all routines. +*/ + + +void cdft(int n, int isgn, double *a, int *ip, double *w) +{ + void makewt(int nw, int *ip, double *w); + void cftfsub(int n, double *a, int *ip, int nw, double *w); + void cftbsub(int n, double *a, int *ip, int nw, double *w); + int nw; + + nw = ip[0]; + if (n > (nw << 2)) { + nw = n >> 2; + makewt(nw, ip, w); + } + if (isgn >= 0) { + cftfsub(n, a, ip, nw, w); + } else { + cftbsub(n, a, ip, nw, w); + } +} + + +void rdft(int n, int isgn, double *a, int *ip, double *w) +{ + void makewt(int nw, int *ip, double *w); + void makect(int nc, int *ip, double *c); + void cftfsub(int n, double *a, int *ip, int nw, double *w); + void cftbsub(int n, double *a, int *ip, int nw, double *w); + void rftfsub(int n, double *a, int nc, double *c); + void rftbsub(int n, double *a, int nc, double *c); + int nw, nc; + double xi; + + nw = ip[0]; + if (n > (nw << 2)) { + nw = n >> 2; + makewt(nw, ip, w); + } + nc = ip[1]; + if (n > (nc << 2)) { + nc = n >> 2; + makect(nc, ip, w + nw); + } + if (isgn >= 0) { + if (n > 4) { + cftfsub(n, a, ip, nw, w); + rftfsub(n, a, nc, w + nw); + } else if (n == 4) { + cftfsub(n, a, ip, nw, w); + } + xi = a[0] - a[1]; + a[0] += a[1]; + a[1] = xi; + } else { + a[1] = 0.5 * (a[0] - a[1]); + a[0] -= a[1]; + if (n > 4) { + rftbsub(n, a, nc, w + nw); + cftbsub(n, a, ip, nw, w); + } else if (n == 4) { + cftbsub(n, a, ip, nw, w); + } + } +} + + +void ddct(int n, int isgn, double *a, int *ip, double *w) +{ + void makewt(int nw, int *ip, double *w); + void makect(int nc, int *ip, double *c); + void cftfsub(int n, double *a, int *ip, int nw, double *w); + void cftbsub(int n, double *a, int *ip, int nw, double *w); + void rftfsub(int n, double *a, int nc, double *c); + void rftbsub(int n, double *a, int nc, double *c); + void dctsub(int n, double *a, int nc, double *c); + int j, nw, nc; + double xr; + + nw = ip[0]; + if (n > (nw << 2)) { + nw = n >> 2; + makewt(nw, ip, w); + } + nc = ip[1]; + if (n > nc) { + nc = n; + makect(nc, ip, w + nw); + } + if (isgn < 0) { + xr = a[n - 1]; + for (j = n - 2; j >= 2; j -= 2) { + a[j + 1] = a[j] - a[j - 1]; + a[j] += a[j - 1]; + } + a[1] = a[0] - xr; + a[0] += xr; + if (n > 4) { + rftbsub(n, a, nc, w + nw); + cftbsub(n, a, ip, nw, w); + } else if (n == 4) { + cftbsub(n, a, ip, nw, w); + } + } + dctsub(n, a, nc, w + nw); + if (isgn >= 0) { + if (n > 4) { + cftfsub(n, a, ip, nw, w); + rftfsub(n, a, nc, w + nw); + } else if (n == 4) { + cftfsub(n, a, ip, nw, w); + } + xr = a[0] - a[1]; + a[0] += a[1]; + for (j = 2; j < n; j += 2) { + a[j - 1] = a[j] - a[j + 1]; + a[j] += a[j + 1]; + } + a[n - 1] = xr; + } +} + + +void ddst(int n, int isgn, double *a, int *ip, double *w) +{ + void makewt(int nw, int *ip, double *w); + void makect(int nc, int *ip, double *c); + void cftfsub(int n, double *a, int *ip, int nw, double *w); + void cftbsub(int n, double *a, int *ip, int nw, double *w); + void rftfsub(int n, double *a, int nc, double *c); + void rftbsub(int n, double *a, int nc, double *c); + void dstsub(int n, double *a, int nc, double *c); + int j, nw, nc; + double xr; + + nw = ip[0]; + if (n > (nw << 2)) { + nw = n >> 2; + makewt(nw, ip, w); + } + nc = ip[1]; + if (n > nc) { + nc = n; + makect(nc, ip, w + nw); + } + if (isgn < 0) { + xr = a[n - 1]; + for (j = n - 2; j >= 2; j -= 2) { + a[j + 1] = -a[j] - a[j - 1]; + a[j] -= a[j - 1]; + } + a[1] = a[0] + xr; + a[0] -= xr; + if (n > 4) { + rftbsub(n, a, nc, w + nw); + cftbsub(n, a, ip, nw, w); + } else if (n == 4) { + cftbsub(n, a, ip, nw, w); + } + } + dstsub(n, a, nc, w + nw); + if (isgn >= 0) { + if (n > 4) { + cftfsub(n, a, ip, nw, w); + rftfsub(n, a, nc, w + nw); + } else if (n == 4) { + cftfsub(n, a, ip, nw, w); + } + xr = a[0] - a[1]; + a[0] += a[1]; + for (j = 2; j < n; j += 2) { + a[j - 1] = -a[j] - a[j + 1]; + a[j] -= a[j + 1]; + } + a[n - 1] = -xr; + } +} + + +void dfct(int n, double *a, double *t, int *ip, double *w) +{ + void makewt(int nw, int *ip, double *w); + void makect(int nc, int *ip, double *c); + void cftfsub(int n, double *a, int *ip, int nw, double *w); + void rftfsub(int n, double *a, int nc, double *c); + void dctsub(int n, double *a, int nc, double *c); + int j, k, l, m, mh, nw, nc; + double xr, xi, yr, yi; + + nw = ip[0]; + if (n > (nw << 3)) { + nw = n >> 3; + makewt(nw, ip, w); + } + nc = ip[1]; + if (n > (nc << 1)) { + nc = n >> 1; + makect(nc, ip, w + nw); + } + m = n >> 1; + yi = a[m]; + xi = a[0] + a[n]; + a[0] -= a[n]; + t[0] = xi - yi; + t[m] = xi + yi; + if (n > 2) { + mh = m >> 1; + for (j = 1; j < mh; j++) { + k = m - j; + xr = a[j] - a[n - j]; + xi = a[j] + a[n - j]; + yr = a[k] - a[n - k]; + yi = a[k] + a[n - k]; + a[j] = xr; + a[k] = yr; + t[j] = xi - yi; + t[k] = xi + yi; + } + t[mh] = a[mh] + a[n - mh]; + a[mh] -= a[n - mh]; + dctsub(m, a, nc, w + nw); + if (m > 4) { + cftfsub(m, a, ip, nw, w); + rftfsub(m, a, nc, w + nw); + } else if (m == 4) { + cftfsub(m, a, ip, nw, w); + } + a[n - 1] = a[0] - a[1]; + a[1] = a[0] + a[1]; + for (j = m - 2; j >= 2; j -= 2) { + a[2 * j + 1] = a[j] + a[j + 1]; + a[2 * j - 1] = a[j] - a[j + 1]; + } + l = 2; + m = mh; + while (m >= 2) { + dctsub(m, t, nc, w + nw); + if (m > 4) { + cftfsub(m, t, ip, nw, w); + rftfsub(m, t, nc, w + nw); + } else if (m == 4) { + cftfsub(m, t, ip, nw, w); + } + a[n - l] = t[0] - t[1]; + a[l] = t[0] + t[1]; + k = 0; + for (j = 2; j < m; j += 2) { + k += l << 2; + a[k - l] = t[j] - t[j + 1]; + a[k + l] = t[j] + t[j + 1]; + } + l <<= 1; + mh = m >> 1; + for (j = 0; j < mh; j++) { + k = m - j; + t[j] = t[m + k] - t[m + j]; + t[k] = t[m + k] + t[m + j]; + } + t[mh] = t[m + mh]; + m = mh; + } + a[l] = t[0]; + a[n] = t[2] - t[1]; + a[0] = t[2] + t[1]; + } else { + a[1] = a[0]; + a[2] = t[0]; + a[0] = t[1]; + } +} + + +void dfst(int n, double *a, double *t, int *ip, double *w) +{ + void makewt(int nw, int *ip, double *w); + void makect(int nc, int *ip, double *c); + void cftfsub(int n, double *a, int *ip, int nw, double *w); + void rftfsub(int n, double *a, int nc, double *c); + void dstsub(int n, double *a, int nc, double *c); + int j, k, l, m, mh, nw, nc; + double xr, xi, yr, yi; + + nw = ip[0]; + if (n > (nw << 3)) { + nw = n >> 3; + makewt(nw, ip, w); + } + nc = ip[1]; + if (n > (nc << 1)) { + nc = n >> 1; + makect(nc, ip, w + nw); + } + if (n > 2) { + m = n >> 1; + mh = m >> 1; + for (j = 1; j < mh; j++) { + k = m - j; + xr = a[j] + a[n - j]; + xi = a[j] - a[n - j]; + yr = a[k] + a[n - k]; + yi = a[k] - a[n - k]; + a[j] = xr; + a[k] = yr; + t[j] = xi + yi; + t[k] = xi - yi; + } + t[0] = a[mh] - a[n - mh]; + a[mh] += a[n - mh]; + a[0] = a[m]; + dstsub(m, a, nc, w + nw); + if (m > 4) { + cftfsub(m, a, ip, nw, w); + rftfsub(m, a, nc, w + nw); + } else if (m == 4) { + cftfsub(m, a, ip, nw, w); + } + a[n - 1] = a[1] - a[0]; + a[1] = a[0] + a[1]; + for (j = m - 2; j >= 2; j -= 2) { + a[2 * j + 1] = a[j] - a[j + 1]; + a[2 * j - 1] = -a[j] - a[j + 1]; + } + l = 2; + m = mh; + while (m >= 2) { + dstsub(m, t, nc, w + nw); + if (m > 4) { + cftfsub(m, t, ip, nw, w); + rftfsub(m, t, nc, w + nw); + } else if (m == 4) { + cftfsub(m, t, ip, nw, w); + } + a[n - l] = t[1] - t[0]; + a[l] = t[0] + t[1]; + k = 0; + for (j = 2; j < m; j += 2) { + k += l << 2; + a[k - l] = -t[j] - t[j + 1]; + a[k + l] = t[j] - t[j + 1]; + } + l <<= 1; + mh = m >> 1; + for (j = 1; j < mh; j++) { + k = m - j; + t[j] = t[m + k] + t[m + j]; + t[k] = t[m + k] - t[m + j]; + } + t[0] = t[m + mh]; + m = mh; + } + a[l] = t[0]; + } + a[0] = 0; +} + + +/* -------- initializing routines -------- */ + + +#include + +void makewt(int nw, int *ip, double *w) +{ + void makeipt(int nw, int *ip); + int j, nwh, nw0, nw1; + double delta, wn4r, wk1r, wk1i, wk3r, wk3i; + + ip[0] = nw; + ip[1] = 1; + if (nw > 2) { + nwh = nw >> 1; + delta = atan(1.0) / nwh; + wn4r = cos(delta * nwh); + w[0] = 1; + w[1] = wn4r; + if (nwh == 4) { + w[2] = cos(delta * 2); + w[3] = sin(delta * 2); + } else if (nwh > 4) { + makeipt(nw, ip); + w[2] = 0.5 / cos(delta * 2); + w[3] = 0.5 / cos(delta * 6); + for (j = 4; j < nwh; j += 4) { + w[j] = cos(delta * j); + w[j + 1] = sin(delta * j); + w[j + 2] = cos(3 * delta * j); + w[j + 3] = -sin(3 * delta * j); + } + } + nw0 = 0; + while (nwh > 2) { + nw1 = nw0 + nwh; + nwh >>= 1; + w[nw1] = 1; + w[nw1 + 1] = wn4r; + if (nwh == 4) { + wk1r = w[nw0 + 4]; + wk1i = w[nw0 + 5]; + w[nw1 + 2] = wk1r; + w[nw1 + 3] = wk1i; + } else if (nwh > 4) { + wk1r = w[nw0 + 4]; + wk3r = w[nw0 + 6]; + w[nw1 + 2] = 0.5 / wk1r; + w[nw1 + 3] = 0.5 / wk3r; + for (j = 4; j < nwh; j += 4) { + wk1r = w[nw0 + 2 * j]; + wk1i = w[nw0 + 2 * j + 1]; + wk3r = w[nw0 + 2 * j + 2]; + wk3i = w[nw0 + 2 * j + 3]; + w[nw1 + j] = wk1r; + w[nw1 + j + 1] = wk1i; + w[nw1 + j + 2] = wk3r; + w[nw1 + j + 3] = wk3i; + } + } + nw0 = nw1; + } + } +} + + +void makeipt(int nw, int *ip) +{ + int j, l, m, m2, p, q; + + ip[2] = 0; + ip[3] = 16; + m = 2; + for (l = nw; l > 32; l >>= 2) { + m2 = m << 1; + q = m2 << 3; + for (j = m; j < m2; j++) { + p = ip[j] << 2; + ip[m + j] = p; + ip[m2 + j] = p + q; + } + m = m2; + } +} + + +void makect(int nc, int *ip, double *c) +{ + int j, nch; + double delta; + + ip[1] = nc; + if (nc > 1) { + nch = nc >> 1; + delta = atan(1.0) / nch; + c[0] = cos(delta * nch); + c[nch] = 0.5 * c[0]; + for (j = 1; j < nch; j++) { + c[j] = 0.5 * cos(delta * j); + c[nc - j] = 0.5 * sin(delta * j); + } + } +} + + +/* -------- child routines -------- */ + + +#ifdef USE_CDFT_PTHREADS +#define USE_CDFT_THREADS +#ifndef CDFT_THREADS_BEGIN_N +#define CDFT_THREADS_BEGIN_N 8192 +#endif +#ifndef CDFT_4THREADS_BEGIN_N +#define CDFT_4THREADS_BEGIN_N 65536 +#endif +#include +#include +#include +#define cdft_thread_t pthread_t +#define cdft_thread_create(thp,func,argp) { \ + if (pthread_create(thp, NULL, func, (void *) argp) != 0) { \ + fprintf(stderr, "cdft thread error\n"); \ + exit(1); \ + } \ +} +#define cdft_thread_wait(th) { \ + if (pthread_join(th, NULL) != 0) { \ + fprintf(stderr, "cdft thread error\n"); \ + exit(1); \ + } \ +} +#endif /* USE_CDFT_PTHREADS */ + + +#ifdef USE_CDFT_WINTHREADS +#define USE_CDFT_THREADS +#ifndef CDFT_THREADS_BEGIN_N +#define CDFT_THREADS_BEGIN_N 32768 +#endif +#ifndef CDFT_4THREADS_BEGIN_N +#define CDFT_4THREADS_BEGIN_N 524288 +#endif +#include +#include +#include +#define cdft_thread_t HANDLE +#define cdft_thread_create(thp,func,argp) { \ + DWORD thid; \ + *(thp) = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) func, (LPVOID) argp, 0, &thid); \ + if (*(thp) == 0) { \ + fprintf(stderr, "cdft thread error\n"); \ + exit(1); \ + } \ +} +#define cdft_thread_wait(th) { \ + WaitForSingleObject(th, INFINITE); \ + CloseHandle(th); \ +} +#endif /* USE_CDFT_WINTHREADS */ + + +void cftfsub(int n, double *a, int *ip, int nw, double *w) +{ + void bitrv2(int n, int *ip, double *a); + void bitrv216(double *a); + void bitrv208(double *a); + void cftf1st(int n, double *a, double *w); + void cftrec4(int n, double *a, int nw, double *w); + void cftleaf(int n, int isplt, double *a, int nw, double *w); + void cftfx41(int n, double *a, int nw, double *w); + void cftf161(double *a, double *w); + void cftf081(double *a, double *w); + void cftf040(double *a); + void cftx020(double *a); +#ifdef USE_CDFT_THREADS + void cftrec4_th(int n, double *a, int nw, double *w); +#endif /* USE_CDFT_THREADS */ + + if (n > 8) { + if (n > 32) { + cftf1st(n, a, &w[nw - (n >> 2)]); +#ifdef USE_CDFT_THREADS + if (n > CDFT_THREADS_BEGIN_N) { + cftrec4_th(n, a, nw, w); + } else +#endif /* USE_CDFT_THREADS */ + if (n > 512) { + cftrec4(n, a, nw, w); + } else if (n > 128) { + cftleaf(n, 1, a, nw, w); + } else { + cftfx41(n, a, nw, w); + } + bitrv2(n, ip, a); + } else if (n == 32) { + cftf161(a, &w[nw - 8]); + bitrv216(a); + } else { + cftf081(a, w); + bitrv208(a); + } + } else if (n == 8) { + cftf040(a); + } else if (n == 4) { + cftx020(a); + } +} + + +void cftbsub(int n, double *a, int *ip, int nw, double *w) +{ + void bitrv2conj(int n, int *ip, double *a); + void bitrv216neg(double *a); + void bitrv208neg(double *a); + void cftb1st(int n, double *a, double *w); + void cftrec4(int n, double *a, int nw, double *w); + void cftleaf(int n, int isplt, double *a, int nw, double *w); + void cftfx41(int n, double *a, int nw, double *w); + void cftf161(double *a, double *w); + void cftf081(double *a, double *w); + void cftb040(double *a); + void cftx020(double *a); +#ifdef USE_CDFT_THREADS + void cftrec4_th(int n, double *a, int nw, double *w); +#endif /* USE_CDFT_THREADS */ + + if (n > 8) { + if (n > 32) { + cftb1st(n, a, &w[nw - (n >> 2)]); +#ifdef USE_CDFT_THREADS + if (n > CDFT_THREADS_BEGIN_N) { + cftrec4_th(n, a, nw, w); + } else +#endif /* USE_CDFT_THREADS */ + if (n > 512) { + cftrec4(n, a, nw, w); + } else if (n > 128) { + cftleaf(n, 1, a, nw, w); + } else { + cftfx41(n, a, nw, w); + } + bitrv2conj(n, ip, a); + } else if (n == 32) { + cftf161(a, &w[nw - 8]); + bitrv216neg(a); + } else { + cftf081(a, w); + bitrv208neg(a); + } + } else if (n == 8) { + cftb040(a); + } else if (n == 4) { + cftx020(a); + } +} + + +void bitrv2(int n, int *ip, double *a) +{ + int j, j1, k, k1, l, m, nh, nm; + double xr, xi, yr, yi; + + m = 1; + for (l = n >> 2; l > 8; l >>= 2) { + m <<= 1; + } + nh = n >> 1; + nm = 4 * m; + if (l == 8) { + for (k = 0; k < m; k++) { + for (j = 0; j < k; j++) { + j1 = 4 * j + 2 * ip[m + k]; + k1 = 4 * k + 2 * ip[m + j]; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nm; + k1 += 2 * nm; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nm; + k1 -= nm; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nm; + k1 += 2 * nm; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nh; + k1 += 2; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nm; + k1 -= 2 * nm; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nm; + k1 += nm; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nm; + k1 -= 2 * nm; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += 2; + k1 += nh; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nm; + k1 += 2 * nm; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nm; + k1 -= nm; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nm; + k1 += 2 * nm; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nh; + k1 -= 2; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nm; + k1 -= 2 * nm; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nm; + k1 += nm; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nm; + k1 -= 2 * nm; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + } + k1 = 4 * k + 2 * ip[m + k]; + j1 = k1 + 2; + k1 += nh; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nm; + k1 += 2 * nm; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nm; + k1 -= nm; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= 2; + k1 -= nh; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nh + 2; + k1 += nh + 2; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nh - nm; + k1 += 2 * nm - 2; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + } + } else { + for (k = 0; k < m; k++) { + for (j = 0; j < k; j++) { + j1 = 4 * j + ip[m + k]; + k1 = 4 * k + ip[m + j]; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nm; + k1 += nm; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nh; + k1 += 2; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nm; + k1 -= nm; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += 2; + k1 += nh; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nm; + k1 += nm; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nh; + k1 -= 2; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nm; + k1 -= nm; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + } + k1 = 4 * k + ip[m + k]; + j1 = k1 + 2; + k1 += nh; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nm; + k1 += nm; + xr = a[j1]; + xi = a[j1 + 1]; + yr = a[k1]; + yi = a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + } + } +} + + +void bitrv2conj(int n, int *ip, double *a) +{ + int j, j1, k, k1, l, m, nh, nm; + double xr, xi, yr, yi; + + m = 1; + for (l = n >> 2; l > 8; l >>= 2) { + m <<= 1; + } + nh = n >> 1; + nm = 4 * m; + if (l == 8) { + for (k = 0; k < m; k++) { + for (j = 0; j < k; j++) { + j1 = 4 * j + 2 * ip[m + k]; + k1 = 4 * k + 2 * ip[m + j]; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nm; + k1 += 2 * nm; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nm; + k1 -= nm; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nm; + k1 += 2 * nm; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nh; + k1 += 2; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nm; + k1 -= 2 * nm; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nm; + k1 += nm; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nm; + k1 -= 2 * nm; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += 2; + k1 += nh; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nm; + k1 += 2 * nm; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nm; + k1 -= nm; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nm; + k1 += 2 * nm; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nh; + k1 -= 2; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nm; + k1 -= 2 * nm; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nm; + k1 += nm; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nm; + k1 -= 2 * nm; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + } + k1 = 4 * k + 2 * ip[m + k]; + j1 = k1 + 2; + k1 += nh; + a[j1 - 1] = -a[j1 - 1]; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + a[k1 + 3] = -a[k1 + 3]; + j1 += nm; + k1 += 2 * nm; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nm; + k1 -= nm; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= 2; + k1 -= nh; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nh + 2; + k1 += nh + 2; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nh - nm; + k1 += 2 * nm - 2; + a[j1 - 1] = -a[j1 - 1]; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + a[k1 + 3] = -a[k1 + 3]; + } + } else { + for (k = 0; k < m; k++) { + for (j = 0; j < k; j++) { + j1 = 4 * j + ip[m + k]; + k1 = 4 * k + ip[m + j]; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nm; + k1 += nm; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nh; + k1 += 2; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nm; + k1 -= nm; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += 2; + k1 += nh; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += nm; + k1 += nm; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nh; + k1 -= 2; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + j1 -= nm; + k1 -= nm; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + } + k1 = 4 * k + ip[m + k]; + j1 = k1 + 2; + k1 += nh; + a[j1 - 1] = -a[j1 - 1]; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + a[k1 + 3] = -a[k1 + 3]; + j1 += nm; + k1 += nm; + a[j1 - 1] = -a[j1 - 1]; + xr = a[j1]; + xi = -a[j1 + 1]; + yr = a[k1]; + yi = -a[k1 + 1]; + a[j1] = yr; + a[j1 + 1] = yi; + a[k1] = xr; + a[k1 + 1] = xi; + a[k1 + 3] = -a[k1 + 3]; + } + } +} + + +void bitrv216(double *a) +{ + double x1r, x1i, x2r, x2i, x3r, x3i, x4r, x4i, + x5r, x5i, x7r, x7i, x8r, x8i, x10r, x10i, + x11r, x11i, x12r, x12i, x13r, x13i, x14r, x14i; + + x1r = a[2]; + x1i = a[3]; + x2r = a[4]; + x2i = a[5]; + x3r = a[6]; + x3i = a[7]; + x4r = a[8]; + x4i = a[9]; + x5r = a[10]; + x5i = a[11]; + x7r = a[14]; + x7i = a[15]; + x8r = a[16]; + x8i = a[17]; + x10r = a[20]; + x10i = a[21]; + x11r = a[22]; + x11i = a[23]; + x12r = a[24]; + x12i = a[25]; + x13r = a[26]; + x13i = a[27]; + x14r = a[28]; + x14i = a[29]; + a[2] = x8r; + a[3] = x8i; + a[4] = x4r; + a[5] = x4i; + a[6] = x12r; + a[7] = x12i; + a[8] = x2r; + a[9] = x2i; + a[10] = x10r; + a[11] = x10i; + a[14] = x14r; + a[15] = x14i; + a[16] = x1r; + a[17] = x1i; + a[20] = x5r; + a[21] = x5i; + a[22] = x13r; + a[23] = x13i; + a[24] = x3r; + a[25] = x3i; + a[26] = x11r; + a[27] = x11i; + a[28] = x7r; + a[29] = x7i; +} + + +void bitrv216neg(double *a) +{ + double x1r, x1i, x2r, x2i, x3r, x3i, x4r, x4i, + x5r, x5i, x6r, x6i, x7r, x7i, x8r, x8i, + x9r, x9i, x10r, x10i, x11r, x11i, x12r, x12i, + x13r, x13i, x14r, x14i, x15r, x15i; + + x1r = a[2]; + x1i = a[3]; + x2r = a[4]; + x2i = a[5]; + x3r = a[6]; + x3i = a[7]; + x4r = a[8]; + x4i = a[9]; + x5r = a[10]; + x5i = a[11]; + x6r = a[12]; + x6i = a[13]; + x7r = a[14]; + x7i = a[15]; + x8r = a[16]; + x8i = a[17]; + x9r = a[18]; + x9i = a[19]; + x10r = a[20]; + x10i = a[21]; + x11r = a[22]; + x11i = a[23]; + x12r = a[24]; + x12i = a[25]; + x13r = a[26]; + x13i = a[27]; + x14r = a[28]; + x14i = a[29]; + x15r = a[30]; + x15i = a[31]; + a[2] = x15r; + a[3] = x15i; + a[4] = x7r; + a[5] = x7i; + a[6] = x11r; + a[7] = x11i; + a[8] = x3r; + a[9] = x3i; + a[10] = x13r; + a[11] = x13i; + a[12] = x5r; + a[13] = x5i; + a[14] = x9r; + a[15] = x9i; + a[16] = x1r; + a[17] = x1i; + a[18] = x14r; + a[19] = x14i; + a[20] = x6r; + a[21] = x6i; + a[22] = x10r; + a[23] = x10i; + a[24] = x2r; + a[25] = x2i; + a[26] = x12r; + a[27] = x12i; + a[28] = x4r; + a[29] = x4i; + a[30] = x8r; + a[31] = x8i; +} + + +void bitrv208(double *a) +{ + double x1r, x1i, x3r, x3i, x4r, x4i, x6r, x6i; + + x1r = a[2]; + x1i = a[3]; + x3r = a[6]; + x3i = a[7]; + x4r = a[8]; + x4i = a[9]; + x6r = a[12]; + x6i = a[13]; + a[2] = x4r; + a[3] = x4i; + a[6] = x6r; + a[7] = x6i; + a[8] = x1r; + a[9] = x1i; + a[12] = x3r; + a[13] = x3i; +} + + +void bitrv208neg(double *a) +{ + double x1r, x1i, x2r, x2i, x3r, x3i, x4r, x4i, + x5r, x5i, x6r, x6i, x7r, x7i; + + x1r = a[2]; + x1i = a[3]; + x2r = a[4]; + x2i = a[5]; + x3r = a[6]; + x3i = a[7]; + x4r = a[8]; + x4i = a[9]; + x5r = a[10]; + x5i = a[11]; + x6r = a[12]; + x6i = a[13]; + x7r = a[14]; + x7i = a[15]; + a[2] = x7r; + a[3] = x7i; + a[4] = x3r; + a[5] = x3i; + a[6] = x5r; + a[7] = x5i; + a[8] = x1r; + a[9] = x1i; + a[10] = x6r; + a[11] = x6i; + a[12] = x2r; + a[13] = x2i; + a[14] = x4r; + a[15] = x4i; +} + + +void cftf1st(int n, double *a, double *w) +{ + int j, j0, j1, j2, j3, k, m, mh; + double wn4r, csc1, csc3, wk1r, wk1i, wk3r, wk3i, + wd1r, wd1i, wd3r, wd3i; + double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i, + y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i; + + mh = n >> 3; + m = 2 * mh; + j1 = m; + j2 = j1 + m; + j3 = j2 + m; + x0r = a[0] + a[j2]; + x0i = a[1] + a[j2 + 1]; + x1r = a[0] - a[j2]; + x1i = a[1] - a[j2 + 1]; + x2r = a[j1] + a[j3]; + x2i = a[j1 + 1] + a[j3 + 1]; + x3r = a[j1] - a[j3]; + x3i = a[j1 + 1] - a[j3 + 1]; + a[0] = x0r + x2r; + a[1] = x0i + x2i; + a[j1] = x0r - x2r; + a[j1 + 1] = x0i - x2i; + a[j2] = x1r - x3i; + a[j2 + 1] = x1i + x3r; + a[j3] = x1r + x3i; + a[j3 + 1] = x1i - x3r; + wn4r = w[1]; + csc1 = w[2]; + csc3 = w[3]; + wd1r = 1; + wd1i = 0; + wd3r = 1; + wd3i = 0; + k = 0; + for (j = 2; j < mh - 2; j += 4) { + k += 4; + wk1r = csc1 * (wd1r + w[k]); + wk1i = csc1 * (wd1i + w[k + 1]); + wk3r = csc3 * (wd3r + w[k + 2]); + wk3i = csc3 * (wd3i + w[k + 3]); + wd1r = w[k]; + wd1i = w[k + 1]; + wd3r = w[k + 2]; + wd3i = w[k + 3]; + j1 = j + m; + j2 = j1 + m; + j3 = j2 + m; + x0r = a[j] + a[j2]; + x0i = a[j + 1] + a[j2 + 1]; + x1r = a[j] - a[j2]; + x1i = a[j + 1] - a[j2 + 1]; + y0r = a[j + 2] + a[j2 + 2]; + y0i = a[j + 3] + a[j2 + 3]; + y1r = a[j + 2] - a[j2 + 2]; + y1i = a[j + 3] - a[j2 + 3]; + x2r = a[j1] + a[j3]; + x2i = a[j1 + 1] + a[j3 + 1]; + x3r = a[j1] - a[j3]; + x3i = a[j1 + 1] - a[j3 + 1]; + y2r = a[j1 + 2] + a[j3 + 2]; + y2i = a[j1 + 3] + a[j3 + 3]; + y3r = a[j1 + 2] - a[j3 + 2]; + y3i = a[j1 + 3] - a[j3 + 3]; + a[j] = x0r + x2r; + a[j + 1] = x0i + x2i; + a[j + 2] = y0r + y2r; + a[j + 3] = y0i + y2i; + a[j1] = x0r - x2r; + a[j1 + 1] = x0i - x2i; + a[j1 + 2] = y0r - y2r; + a[j1 + 3] = y0i - y2i; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j2] = wk1r * x0r - wk1i * x0i; + a[j2 + 1] = wk1r * x0i + wk1i * x0r; + x0r = y1r - y3i; + x0i = y1i + y3r; + a[j2 + 2] = wd1r * x0r - wd1i * x0i; + a[j2 + 3] = wd1r * x0i + wd1i * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j3] = wk3r * x0r + wk3i * x0i; + a[j3 + 1] = wk3r * x0i - wk3i * x0r; + x0r = y1r + y3i; + x0i = y1i - y3r; + a[j3 + 2] = wd3r * x0r + wd3i * x0i; + a[j3 + 3] = wd3r * x0i - wd3i * x0r; + j0 = m - j; + j1 = j0 + m; + j2 = j1 + m; + j3 = j2 + m; + x0r = a[j0] + a[j2]; + x0i = a[j0 + 1] + a[j2 + 1]; + x1r = a[j0] - a[j2]; + x1i = a[j0 + 1] - a[j2 + 1]; + y0r = a[j0 - 2] + a[j2 - 2]; + y0i = a[j0 - 1] + a[j2 - 1]; + y1r = a[j0 - 2] - a[j2 - 2]; + y1i = a[j0 - 1] - a[j2 - 1]; + x2r = a[j1] + a[j3]; + x2i = a[j1 + 1] + a[j3 + 1]; + x3r = a[j1] - a[j3]; + x3i = a[j1 + 1] - a[j3 + 1]; + y2r = a[j1 - 2] + a[j3 - 2]; + y2i = a[j1 - 1] + a[j3 - 1]; + y3r = a[j1 - 2] - a[j3 - 2]; + y3i = a[j1 - 1] - a[j3 - 1]; + a[j0] = x0r + x2r; + a[j0 + 1] = x0i + x2i; + a[j0 - 2] = y0r + y2r; + a[j0 - 1] = y0i + y2i; + a[j1] = x0r - x2r; + a[j1 + 1] = x0i - x2i; + a[j1 - 2] = y0r - y2r; + a[j1 - 1] = y0i - y2i; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j2] = wk1i * x0r - wk1r * x0i; + a[j2 + 1] = wk1i * x0i + wk1r * x0r; + x0r = y1r - y3i; + x0i = y1i + y3r; + a[j2 - 2] = wd1i * x0r - wd1r * x0i; + a[j2 - 1] = wd1i * x0i + wd1r * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j3] = wk3i * x0r + wk3r * x0i; + a[j3 + 1] = wk3i * x0i - wk3r * x0r; + x0r = y1r + y3i; + x0i = y1i - y3r; + a[j3 - 2] = wd3i * x0r + wd3r * x0i; + a[j3 - 1] = wd3i * x0i - wd3r * x0r; + } + wk1r = csc1 * (wd1r + wn4r); + wk1i = csc1 * (wd1i + wn4r); + wk3r = csc3 * (wd3r - wn4r); + wk3i = csc3 * (wd3i - wn4r); + j0 = mh; + j1 = j0 + m; + j2 = j1 + m; + j3 = j2 + m; + x0r = a[j0 - 2] + a[j2 - 2]; + x0i = a[j0 - 1] + a[j2 - 1]; + x1r = a[j0 - 2] - a[j2 - 2]; + x1i = a[j0 - 1] - a[j2 - 1]; + x2r = a[j1 - 2] + a[j3 - 2]; + x2i = a[j1 - 1] + a[j3 - 1]; + x3r = a[j1 - 2] - a[j3 - 2]; + x3i = a[j1 - 1] - a[j3 - 1]; + a[j0 - 2] = x0r + x2r; + a[j0 - 1] = x0i + x2i; + a[j1 - 2] = x0r - x2r; + a[j1 - 1] = x0i - x2i; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j2 - 2] = wk1r * x0r - wk1i * x0i; + a[j2 - 1] = wk1r * x0i + wk1i * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j3 - 2] = wk3r * x0r + wk3i * x0i; + a[j3 - 1] = wk3r * x0i - wk3i * x0r; + x0r = a[j0] + a[j2]; + x0i = a[j0 + 1] + a[j2 + 1]; + x1r = a[j0] - a[j2]; + x1i = a[j0 + 1] - a[j2 + 1]; + x2r = a[j1] + a[j3]; + x2i = a[j1 + 1] + a[j3 + 1]; + x3r = a[j1] - a[j3]; + x3i = a[j1 + 1] - a[j3 + 1]; + a[j0] = x0r + x2r; + a[j0 + 1] = x0i + x2i; + a[j1] = x0r - x2r; + a[j1 + 1] = x0i - x2i; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j2] = wn4r * (x0r - x0i); + a[j2 + 1] = wn4r * (x0i + x0r); + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j3] = -wn4r * (x0r + x0i); + a[j3 + 1] = -wn4r * (x0i - x0r); + x0r = a[j0 + 2] + a[j2 + 2]; + x0i = a[j0 + 3] + a[j2 + 3]; + x1r = a[j0 + 2] - a[j2 + 2]; + x1i = a[j0 + 3] - a[j2 + 3]; + x2r = a[j1 + 2] + a[j3 + 2]; + x2i = a[j1 + 3] + a[j3 + 3]; + x3r = a[j1 + 2] - a[j3 + 2]; + x3i = a[j1 + 3] - a[j3 + 3]; + a[j0 + 2] = x0r + x2r; + a[j0 + 3] = x0i + x2i; + a[j1 + 2] = x0r - x2r; + a[j1 + 3] = x0i - x2i; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j2 + 2] = wk1i * x0r - wk1r * x0i; + a[j2 + 3] = wk1i * x0i + wk1r * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j3 + 2] = wk3i * x0r + wk3r * x0i; + a[j3 + 3] = wk3i * x0i - wk3r * x0r; +} + + +void cftb1st(int n, double *a, double *w) +{ + int j, j0, j1, j2, j3, k, m, mh; + double wn4r, csc1, csc3, wk1r, wk1i, wk3r, wk3i, + wd1r, wd1i, wd3r, wd3i; + double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i, + y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i; + + mh = n >> 3; + m = 2 * mh; + j1 = m; + j2 = j1 + m; + j3 = j2 + m; + x0r = a[0] + a[j2]; + x0i = -a[1] - a[j2 + 1]; + x1r = a[0] - a[j2]; + x1i = -a[1] + a[j2 + 1]; + x2r = a[j1] + a[j3]; + x2i = a[j1 + 1] + a[j3 + 1]; + x3r = a[j1] - a[j3]; + x3i = a[j1 + 1] - a[j3 + 1]; + a[0] = x0r + x2r; + a[1] = x0i - x2i; + a[j1] = x0r - x2r; + a[j1 + 1] = x0i + x2i; + a[j2] = x1r + x3i; + a[j2 + 1] = x1i + x3r; + a[j3] = x1r - x3i; + a[j3 + 1] = x1i - x3r; + wn4r = w[1]; + csc1 = w[2]; + csc3 = w[3]; + wd1r = 1; + wd1i = 0; + wd3r = 1; + wd3i = 0; + k = 0; + for (j = 2; j < mh - 2; j += 4) { + k += 4; + wk1r = csc1 * (wd1r + w[k]); + wk1i = csc1 * (wd1i + w[k + 1]); + wk3r = csc3 * (wd3r + w[k + 2]); + wk3i = csc3 * (wd3i + w[k + 3]); + wd1r = w[k]; + wd1i = w[k + 1]; + wd3r = w[k + 2]; + wd3i = w[k + 3]; + j1 = j + m; + j2 = j1 + m; + j3 = j2 + m; + x0r = a[j] + a[j2]; + x0i = -a[j + 1] - a[j2 + 1]; + x1r = a[j] - a[j2]; + x1i = -a[j + 1] + a[j2 + 1]; + y0r = a[j + 2] + a[j2 + 2]; + y0i = -a[j + 3] - a[j2 + 3]; + y1r = a[j + 2] - a[j2 + 2]; + y1i = -a[j + 3] + a[j2 + 3]; + x2r = a[j1] + a[j3]; + x2i = a[j1 + 1] + a[j3 + 1]; + x3r = a[j1] - a[j3]; + x3i = a[j1 + 1] - a[j3 + 1]; + y2r = a[j1 + 2] + a[j3 + 2]; + y2i = a[j1 + 3] + a[j3 + 3]; + y3r = a[j1 + 2] - a[j3 + 2]; + y3i = a[j1 + 3] - a[j3 + 3]; + a[j] = x0r + x2r; + a[j + 1] = x0i - x2i; + a[j + 2] = y0r + y2r; + a[j + 3] = y0i - y2i; + a[j1] = x0r - x2r; + a[j1 + 1] = x0i + x2i; + a[j1 + 2] = y0r - y2r; + a[j1 + 3] = y0i + y2i; + x0r = x1r + x3i; + x0i = x1i + x3r; + a[j2] = wk1r * x0r - wk1i * x0i; + a[j2 + 1] = wk1r * x0i + wk1i * x0r; + x0r = y1r + y3i; + x0i = y1i + y3r; + a[j2 + 2] = wd1r * x0r - wd1i * x0i; + a[j2 + 3] = wd1r * x0i + wd1i * x0r; + x0r = x1r - x3i; + x0i = x1i - x3r; + a[j3] = wk3r * x0r + wk3i * x0i; + a[j3 + 1] = wk3r * x0i - wk3i * x0r; + x0r = y1r - y3i; + x0i = y1i - y3r; + a[j3 + 2] = wd3r * x0r + wd3i * x0i; + a[j3 + 3] = wd3r * x0i - wd3i * x0r; + j0 = m - j; + j1 = j0 + m; + j2 = j1 + m; + j3 = j2 + m; + x0r = a[j0] + a[j2]; + x0i = -a[j0 + 1] - a[j2 + 1]; + x1r = a[j0] - a[j2]; + x1i = -a[j0 + 1] + a[j2 + 1]; + y0r = a[j0 - 2] + a[j2 - 2]; + y0i = -a[j0 - 1] - a[j2 - 1]; + y1r = a[j0 - 2] - a[j2 - 2]; + y1i = -a[j0 - 1] + a[j2 - 1]; + x2r = a[j1] + a[j3]; + x2i = a[j1 + 1] + a[j3 + 1]; + x3r = a[j1] - a[j3]; + x3i = a[j1 + 1] - a[j3 + 1]; + y2r = a[j1 - 2] + a[j3 - 2]; + y2i = a[j1 - 1] + a[j3 - 1]; + y3r = a[j1 - 2] - a[j3 - 2]; + y3i = a[j1 - 1] - a[j3 - 1]; + a[j0] = x0r + x2r; + a[j0 + 1] = x0i - x2i; + a[j0 - 2] = y0r + y2r; + a[j0 - 1] = y0i - y2i; + a[j1] = x0r - x2r; + a[j1 + 1] = x0i + x2i; + a[j1 - 2] = y0r - y2r; + a[j1 - 1] = y0i + y2i; + x0r = x1r + x3i; + x0i = x1i + x3r; + a[j2] = wk1i * x0r - wk1r * x0i; + a[j2 + 1] = wk1i * x0i + wk1r * x0r; + x0r = y1r + y3i; + x0i = y1i + y3r; + a[j2 - 2] = wd1i * x0r - wd1r * x0i; + a[j2 - 1] = wd1i * x0i + wd1r * x0r; + x0r = x1r - x3i; + x0i = x1i - x3r; + a[j3] = wk3i * x0r + wk3r * x0i; + a[j3 + 1] = wk3i * x0i - wk3r * x0r; + x0r = y1r - y3i; + x0i = y1i - y3r; + a[j3 - 2] = wd3i * x0r + wd3r * x0i; + a[j3 - 1] = wd3i * x0i - wd3r * x0r; + } + wk1r = csc1 * (wd1r + wn4r); + wk1i = csc1 * (wd1i + wn4r); + wk3r = csc3 * (wd3r - wn4r); + wk3i = csc3 * (wd3i - wn4r); + j0 = mh; + j1 = j0 + m; + j2 = j1 + m; + j3 = j2 + m; + x0r = a[j0 - 2] + a[j2 - 2]; + x0i = -a[j0 - 1] - a[j2 - 1]; + x1r = a[j0 - 2] - a[j2 - 2]; + x1i = -a[j0 - 1] + a[j2 - 1]; + x2r = a[j1 - 2] + a[j3 - 2]; + x2i = a[j1 - 1] + a[j3 - 1]; + x3r = a[j1 - 2] - a[j3 - 2]; + x3i = a[j1 - 1] - a[j3 - 1]; + a[j0 - 2] = x0r + x2r; + a[j0 - 1] = x0i - x2i; + a[j1 - 2] = x0r - x2r; + a[j1 - 1] = x0i + x2i; + x0r = x1r + x3i; + x0i = x1i + x3r; + a[j2 - 2] = wk1r * x0r - wk1i * x0i; + a[j2 - 1] = wk1r * x0i + wk1i * x0r; + x0r = x1r - x3i; + x0i = x1i - x3r; + a[j3 - 2] = wk3r * x0r + wk3i * x0i; + a[j3 - 1] = wk3r * x0i - wk3i * x0r; + x0r = a[j0] + a[j2]; + x0i = -a[j0 + 1] - a[j2 + 1]; + x1r = a[j0] - a[j2]; + x1i = -a[j0 + 1] + a[j2 + 1]; + x2r = a[j1] + a[j3]; + x2i = a[j1 + 1] + a[j3 + 1]; + x3r = a[j1] - a[j3]; + x3i = a[j1 + 1] - a[j3 + 1]; + a[j0] = x0r + x2r; + a[j0 + 1] = x0i - x2i; + a[j1] = x0r - x2r; + a[j1 + 1] = x0i + x2i; + x0r = x1r + x3i; + x0i = x1i + x3r; + a[j2] = wn4r * (x0r - x0i); + a[j2 + 1] = wn4r * (x0i + x0r); + x0r = x1r - x3i; + x0i = x1i - x3r; + a[j3] = -wn4r * (x0r + x0i); + a[j3 + 1] = -wn4r * (x0i - x0r); + x0r = a[j0 + 2] + a[j2 + 2]; + x0i = -a[j0 + 3] - a[j2 + 3]; + x1r = a[j0 + 2] - a[j2 + 2]; + x1i = -a[j0 + 3] + a[j2 + 3]; + x2r = a[j1 + 2] + a[j3 + 2]; + x2i = a[j1 + 3] + a[j3 + 3]; + x3r = a[j1 + 2] - a[j3 + 2]; + x3i = a[j1 + 3] - a[j3 + 3]; + a[j0 + 2] = x0r + x2r; + a[j0 + 3] = x0i - x2i; + a[j1 + 2] = x0r - x2r; + a[j1 + 3] = x0i + x2i; + x0r = x1r + x3i; + x0i = x1i + x3r; + a[j2 + 2] = wk1i * x0r - wk1r * x0i; + a[j2 + 3] = wk1i * x0i + wk1r * x0r; + x0r = x1r - x3i; + x0i = x1i - x3r; + a[j3 + 2] = wk3i * x0r + wk3r * x0i; + a[j3 + 3] = wk3i * x0i - wk3r * x0r; +} + + +#ifdef USE_CDFT_THREADS +struct cdft_arg_st { + int n0; + int n; + double *a; + int nw; + double *w; +}; +typedef struct cdft_arg_st cdft_arg_t; + + +void cftrec4_th(int n, double *a, int nw, double *w) +{ + void *cftrec1_th(void *p); + void *cftrec2_th(void *p); + int i, idiv4, m, nthread; + cdft_thread_t th[4]; + cdft_arg_t ag[4]; + + nthread = 2; + idiv4 = 0; + m = n >> 1; + if (n > CDFT_4THREADS_BEGIN_N) { + nthread = 4; + idiv4 = 1; + m >>= 1; + } + for (i = 0; i < nthread; i++) { + ag[i].n0 = n; + ag[i].n = m; + ag[i].a = &a[i * m]; + ag[i].nw = nw; + ag[i].w = w; + if (i != idiv4) { + cdft_thread_create(&th[i], cftrec1_th, &ag[i]); + } else { + cdft_thread_create(&th[i], cftrec2_th, &ag[i]); + } + } + for (i = 0; i < nthread; i++) { + cdft_thread_wait(th[i]); + } +} + + +void *cftrec1_th(void *p) +{ + int cfttree(int n, int j, int k, double *a, int nw, double *w); + void cftleaf(int n, int isplt, double *a, int nw, double *w); + void cftmdl1(int n, double *a, double *w); + int isplt, j, k, m, n, n0, nw; + double *a, *w; + + n0 = ((cdft_arg_t *) p)->n0; + n = ((cdft_arg_t *) p)->n; + a = ((cdft_arg_t *) p)->a; + nw = ((cdft_arg_t *) p)->nw; + w = ((cdft_arg_t *) p)->w; + m = n0; + while (m > 512) { + m >>= 2; + cftmdl1(m, &a[n - m], &w[nw - (m >> 1)]); + } + cftleaf(m, 1, &a[n - m], nw, w); + k = 0; + for (j = n - m; j > 0; j -= m) { + k++; + isplt = cfttree(m, j, k, a, nw, w); + cftleaf(m, isplt, &a[j - m], nw, w); + } + return (void *) 0; +} + + +void *cftrec2_th(void *p) +{ + int cfttree(int n, int j, int k, double *a, int nw, double *w); + void cftleaf(int n, int isplt, double *a, int nw, double *w); + void cftmdl2(int n, double *a, double *w); + int isplt, j, k, m, n, n0, nw; + double *a, *w; + + n0 = ((cdft_arg_t *) p)->n0; + n = ((cdft_arg_t *) p)->n; + a = ((cdft_arg_t *) p)->a; + nw = ((cdft_arg_t *) p)->nw; + w = ((cdft_arg_t *) p)->w; + k = 1; + m = n0; + while (m > 512) { + m >>= 2; + k <<= 2; + cftmdl2(m, &a[n - m], &w[nw - m]); + } + cftleaf(m, 0, &a[n - m], nw, w); + k >>= 1; + for (j = n - m; j > 0; j -= m) { + k++; + isplt = cfttree(m, j, k, a, nw, w); + cftleaf(m, isplt, &a[j - m], nw, w); + } + return (void *) 0; +} +#endif /* USE_CDFT_THREADS */ + + +void cftrec4(int n, double *a, int nw, double *w) +{ + int cfttree(int n, int j, int k, double *a, int nw, double *w); + void cftleaf(int n, int isplt, double *a, int nw, double *w); + void cftmdl1(int n, double *a, double *w); + int isplt, j, k, m; + + m = n; + while (m > 512) { + m >>= 2; + cftmdl1(m, &a[n - m], &w[nw - (m >> 1)]); + } + cftleaf(m, 1, &a[n - m], nw, w); + k = 0; + for (j = n - m; j > 0; j -= m) { + k++; + isplt = cfttree(m, j, k, a, nw, w); + cftleaf(m, isplt, &a[j - m], nw, w); + } +} + + +int cfttree(int n, int j, int k, double *a, int nw, double *w) +{ + void cftmdl1(int n, double *a, double *w); + void cftmdl2(int n, double *a, double *w); + int i, isplt, m; + + if ((k & 3) != 0) { + isplt = k & 1; + if (isplt != 0) { + cftmdl1(n, &a[j - n], &w[nw - (n >> 1)]); + } else { + cftmdl2(n, &a[j - n], &w[nw - n]); + } + } else { + m = n; + for (i = k; (i & 3) == 0; i >>= 2) { + m <<= 2; + } + isplt = i & 1; + if (isplt != 0) { + while (m > 128) { + cftmdl1(m, &a[j - m], &w[nw - (m >> 1)]); + m >>= 2; + } + } else { + while (m > 128) { + cftmdl2(m, &a[j - m], &w[nw - m]); + m >>= 2; + } + } + } + return isplt; +} + + +void cftleaf(int n, int isplt, double *a, int nw, double *w) +{ + void cftmdl1(int n, double *a, double *w); + void cftmdl2(int n, double *a, double *w); + void cftf161(double *a, double *w); + void cftf162(double *a, double *w); + void cftf081(double *a, double *w); + void cftf082(double *a, double *w); + + if (n == 512) { + cftmdl1(128, a, &w[nw - 64]); + cftf161(a, &w[nw - 8]); + cftf162(&a[32], &w[nw - 32]); + cftf161(&a[64], &w[nw - 8]); + cftf161(&a[96], &w[nw - 8]); + cftmdl2(128, &a[128], &w[nw - 128]); + cftf161(&a[128], &w[nw - 8]); + cftf162(&a[160], &w[nw - 32]); + cftf161(&a[192], &w[nw - 8]); + cftf162(&a[224], &w[nw - 32]); + cftmdl1(128, &a[256], &w[nw - 64]); + cftf161(&a[256], &w[nw - 8]); + cftf162(&a[288], &w[nw - 32]); + cftf161(&a[320], &w[nw - 8]); + cftf161(&a[352], &w[nw - 8]); + if (isplt != 0) { + cftmdl1(128, &a[384], &w[nw - 64]); + cftf161(&a[480], &w[nw - 8]); + } else { + cftmdl2(128, &a[384], &w[nw - 128]); + cftf162(&a[480], &w[nw - 32]); + } + cftf161(&a[384], &w[nw - 8]); + cftf162(&a[416], &w[nw - 32]); + cftf161(&a[448], &w[nw - 8]); + } else { + cftmdl1(64, a, &w[nw - 32]); + cftf081(a, &w[nw - 8]); + cftf082(&a[16], &w[nw - 8]); + cftf081(&a[32], &w[nw - 8]); + cftf081(&a[48], &w[nw - 8]); + cftmdl2(64, &a[64], &w[nw - 64]); + cftf081(&a[64], &w[nw - 8]); + cftf082(&a[80], &w[nw - 8]); + cftf081(&a[96], &w[nw - 8]); + cftf082(&a[112], &w[nw - 8]); + cftmdl1(64, &a[128], &w[nw - 32]); + cftf081(&a[128], &w[nw - 8]); + cftf082(&a[144], &w[nw - 8]); + cftf081(&a[160], &w[nw - 8]); + cftf081(&a[176], &w[nw - 8]); + if (isplt != 0) { + cftmdl1(64, &a[192], &w[nw - 32]); + cftf081(&a[240], &w[nw - 8]); + } else { + cftmdl2(64, &a[192], &w[nw - 64]); + cftf082(&a[240], &w[nw - 8]); + } + cftf081(&a[192], &w[nw - 8]); + cftf082(&a[208], &w[nw - 8]); + cftf081(&a[224], &w[nw - 8]); + } +} + + +void cftmdl1(int n, double *a, double *w) +{ + int j, j0, j1, j2, j3, k, m, mh; + double wn4r, wk1r, wk1i, wk3r, wk3i; + double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; + + mh = n >> 3; + m = 2 * mh; + j1 = m; + j2 = j1 + m; + j3 = j2 + m; + x0r = a[0] + a[j2]; + x0i = a[1] + a[j2 + 1]; + x1r = a[0] - a[j2]; + x1i = a[1] - a[j2 + 1]; + x2r = a[j1] + a[j3]; + x2i = a[j1 + 1] + a[j3 + 1]; + x3r = a[j1] - a[j3]; + x3i = a[j1 + 1] - a[j3 + 1]; + a[0] = x0r + x2r; + a[1] = x0i + x2i; + a[j1] = x0r - x2r; + a[j1 + 1] = x0i - x2i; + a[j2] = x1r - x3i; + a[j2 + 1] = x1i + x3r; + a[j3] = x1r + x3i; + a[j3 + 1] = x1i - x3r; + wn4r = w[1]; + k = 0; + for (j = 2; j < mh; j += 2) { + k += 4; + wk1r = w[k]; + wk1i = w[k + 1]; + wk3r = w[k + 2]; + wk3i = w[k + 3]; + j1 = j + m; + j2 = j1 + m; + j3 = j2 + m; + x0r = a[j] + a[j2]; + x0i = a[j + 1] + a[j2 + 1]; + x1r = a[j] - a[j2]; + x1i = a[j + 1] - a[j2 + 1]; + x2r = a[j1] + a[j3]; + x2i = a[j1 + 1] + a[j3 + 1]; + x3r = a[j1] - a[j3]; + x3i = a[j1 + 1] - a[j3 + 1]; + a[j] = x0r + x2r; + a[j + 1] = x0i + x2i; + a[j1] = x0r - x2r; + a[j1 + 1] = x0i - x2i; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j2] = wk1r * x0r - wk1i * x0i; + a[j2 + 1] = wk1r * x0i + wk1i * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j3] = wk3r * x0r + wk3i * x0i; + a[j3 + 1] = wk3r * x0i - wk3i * x0r; + j0 = m - j; + j1 = j0 + m; + j2 = j1 + m; + j3 = j2 + m; + x0r = a[j0] + a[j2]; + x0i = a[j0 + 1] + a[j2 + 1]; + x1r = a[j0] - a[j2]; + x1i = a[j0 + 1] - a[j2 + 1]; + x2r = a[j1] + a[j3]; + x2i = a[j1 + 1] + a[j3 + 1]; + x3r = a[j1] - a[j3]; + x3i = a[j1 + 1] - a[j3 + 1]; + a[j0] = x0r + x2r; + a[j0 + 1] = x0i + x2i; + a[j1] = x0r - x2r; + a[j1 + 1] = x0i - x2i; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j2] = wk1i * x0r - wk1r * x0i; + a[j2 + 1] = wk1i * x0i + wk1r * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j3] = wk3i * x0r + wk3r * x0i; + a[j3 + 1] = wk3i * x0i - wk3r * x0r; + } + j0 = mh; + j1 = j0 + m; + j2 = j1 + m; + j3 = j2 + m; + x0r = a[j0] + a[j2]; + x0i = a[j0 + 1] + a[j2 + 1]; + x1r = a[j0] - a[j2]; + x1i = a[j0 + 1] - a[j2 + 1]; + x2r = a[j1] + a[j3]; + x2i = a[j1 + 1] + a[j3 + 1]; + x3r = a[j1] - a[j3]; + x3i = a[j1 + 1] - a[j3 + 1]; + a[j0] = x0r + x2r; + a[j0 + 1] = x0i + x2i; + a[j1] = x0r - x2r; + a[j1 + 1] = x0i - x2i; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j2] = wn4r * (x0r - x0i); + a[j2 + 1] = wn4r * (x0i + x0r); + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j3] = -wn4r * (x0r + x0i); + a[j3 + 1] = -wn4r * (x0i - x0r); +} + + +void cftmdl2(int n, double *a, double *w) +{ + int j, j0, j1, j2, j3, k, kr, m, mh; + double wn4r, wk1r, wk1i, wk3r, wk3i, wd1r, wd1i, wd3r, wd3i; + double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i, y0r, y0i, y2r, y2i; + + mh = n >> 3; + m = 2 * mh; + wn4r = w[1]; + j1 = m; + j2 = j1 + m; + j3 = j2 + m; + x0r = a[0] - a[j2 + 1]; + x0i = a[1] + a[j2]; + x1r = a[0] + a[j2 + 1]; + x1i = a[1] - a[j2]; + x2r = a[j1] - a[j3 + 1]; + x2i = a[j1 + 1] + a[j3]; + x3r = a[j1] + a[j3 + 1]; + x3i = a[j1 + 1] - a[j3]; + y0r = wn4r * (x2r - x2i); + y0i = wn4r * (x2i + x2r); + a[0] = x0r + y0r; + a[1] = x0i + y0i; + a[j1] = x0r - y0r; + a[j1 + 1] = x0i - y0i; + y0r = wn4r * (x3r - x3i); + y0i = wn4r * (x3i + x3r); + a[j2] = x1r - y0i; + a[j2 + 1] = x1i + y0r; + a[j3] = x1r + y0i; + a[j3 + 1] = x1i - y0r; + k = 0; + kr = 2 * m; + for (j = 2; j < mh; j += 2) { + k += 4; + wk1r = w[k]; + wk1i = w[k + 1]; + wk3r = w[k + 2]; + wk3i = w[k + 3]; + kr -= 4; + wd1i = w[kr]; + wd1r = w[kr + 1]; + wd3i = w[kr + 2]; + wd3r = w[kr + 3]; + j1 = j + m; + j2 = j1 + m; + j3 = j2 + m; + x0r = a[j] - a[j2 + 1]; + x0i = a[j + 1] + a[j2]; + x1r = a[j] + a[j2 + 1]; + x1i = a[j + 1] - a[j2]; + x2r = a[j1] - a[j3 + 1]; + x2i = a[j1 + 1] + a[j3]; + x3r = a[j1] + a[j3 + 1]; + x3i = a[j1 + 1] - a[j3]; + y0r = wk1r * x0r - wk1i * x0i; + y0i = wk1r * x0i + wk1i * x0r; + y2r = wd1r * x2r - wd1i * x2i; + y2i = wd1r * x2i + wd1i * x2r; + a[j] = y0r + y2r; + a[j + 1] = y0i + y2i; + a[j1] = y0r - y2r; + a[j1 + 1] = y0i - y2i; + y0r = wk3r * x1r + wk3i * x1i; + y0i = wk3r * x1i - wk3i * x1r; + y2r = wd3r * x3r + wd3i * x3i; + y2i = wd3r * x3i - wd3i * x3r; + a[j2] = y0r + y2r; + a[j2 + 1] = y0i + y2i; + a[j3] = y0r - y2r; + a[j3 + 1] = y0i - y2i; + j0 = m - j; + j1 = j0 + m; + j2 = j1 + m; + j3 = j2 + m; + x0r = a[j0] - a[j2 + 1]; + x0i = a[j0 + 1] + a[j2]; + x1r = a[j0] + a[j2 + 1]; + x1i = a[j0 + 1] - a[j2]; + x2r = a[j1] - a[j3 + 1]; + x2i = a[j1 + 1] + a[j3]; + x3r = a[j1] + a[j3 + 1]; + x3i = a[j1 + 1] - a[j3]; + y0r = wd1i * x0r - wd1r * x0i; + y0i = wd1i * x0i + wd1r * x0r; + y2r = wk1i * x2r - wk1r * x2i; + y2i = wk1i * x2i + wk1r * x2r; + a[j0] = y0r + y2r; + a[j0 + 1] = y0i + y2i; + a[j1] = y0r - y2r; + a[j1 + 1] = y0i - y2i; + y0r = wd3i * x1r + wd3r * x1i; + y0i = wd3i * x1i - wd3r * x1r; + y2r = wk3i * x3r + wk3r * x3i; + y2i = wk3i * x3i - wk3r * x3r; + a[j2] = y0r + y2r; + a[j2 + 1] = y0i + y2i; + a[j3] = y0r - y2r; + a[j3 + 1] = y0i - y2i; + } + wk1r = w[m]; + wk1i = w[m + 1]; + j0 = mh; + j1 = j0 + m; + j2 = j1 + m; + j3 = j2 + m; + x0r = a[j0] - a[j2 + 1]; + x0i = a[j0 + 1] + a[j2]; + x1r = a[j0] + a[j2 + 1]; + x1i = a[j0 + 1] - a[j2]; + x2r = a[j1] - a[j3 + 1]; + x2i = a[j1 + 1] + a[j3]; + x3r = a[j1] + a[j3 + 1]; + x3i = a[j1 + 1] - a[j3]; + y0r = wk1r * x0r - wk1i * x0i; + y0i = wk1r * x0i + wk1i * x0r; + y2r = wk1i * x2r - wk1r * x2i; + y2i = wk1i * x2i + wk1r * x2r; + a[j0] = y0r + y2r; + a[j0 + 1] = y0i + y2i; + a[j1] = y0r - y2r; + a[j1 + 1] = y0i - y2i; + y0r = wk1i * x1r - wk1r * x1i; + y0i = wk1i * x1i + wk1r * x1r; + y2r = wk1r * x3r - wk1i * x3i; + y2i = wk1r * x3i + wk1i * x3r; + a[j2] = y0r - y2r; + a[j2 + 1] = y0i - y2i; + a[j3] = y0r + y2r; + a[j3 + 1] = y0i + y2i; +} + + +void cftfx41(int n, double *a, int nw, double *w) +{ + void cftf161(double *a, double *w); + void cftf162(double *a, double *w); + void cftf081(double *a, double *w); + void cftf082(double *a, double *w); + + if (n == 128) { + cftf161(a, &w[nw - 8]); + cftf162(&a[32], &w[nw - 32]); + cftf161(&a[64], &w[nw - 8]); + cftf161(&a[96], &w[nw - 8]); + } else { + cftf081(a, &w[nw - 8]); + cftf082(&a[16], &w[nw - 8]); + cftf081(&a[32], &w[nw - 8]); + cftf081(&a[48], &w[nw - 8]); + } +} + + +void cftf161(double *a, double *w) +{ + double wn4r, wk1r, wk1i, + x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i, + y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i, + y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i, + y8r, y8i, y9r, y9i, y10r, y10i, y11r, y11i, + y12r, y12i, y13r, y13i, y14r, y14i, y15r, y15i; + + wn4r = w[1]; + wk1r = w[2]; + wk1i = w[3]; + x0r = a[0] + a[16]; + x0i = a[1] + a[17]; + x1r = a[0] - a[16]; + x1i = a[1] - a[17]; + x2r = a[8] + a[24]; + x2i = a[9] + a[25]; + x3r = a[8] - a[24]; + x3i = a[9] - a[25]; + y0r = x0r + x2r; + y0i = x0i + x2i; + y4r = x0r - x2r; + y4i = x0i - x2i; + y8r = x1r - x3i; + y8i = x1i + x3r; + y12r = x1r + x3i; + y12i = x1i - x3r; + x0r = a[2] + a[18]; + x0i = a[3] + a[19]; + x1r = a[2] - a[18]; + x1i = a[3] - a[19]; + x2r = a[10] + a[26]; + x2i = a[11] + a[27]; + x3r = a[10] - a[26]; + x3i = a[11] - a[27]; + y1r = x0r + x2r; + y1i = x0i + x2i; + y5r = x0r - x2r; + y5i = x0i - x2i; + x0r = x1r - x3i; + x0i = x1i + x3r; + y9r = wk1r * x0r - wk1i * x0i; + y9i = wk1r * x0i + wk1i * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + y13r = wk1i * x0r - wk1r * x0i; + y13i = wk1i * x0i + wk1r * x0r; + x0r = a[4] + a[20]; + x0i = a[5] + a[21]; + x1r = a[4] - a[20]; + x1i = a[5] - a[21]; + x2r = a[12] + a[28]; + x2i = a[13] + a[29]; + x3r = a[12] - a[28]; + x3i = a[13] - a[29]; + y2r = x0r + x2r; + y2i = x0i + x2i; + y6r = x0r - x2r; + y6i = x0i - x2i; + x0r = x1r - x3i; + x0i = x1i + x3r; + y10r = wn4r * (x0r - x0i); + y10i = wn4r * (x0i + x0r); + x0r = x1r + x3i; + x0i = x1i - x3r; + y14r = wn4r * (x0r + x0i); + y14i = wn4r * (x0i - x0r); + x0r = a[6] + a[22]; + x0i = a[7] + a[23]; + x1r = a[6] - a[22]; + x1i = a[7] - a[23]; + x2r = a[14] + a[30]; + x2i = a[15] + a[31]; + x3r = a[14] - a[30]; + x3i = a[15] - a[31]; + y3r = x0r + x2r; + y3i = x0i + x2i; + y7r = x0r - x2r; + y7i = x0i - x2i; + x0r = x1r - x3i; + x0i = x1i + x3r; + y11r = wk1i * x0r - wk1r * x0i; + y11i = wk1i * x0i + wk1r * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + y15r = wk1r * x0r - wk1i * x0i; + y15i = wk1r * x0i + wk1i * x0r; + x0r = y12r - y14r; + x0i = y12i - y14i; + x1r = y12r + y14r; + x1i = y12i + y14i; + x2r = y13r - y15r; + x2i = y13i - y15i; + x3r = y13r + y15r; + x3i = y13i + y15i; + a[24] = x0r + x2r; + a[25] = x0i + x2i; + a[26] = x0r - x2r; + a[27] = x0i - x2i; + a[28] = x1r - x3i; + a[29] = x1i + x3r; + a[30] = x1r + x3i; + a[31] = x1i - x3r; + x0r = y8r + y10r; + x0i = y8i + y10i; + x1r = y8r - y10r; + x1i = y8i - y10i; + x2r = y9r + y11r; + x2i = y9i + y11i; + x3r = y9r - y11r; + x3i = y9i - y11i; + a[16] = x0r + x2r; + a[17] = x0i + x2i; + a[18] = x0r - x2r; + a[19] = x0i - x2i; + a[20] = x1r - x3i; + a[21] = x1i + x3r; + a[22] = x1r + x3i; + a[23] = x1i - x3r; + x0r = y5r - y7i; + x0i = y5i + y7r; + x2r = wn4r * (x0r - x0i); + x2i = wn4r * (x0i + x0r); + x0r = y5r + y7i; + x0i = y5i - y7r; + x3r = wn4r * (x0r - x0i); + x3i = wn4r * (x0i + x0r); + x0r = y4r - y6i; + x0i = y4i + y6r; + x1r = y4r + y6i; + x1i = y4i - y6r; + a[8] = x0r + x2r; + a[9] = x0i + x2i; + a[10] = x0r - x2r; + a[11] = x0i - x2i; + a[12] = x1r - x3i; + a[13] = x1i + x3r; + a[14] = x1r + x3i; + a[15] = x1i - x3r; + x0r = y0r + y2r; + x0i = y0i + y2i; + x1r = y0r - y2r; + x1i = y0i - y2i; + x2r = y1r + y3r; + x2i = y1i + y3i; + x3r = y1r - y3r; + x3i = y1i - y3i; + a[0] = x0r + x2r; + a[1] = x0i + x2i; + a[2] = x0r - x2r; + a[3] = x0i - x2i; + a[4] = x1r - x3i; + a[5] = x1i + x3r; + a[6] = x1r + x3i; + a[7] = x1i - x3r; +} + + +void cftf162(double *a, double *w) +{ + double wn4r, wk1r, wk1i, wk2r, wk2i, wk3r, wk3i, + x0r, x0i, x1r, x1i, x2r, x2i, + y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i, + y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i, + y8r, y8i, y9r, y9i, y10r, y10i, y11r, y11i, + y12r, y12i, y13r, y13i, y14r, y14i, y15r, y15i; + + wn4r = w[1]; + wk1r = w[4]; + wk1i = w[5]; + wk3r = w[6]; + wk3i = -w[7]; + wk2r = w[8]; + wk2i = w[9]; + x1r = a[0] - a[17]; + x1i = a[1] + a[16]; + x0r = a[8] - a[25]; + x0i = a[9] + a[24]; + x2r = wn4r * (x0r - x0i); + x2i = wn4r * (x0i + x0r); + y0r = x1r + x2r; + y0i = x1i + x2i; + y4r = x1r - x2r; + y4i = x1i - x2i; + x1r = a[0] + a[17]; + x1i = a[1] - a[16]; + x0r = a[8] + a[25]; + x0i = a[9] - a[24]; + x2r = wn4r * (x0r - x0i); + x2i = wn4r * (x0i + x0r); + y8r = x1r - x2i; + y8i = x1i + x2r; + y12r = x1r + x2i; + y12i = x1i - x2r; + x0r = a[2] - a[19]; + x0i = a[3] + a[18]; + x1r = wk1r * x0r - wk1i * x0i; + x1i = wk1r * x0i + wk1i * x0r; + x0r = a[10] - a[27]; + x0i = a[11] + a[26]; + x2r = wk3i * x0r - wk3r * x0i; + x2i = wk3i * x0i + wk3r * x0r; + y1r = x1r + x2r; + y1i = x1i + x2i; + y5r = x1r - x2r; + y5i = x1i - x2i; + x0r = a[2] + a[19]; + x0i = a[3] - a[18]; + x1r = wk3r * x0r - wk3i * x0i; + x1i = wk3r * x0i + wk3i * x0r; + x0r = a[10] + a[27]; + x0i = a[11] - a[26]; + x2r = wk1r * x0r + wk1i * x0i; + x2i = wk1r * x0i - wk1i * x0r; + y9r = x1r - x2r; + y9i = x1i - x2i; + y13r = x1r + x2r; + y13i = x1i + x2i; + x0r = a[4] - a[21]; + x0i = a[5] + a[20]; + x1r = wk2r * x0r - wk2i * x0i; + x1i = wk2r * x0i + wk2i * x0r; + x0r = a[12] - a[29]; + x0i = a[13] + a[28]; + x2r = wk2i * x0r - wk2r * x0i; + x2i = wk2i * x0i + wk2r * x0r; + y2r = x1r + x2r; + y2i = x1i + x2i; + y6r = x1r - x2r; + y6i = x1i - x2i; + x0r = a[4] + a[21]; + x0i = a[5] - a[20]; + x1r = wk2i * x0r - wk2r * x0i; + x1i = wk2i * x0i + wk2r * x0r; + x0r = a[12] + a[29]; + x0i = a[13] - a[28]; + x2r = wk2r * x0r - wk2i * x0i; + x2i = wk2r * x0i + wk2i * x0r; + y10r = x1r - x2r; + y10i = x1i - x2i; + y14r = x1r + x2r; + y14i = x1i + x2i; + x0r = a[6] - a[23]; + x0i = a[7] + a[22]; + x1r = wk3r * x0r - wk3i * x0i; + x1i = wk3r * x0i + wk3i * x0r; + x0r = a[14] - a[31]; + x0i = a[15] + a[30]; + x2r = wk1i * x0r - wk1r * x0i; + x2i = wk1i * x0i + wk1r * x0r; + y3r = x1r + x2r; + y3i = x1i + x2i; + y7r = x1r - x2r; + y7i = x1i - x2i; + x0r = a[6] + a[23]; + x0i = a[7] - a[22]; + x1r = wk1i * x0r + wk1r * x0i; + x1i = wk1i * x0i - wk1r * x0r; + x0r = a[14] + a[31]; + x0i = a[15] - a[30]; + x2r = wk3i * x0r - wk3r * x0i; + x2i = wk3i * x0i + wk3r * x0r; + y11r = x1r + x2r; + y11i = x1i + x2i; + y15r = x1r - x2r; + y15i = x1i - x2i; + x1r = y0r + y2r; + x1i = y0i + y2i; + x2r = y1r + y3r; + x2i = y1i + y3i; + a[0] = x1r + x2r; + a[1] = x1i + x2i; + a[2] = x1r - x2r; + a[3] = x1i - x2i; + x1r = y0r - y2r; + x1i = y0i - y2i; + x2r = y1r - y3r; + x2i = y1i - y3i; + a[4] = x1r - x2i; + a[5] = x1i + x2r; + a[6] = x1r + x2i; + a[7] = x1i - x2r; + x1r = y4r - y6i; + x1i = y4i + y6r; + x0r = y5r - y7i; + x0i = y5i + y7r; + x2r = wn4r * (x0r - x0i); + x2i = wn4r * (x0i + x0r); + a[8] = x1r + x2r; + a[9] = x1i + x2i; + a[10] = x1r - x2r; + a[11] = x1i - x2i; + x1r = y4r + y6i; + x1i = y4i - y6r; + x0r = y5r + y7i; + x0i = y5i - y7r; + x2r = wn4r * (x0r - x0i); + x2i = wn4r * (x0i + x0r); + a[12] = x1r - x2i; + a[13] = x1i + x2r; + a[14] = x1r + x2i; + a[15] = x1i - x2r; + x1r = y8r + y10r; + x1i = y8i + y10i; + x2r = y9r - y11r; + x2i = y9i - y11i; + a[16] = x1r + x2r; + a[17] = x1i + x2i; + a[18] = x1r - x2r; + a[19] = x1i - x2i; + x1r = y8r - y10r; + x1i = y8i - y10i; + x2r = y9r + y11r; + x2i = y9i + y11i; + a[20] = x1r - x2i; + a[21] = x1i + x2r; + a[22] = x1r + x2i; + a[23] = x1i - x2r; + x1r = y12r - y14i; + x1i = y12i + y14r; + x0r = y13r + y15i; + x0i = y13i - y15r; + x2r = wn4r * (x0r - x0i); + x2i = wn4r * (x0i + x0r); + a[24] = x1r + x2r; + a[25] = x1i + x2i; + a[26] = x1r - x2r; + a[27] = x1i - x2i; + x1r = y12r + y14i; + x1i = y12i - y14r; + x0r = y13r - y15i; + x0i = y13i + y15r; + x2r = wn4r * (x0r - x0i); + x2i = wn4r * (x0i + x0r); + a[28] = x1r - x2i; + a[29] = x1i + x2r; + a[30] = x1r + x2i; + a[31] = x1i - x2r; +} + + +void cftf081(double *a, double *w) +{ + double wn4r, x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i, + y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i, + y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i; + + wn4r = w[1]; + x0r = a[0] + a[8]; + x0i = a[1] + a[9]; + x1r = a[0] - a[8]; + x1i = a[1] - a[9]; + x2r = a[4] + a[12]; + x2i = a[5] + a[13]; + x3r = a[4] - a[12]; + x3i = a[5] - a[13]; + y0r = x0r + x2r; + y0i = x0i + x2i; + y2r = x0r - x2r; + y2i = x0i - x2i; + y1r = x1r - x3i; + y1i = x1i + x3r; + y3r = x1r + x3i; + y3i = x1i - x3r; + x0r = a[2] + a[10]; + x0i = a[3] + a[11]; + x1r = a[2] - a[10]; + x1i = a[3] - a[11]; + x2r = a[6] + a[14]; + x2i = a[7] + a[15]; + x3r = a[6] - a[14]; + x3i = a[7] - a[15]; + y4r = x0r + x2r; + y4i = x0i + x2i; + y6r = x0r - x2r; + y6i = x0i - x2i; + x0r = x1r - x3i; + x0i = x1i + x3r; + x2r = x1r + x3i; + x2i = x1i - x3r; + y5r = wn4r * (x0r - x0i); + y5i = wn4r * (x0r + x0i); + y7r = wn4r * (x2r - x2i); + y7i = wn4r * (x2r + x2i); + a[8] = y1r + y5r; + a[9] = y1i + y5i; + a[10] = y1r - y5r; + a[11] = y1i - y5i; + a[12] = y3r - y7i; + a[13] = y3i + y7r; + a[14] = y3r + y7i; + a[15] = y3i - y7r; + a[0] = y0r + y4r; + a[1] = y0i + y4i; + a[2] = y0r - y4r; + a[3] = y0i - y4i; + a[4] = y2r - y6i; + a[5] = y2i + y6r; + a[6] = y2r + y6i; + a[7] = y2i - y6r; +} + + +void cftf082(double *a, double *w) +{ + double wn4r, wk1r, wk1i, x0r, x0i, x1r, x1i, + y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i, + y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i; + + wn4r = w[1]; + wk1r = w[2]; + wk1i = w[3]; + y0r = a[0] - a[9]; + y0i = a[1] + a[8]; + y1r = a[0] + a[9]; + y1i = a[1] - a[8]; + x0r = a[4] - a[13]; + x0i = a[5] + a[12]; + y2r = wn4r * (x0r - x0i); + y2i = wn4r * (x0i + x0r); + x0r = a[4] + a[13]; + x0i = a[5] - a[12]; + y3r = wn4r * (x0r - x0i); + y3i = wn4r * (x0i + x0r); + x0r = a[2] - a[11]; + x0i = a[3] + a[10]; + y4r = wk1r * x0r - wk1i * x0i; + y4i = wk1r * x0i + wk1i * x0r; + x0r = a[2] + a[11]; + x0i = a[3] - a[10]; + y5r = wk1i * x0r - wk1r * x0i; + y5i = wk1i * x0i + wk1r * x0r; + x0r = a[6] - a[15]; + x0i = a[7] + a[14]; + y6r = wk1i * x0r - wk1r * x0i; + y6i = wk1i * x0i + wk1r * x0r; + x0r = a[6] + a[15]; + x0i = a[7] - a[14]; + y7r = wk1r * x0r - wk1i * x0i; + y7i = wk1r * x0i + wk1i * x0r; + x0r = y0r + y2r; + x0i = y0i + y2i; + x1r = y4r + y6r; + x1i = y4i + y6i; + a[0] = x0r + x1r; + a[1] = x0i + x1i; + a[2] = x0r - x1r; + a[3] = x0i - x1i; + x0r = y0r - y2r; + x0i = y0i - y2i; + x1r = y4r - y6r; + x1i = y4i - y6i; + a[4] = x0r - x1i; + a[5] = x0i + x1r; + a[6] = x0r + x1i; + a[7] = x0i - x1r; + x0r = y1r - y3i; + x0i = y1i + y3r; + x1r = y5r - y7r; + x1i = y5i - y7i; + a[8] = x0r + x1r; + a[9] = x0i + x1i; + a[10] = x0r - x1r; + a[11] = x0i - x1i; + x0r = y1r + y3i; + x0i = y1i - y3r; + x1r = y5r + y7r; + x1i = y5i + y7i; + a[12] = x0r - x1i; + a[13] = x0i + x1r; + a[14] = x0r + x1i; + a[15] = x0i - x1r; +} + + +void cftf040(double *a) +{ + double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; + + x0r = a[0] + a[4]; + x0i = a[1] + a[5]; + x1r = a[0] - a[4]; + x1i = a[1] - a[5]; + x2r = a[2] + a[6]; + x2i = a[3] + a[7]; + x3r = a[2] - a[6]; + x3i = a[3] - a[7]; + a[0] = x0r + x2r; + a[1] = x0i + x2i; + a[2] = x1r - x3i; + a[3] = x1i + x3r; + a[4] = x0r - x2r; + a[5] = x0i - x2i; + a[6] = x1r + x3i; + a[7] = x1i - x3r; +} + + +void cftb040(double *a) +{ + double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; + + x0r = a[0] + a[4]; + x0i = a[1] + a[5]; + x1r = a[0] - a[4]; + x1i = a[1] - a[5]; + x2r = a[2] + a[6]; + x2i = a[3] + a[7]; + x3r = a[2] - a[6]; + x3i = a[3] - a[7]; + a[0] = x0r + x2r; + a[1] = x0i + x2i; + a[2] = x1r + x3i; + a[3] = x1i - x3r; + a[4] = x0r - x2r; + a[5] = x0i - x2i; + a[6] = x1r - x3i; + a[7] = x1i + x3r; +} + + +void cftx020(double *a) +{ + double x0r, x0i; + + x0r = a[0] - a[2]; + x0i = a[1] - a[3]; + a[0] += a[2]; + a[1] += a[3]; + a[2] = x0r; + a[3] = x0i; +} + + +void rftfsub(int n, double *a, int nc, double *c) +{ + int j, k, kk, ks, m; + double wkr, wki, xr, xi, yr, yi; + + m = n >> 1; + ks = 2 * nc / m; + kk = 0; + for (j = 2; j < m; j += 2) { + k = n - j; + kk += ks; + wkr = 0.5 - c[nc - kk]; + wki = c[kk]; + xr = a[j] - a[k]; + xi = a[j + 1] + a[k + 1]; + yr = wkr * xr - wki * xi; + yi = wkr * xi + wki * xr; + a[j] -= yr; + a[j + 1] -= yi; + a[k] += yr; + a[k + 1] -= yi; + } +} + + +void rftbsub(int n, double *a, int nc, double *c) +{ + int j, k, kk, ks, m; + double wkr, wki, xr, xi, yr, yi; + + m = n >> 1; + ks = 2 * nc / m; + kk = 0; + for (j = 2; j < m; j += 2) { + k = n - j; + kk += ks; + wkr = 0.5 - c[nc - kk]; + wki = c[kk]; + xr = a[j] - a[k]; + xi = a[j + 1] + a[k + 1]; + yr = wkr * xr + wki * xi; + yi = wkr * xi - wki * xr; + a[j] -= yr; + a[j + 1] -= yi; + a[k] += yr; + a[k + 1] -= yi; + } +} + + +void dctsub(int n, double *a, int nc, double *c) +{ + int j, k, kk, ks, m; + double wkr, wki, xr; + + m = n >> 1; + ks = nc / n; + kk = 0; + for (j = 1; j < m; j++) { + k = n - j; + kk += ks; + wkr = c[kk] - c[nc - kk]; + wki = c[kk] + c[nc - kk]; + xr = wki * a[j] - wkr * a[k]; + a[j] = wkr * a[j] + wki * a[k]; + a[k] = xr; + } + a[m] *= c[0]; +} + + +void dstsub(int n, double *a, int nc, double *c) +{ + int j, k, kk, ks, m; + double wkr, wki, xr; + + m = n >> 1; + ks = nc / n; + kk = 0; + for (j = 1; j < m; j++) { + k = n - j; + kk += ks; + wkr = c[kk] - c[nc - kk]; + wki = c[kk] + c[nc - kk]; + xr = wki * a[k] - wkr * a[j]; + a[k] = wkr * a[k] + wki * a[j]; + a[j] = xr; + } + a[m] *= c[0]; +} + diff --git a/3rdparty/libprojectm/fftsg.h b/3rdparty/libprojectm/fftsg.h new file mode 100755 index 000000000..ff9da6e41 --- /dev/null +++ b/3rdparty/libprojectm/fftsg.h @@ -0,0 +1,35 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id: fftsg.h,v 1.1.1.1 2005/12/23 18:05:00 psperl Exp $ + * + * Wrapper for rdft() and friends + * + * $Log$ + */ + +#ifndef _FFTSG_H +#define _FFTSG_H + +extern void rdft(int n, int isgn, double *a, int *ip, double *w); + +#endif /** !_FFTSG_H */ + diff --git a/3rdparty/libprojectm/glError.h b/3rdparty/libprojectm/glError.h new file mode 100644 index 000000000..a6d0940ea --- /dev/null +++ b/3rdparty/libprojectm/glError.h @@ -0,0 +1,31 @@ +// +// File: glError.h +// Author: fatray +// +// Created on 02 December 2007, 16:08 +// + +#ifndef _GLERROR_H +#define _GLERROR_H + +// no need to include GL in here, +// if someone wants GL errors they probably already included it. + + +/* + * if we are debugging, print all glErrors to stderr. + * Remeber that glErrors are buffered, this just prints any in the buffer. + */ +#ifdef NDEBUG +#define glError() +#else +#define glError() { \ + GLenum err; \ + while ((err = glGetError()) != GL_NO_ERROR) \ + fprintf(stderr, "glError: %s at %s:%u\n", \ + (char *)gluErrorString(err), __FILE__, __LINE__); \ +} +#endif /* glError */ + +#endif /* _GLERROR_H */ + diff --git a/3rdparty/libprojectm/glew.c b/3rdparty/libprojectm/glew.c new file mode 100644 index 000000000..1d1201a65 --- /dev/null +++ b/3rdparty/libprojectm/glew.c @@ -0,0 +1,10835 @@ +/* +** The OpenGL Extension Wrangler Library +** Copyright (C) 2002-2008, Milan Ikits +** Copyright (C) 2002-2008, Marcelo E. Magallon +** Copyright (C) 2002, Lev Povalahev +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are met: +** +** * Redistributions of source code must retain the above copyright notice, +** this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright notice, +** this list of conditions and the following disclaimer in the documentation +** and/or other materials provided with the distribution. +** * The name of the author may be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +** THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "glew.h" +#if defined(_WIN32) +# include "wglew.h" +#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) +# include "glxew.h" +#endif + +/* + * Define glewGetContext and related helper macros. + */ +#ifdef GLEW_MX +# define glewGetContext() ctx +# ifdef _WIN32 +# define GLEW_CONTEXT_ARG_DEF_INIT GLEWContext* ctx +# define GLEW_CONTEXT_ARG_VAR_INIT ctx +# define wglewGetContext() ctx +# define WGLEW_CONTEXT_ARG_DEF_INIT WGLEWContext* ctx +# define WGLEW_CONTEXT_ARG_DEF_LIST WGLEWContext* ctx +# else /* _WIN32 */ +# define GLEW_CONTEXT_ARG_DEF_INIT void +# define GLEW_CONTEXT_ARG_VAR_INIT +# define glxewGetContext() ctx +# define GLXEW_CONTEXT_ARG_DEF_INIT void +# define GLXEW_CONTEXT_ARG_DEF_LIST GLXEWContext* ctx +# endif /* _WIN32 */ +# define GLEW_CONTEXT_ARG_DEF_LIST GLEWContext* ctx +#else /* GLEW_MX */ +# define GLEW_CONTEXT_ARG_DEF_INIT void +# define GLEW_CONTEXT_ARG_VAR_INIT +# define GLEW_CONTEXT_ARG_DEF_LIST void +# define WGLEW_CONTEXT_ARG_DEF_INIT void +# define WGLEW_CONTEXT_ARG_DEF_LIST void +# define GLXEW_CONTEXT_ARG_DEF_INIT void +# define GLXEW_CONTEXT_ARG_DEF_LIST void +#endif /* GLEW_MX */ + +#if defined(__APPLE__) +#include +#include +#include + +void* NSGLGetProcAddress (const GLubyte *name) +{ + static const struct mach_header* image = NULL; + NSSymbol symbol; + char* symbolName; + if (NULL == image) + { + image = NSAddImage("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", NSADDIMAGE_OPTION_RETURN_ON_ERROR); + } + /* prepend a '_' for the Unix C symbol mangling convention */ + symbolName = malloc(strlen((const char*)name) + 2); + strcpy(symbolName+1, (const char*)name); + symbolName[0] = '_'; + symbol = NULL; + /* if (NSIsSymbolNameDefined(symbolName)) + symbol = NSLookupAndBindSymbol(symbolName); */ + symbol = image ? NSLookupSymbolInImage(image, symbolName, NSLOOKUPSYMBOLINIMAGE_OPTION_BIND | NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR) : NULL; + free(symbolName); + return symbol ? NSAddressOfSymbol(symbol) : NULL; +} +#endif /* __APPLE__ */ + +#if defined(__sgi) || defined (__sun) +#include +#include +#include + +void* dlGetProcAddress (const GLubyte* name) +{ + static void* h = NULL; + static void* gpa; + + if (h == NULL) + { + if ((h = dlopen(NULL, RTLD_LAZY | RTLD_LOCAL)) == NULL) return NULL; + gpa = dlsym(h, "glXGetProcAddress"); + } + + if (gpa != NULL) + return ((void*(*)(const GLubyte*))gpa)(name); + else + return dlsym(h, (const char*)name); +} +#endif /* __sgi || __sun */ + +/* + * Define glewGetProcAddress. + */ +#if defined(_WIN32) +# define glewGetProcAddress(name) wglGetProcAddress((LPCSTR)name) +#else +# if defined(__APPLE__) +# define glewGetProcAddress(name) NSGLGetProcAddress(name) +# else +# if defined(__sgi) || defined(__sun) +# define glewGetProcAddress(name) dlGetProcAddress(name) +# else /* __linux */ +# define glewGetProcAddress(name) (*glXGetProcAddressARB)(name) +# endif +# endif +#endif + +/* + * Define GLboolean const cast. + */ +#define CONST_CAST(x) (*(GLboolean*)&x) + +/* + * GLEW, just like OpenGL or GLU, does not rely on the standard C library. + * These functions implement the functionality required in this file. + */ +static GLuint _glewStrLen (const GLubyte* s) +{ + GLuint i=0; + if (s == NULL) return 0; + while (s[i] != '\0') i++; + return i; +} + +static GLuint _glewStrCLen (const GLubyte* s, GLubyte c) +{ + GLuint i=0; + if (s == NULL) return 0; + while (s[i] != '\0' && s[i] != c) i++; + return s[i] == c ? i : 0; +} + +static GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n) +{ + GLuint i=0; + if(a == NULL || b == NULL) + return (a == NULL && b == NULL && n == 0) ? GL_TRUE : GL_FALSE; + while (i < n && a[i] != '\0' && b[i] != '\0' && a[i] == b[i]) i++; + return i == n ? GL_TRUE : GL_FALSE; +} + +static GLboolean _glewStrSame1 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) +{ + while (*na > 0 && (**a == ' ' || **a == '\n' || **a == '\r' || **a == '\t')) + { + (*a)++; + (*na)--; + } + if(*na >= nb) + { + GLuint i=0; + while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; + if(i == nb) + { + *a = *a + nb; + *na = *na - nb; + return GL_TRUE; + } + } + return GL_FALSE; +} + +static GLboolean _glewStrSame2 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) +{ + if(*na >= nb) + { + GLuint i=0; + while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; + if(i == nb) + { + *a = *a + nb; + *na = *na - nb; + return GL_TRUE; + } + } + return GL_FALSE; +} + +static GLboolean _glewStrSame3 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) +{ + if(*na >= nb) + { + GLuint i=0; + while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; + if (i == nb && (*na == nb || (*a)[i] == ' ' || (*a)[i] == '\n' || (*a)[i] == '\r' || (*a)[i] == '\t')) + { + *a = *a + nb; + *na = *na - nb; + return GL_TRUE; + } + } + return GL_FALSE; +} + +#if !defined(_WIN32) || !defined(GLEW_MX) + +PFNGLCOPYTEXSUBIMAGE3DPROC __glewCopyTexSubImage3D = NULL; +PFNGLDRAWRANGEELEMENTSPROC __glewDrawRangeElements = NULL; +PFNGLTEXIMAGE3DPROC __glewTexImage3D = NULL; +PFNGLTEXSUBIMAGE3DPROC __glewTexSubImage3D = NULL; + +PFNGLACTIVETEXTUREPROC __glewActiveTexture = NULL; +PFNGLCLIENTACTIVETEXTUREPROC __glewClientActiveTexture = NULL; +PFNGLCOMPRESSEDTEXIMAGE1DPROC __glewCompressedTexImage1D = NULL; +PFNGLCOMPRESSEDTEXIMAGE2DPROC __glewCompressedTexImage2D = NULL; +PFNGLCOMPRESSEDTEXIMAGE3DPROC __glewCompressedTexImage3D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC __glewCompressedTexSubImage1D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC __glewCompressedTexSubImage2D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC __glewCompressedTexSubImage3D = NULL; +PFNGLGETCOMPRESSEDTEXIMAGEPROC __glewGetCompressedTexImage = NULL; +PFNGLLOADTRANSPOSEMATRIXDPROC __glewLoadTransposeMatrixd = NULL; +PFNGLLOADTRANSPOSEMATRIXFPROC __glewLoadTransposeMatrixf = NULL; +PFNGLMULTTRANSPOSEMATRIXDPROC __glewMultTransposeMatrixd = NULL; +PFNGLMULTTRANSPOSEMATRIXFPROC __glewMultTransposeMatrixf = NULL; +PFNGLMULTITEXCOORD1DPROC __glewMultiTexCoord1d = NULL; +PFNGLMULTITEXCOORD1DVPROC __glewMultiTexCoord1dv = NULL; +PFNGLMULTITEXCOORD1FPROC __glewMultiTexCoord1f = NULL; +PFNGLMULTITEXCOORD1FVPROC __glewMultiTexCoord1fv = NULL; +PFNGLMULTITEXCOORD1IPROC __glewMultiTexCoord1i = NULL; +PFNGLMULTITEXCOORD1IVPROC __glewMultiTexCoord1iv = NULL; +PFNGLMULTITEXCOORD1SPROC __glewMultiTexCoord1s = NULL; +PFNGLMULTITEXCOORD1SVPROC __glewMultiTexCoord1sv = NULL; +PFNGLMULTITEXCOORD2DPROC __glewMultiTexCoord2d = NULL; +PFNGLMULTITEXCOORD2DVPROC __glewMultiTexCoord2dv = NULL; +PFNGLMULTITEXCOORD2FPROC __glewMultiTexCoord2f = NULL; +PFNGLMULTITEXCOORD2FVPROC __glewMultiTexCoord2fv = NULL; +PFNGLMULTITEXCOORD2IPROC __glewMultiTexCoord2i = NULL; +PFNGLMULTITEXCOORD2IVPROC __glewMultiTexCoord2iv = NULL; +PFNGLMULTITEXCOORD2SPROC __glewMultiTexCoord2s = NULL; +PFNGLMULTITEXCOORD2SVPROC __glewMultiTexCoord2sv = NULL; +PFNGLMULTITEXCOORD3DPROC __glewMultiTexCoord3d = NULL; +PFNGLMULTITEXCOORD3DVPROC __glewMultiTexCoord3dv = NULL; +PFNGLMULTITEXCOORD3FPROC __glewMultiTexCoord3f = NULL; +PFNGLMULTITEXCOORD3FVPROC __glewMultiTexCoord3fv = NULL; +PFNGLMULTITEXCOORD3IPROC __glewMultiTexCoord3i = NULL; +PFNGLMULTITEXCOORD3IVPROC __glewMultiTexCoord3iv = NULL; +PFNGLMULTITEXCOORD3SPROC __glewMultiTexCoord3s = NULL; +PFNGLMULTITEXCOORD3SVPROC __glewMultiTexCoord3sv = NULL; +PFNGLMULTITEXCOORD4DPROC __glewMultiTexCoord4d = NULL; +PFNGLMULTITEXCOORD4DVPROC __glewMultiTexCoord4dv = NULL; +PFNGLMULTITEXCOORD4FPROC __glewMultiTexCoord4f = NULL; +PFNGLMULTITEXCOORD4FVPROC __glewMultiTexCoord4fv = NULL; +PFNGLMULTITEXCOORD4IPROC __glewMultiTexCoord4i = NULL; +PFNGLMULTITEXCOORD4IVPROC __glewMultiTexCoord4iv = NULL; +PFNGLMULTITEXCOORD4SPROC __glewMultiTexCoord4s = NULL; +PFNGLMULTITEXCOORD4SVPROC __glewMultiTexCoord4sv = NULL; +PFNGLSAMPLECOVERAGEPROC __glewSampleCoverage = NULL; + +PFNGLBLENDCOLORPROC __glewBlendColor = NULL; +PFNGLBLENDEQUATIONPROC __glewBlendEquation = NULL; +PFNGLBLENDFUNCSEPARATEPROC __glewBlendFuncSeparate = NULL; +PFNGLFOGCOORDPOINTERPROC __glewFogCoordPointer = NULL; +PFNGLFOGCOORDDPROC __glewFogCoordd = NULL; +PFNGLFOGCOORDDVPROC __glewFogCoorddv = NULL; +PFNGLFOGCOORDFPROC __glewFogCoordf = NULL; +PFNGLFOGCOORDFVPROC __glewFogCoordfv = NULL; +PFNGLMULTIDRAWARRAYSPROC __glewMultiDrawArrays = NULL; +PFNGLMULTIDRAWELEMENTSPROC __glewMultiDrawElements = NULL; +PFNGLPOINTPARAMETERFPROC __glewPointParameterf = NULL; +PFNGLPOINTPARAMETERFVPROC __glewPointParameterfv = NULL; +PFNGLPOINTPARAMETERIPROC __glewPointParameteri = NULL; +PFNGLPOINTPARAMETERIVPROC __glewPointParameteriv = NULL; +PFNGLSECONDARYCOLOR3BPROC __glewSecondaryColor3b = NULL; +PFNGLSECONDARYCOLOR3BVPROC __glewSecondaryColor3bv = NULL; +PFNGLSECONDARYCOLOR3DPROC __glewSecondaryColor3d = NULL; +PFNGLSECONDARYCOLOR3DVPROC __glewSecondaryColor3dv = NULL; +PFNGLSECONDARYCOLOR3FPROC __glewSecondaryColor3f = NULL; +PFNGLSECONDARYCOLOR3FVPROC __glewSecondaryColor3fv = NULL; +PFNGLSECONDARYCOLOR3IPROC __glewSecondaryColor3i = NULL; +PFNGLSECONDARYCOLOR3IVPROC __glewSecondaryColor3iv = NULL; +PFNGLSECONDARYCOLOR3SPROC __glewSecondaryColor3s = NULL; +PFNGLSECONDARYCOLOR3SVPROC __glewSecondaryColor3sv = NULL; +PFNGLSECONDARYCOLOR3UBPROC __glewSecondaryColor3ub = NULL; +PFNGLSECONDARYCOLOR3UBVPROC __glewSecondaryColor3ubv = NULL; +PFNGLSECONDARYCOLOR3UIPROC __glewSecondaryColor3ui = NULL; +PFNGLSECONDARYCOLOR3UIVPROC __glewSecondaryColor3uiv = NULL; +PFNGLSECONDARYCOLOR3USPROC __glewSecondaryColor3us = NULL; +PFNGLSECONDARYCOLOR3USVPROC __glewSecondaryColor3usv = NULL; +PFNGLSECONDARYCOLORPOINTERPROC __glewSecondaryColorPointer = NULL; +PFNGLWINDOWPOS2DPROC __glewWindowPos2d = NULL; +PFNGLWINDOWPOS2DVPROC __glewWindowPos2dv = NULL; +PFNGLWINDOWPOS2FPROC __glewWindowPos2f = NULL; +PFNGLWINDOWPOS2FVPROC __glewWindowPos2fv = NULL; +PFNGLWINDOWPOS2IPROC __glewWindowPos2i = NULL; +PFNGLWINDOWPOS2IVPROC __glewWindowPos2iv = NULL; +PFNGLWINDOWPOS2SPROC __glewWindowPos2s = NULL; +PFNGLWINDOWPOS2SVPROC __glewWindowPos2sv = NULL; +PFNGLWINDOWPOS3DPROC __glewWindowPos3d = NULL; +PFNGLWINDOWPOS3DVPROC __glewWindowPos3dv = NULL; +PFNGLWINDOWPOS3FPROC __glewWindowPos3f = NULL; +PFNGLWINDOWPOS3FVPROC __glewWindowPos3fv = NULL; +PFNGLWINDOWPOS3IPROC __glewWindowPos3i = NULL; +PFNGLWINDOWPOS3IVPROC __glewWindowPos3iv = NULL; +PFNGLWINDOWPOS3SPROC __glewWindowPos3s = NULL; +PFNGLWINDOWPOS3SVPROC __glewWindowPos3sv = NULL; + +PFNGLBEGINQUERYPROC __glewBeginQuery = NULL; +PFNGLBINDBUFFERPROC __glewBindBuffer = NULL; +PFNGLBUFFERDATAPROC __glewBufferData = NULL; +PFNGLBUFFERSUBDATAPROC __glewBufferSubData = NULL; +PFNGLDELETEBUFFERSPROC __glewDeleteBuffers = NULL; +PFNGLDELETEQUERIESPROC __glewDeleteQueries = NULL; +PFNGLENDQUERYPROC __glewEndQuery = NULL; +PFNGLGENBUFFERSPROC __glewGenBuffers = NULL; +PFNGLGENQUERIESPROC __glewGenQueries = NULL; +PFNGLGETBUFFERPARAMETERIVPROC __glewGetBufferParameteriv = NULL; +PFNGLGETBUFFERPOINTERVPROC __glewGetBufferPointerv = NULL; +PFNGLGETBUFFERSUBDATAPROC __glewGetBufferSubData = NULL; +PFNGLGETQUERYOBJECTIVPROC __glewGetQueryObjectiv = NULL; +PFNGLGETQUERYOBJECTUIVPROC __glewGetQueryObjectuiv = NULL; +PFNGLGETQUERYIVPROC __glewGetQueryiv = NULL; +PFNGLISBUFFERPROC __glewIsBuffer = NULL; +PFNGLISQUERYPROC __glewIsQuery = NULL; +PFNGLMAPBUFFERPROC __glewMapBuffer = NULL; +PFNGLUNMAPBUFFERPROC __glewUnmapBuffer = NULL; + +PFNGLATTACHSHADERPROC __glewAttachShader = NULL; +PFNGLBINDATTRIBLOCATIONPROC __glewBindAttribLocation = NULL; +PFNGLBLENDEQUATIONSEPARATEPROC __glewBlendEquationSeparate = NULL; +PFNGLCOMPILESHADERPROC __glewCompileShader = NULL; +PFNGLCREATEPROGRAMPROC __glewCreateProgram = NULL; +PFNGLCREATESHADERPROC __glewCreateShader = NULL; +PFNGLDELETEPROGRAMPROC __glewDeleteProgram = NULL; +PFNGLDELETESHADERPROC __glewDeleteShader = NULL; +PFNGLDETACHSHADERPROC __glewDetachShader = NULL; +PFNGLDISABLEVERTEXATTRIBARRAYPROC __glewDisableVertexAttribArray = NULL; +PFNGLDRAWBUFFERSPROC __glewDrawBuffers = NULL; +PFNGLENABLEVERTEXATTRIBARRAYPROC __glewEnableVertexAttribArray = NULL; +PFNGLGETACTIVEATTRIBPROC __glewGetActiveAttrib = NULL; +PFNGLGETACTIVEUNIFORMPROC __glewGetActiveUniform = NULL; +PFNGLGETATTACHEDSHADERSPROC __glewGetAttachedShaders = NULL; +PFNGLGETATTRIBLOCATIONPROC __glewGetAttribLocation = NULL; +PFNGLGETPROGRAMINFOLOGPROC __glewGetProgramInfoLog = NULL; +PFNGLGETPROGRAMIVPROC __glewGetProgramiv = NULL; +PFNGLGETSHADERINFOLOGPROC __glewGetShaderInfoLog = NULL; +PFNGLGETSHADERSOURCEPROC __glewGetShaderSource = NULL; +PFNGLGETSHADERIVPROC __glewGetShaderiv = NULL; +PFNGLGETUNIFORMLOCATIONPROC __glewGetUniformLocation = NULL; +PFNGLGETUNIFORMFVPROC __glewGetUniformfv = NULL; +PFNGLGETUNIFORMIVPROC __glewGetUniformiv = NULL; +PFNGLGETVERTEXATTRIBPOINTERVPROC __glewGetVertexAttribPointerv = NULL; +PFNGLGETVERTEXATTRIBDVPROC __glewGetVertexAttribdv = NULL; +PFNGLGETVERTEXATTRIBFVPROC __glewGetVertexAttribfv = NULL; +PFNGLGETVERTEXATTRIBIVPROC __glewGetVertexAttribiv = NULL; +PFNGLISPROGRAMPROC __glewIsProgram = NULL; +PFNGLISSHADERPROC __glewIsShader = NULL; +PFNGLLINKPROGRAMPROC __glewLinkProgram = NULL; +PFNGLSHADERSOURCEPROC __glewShaderSource = NULL; +PFNGLSTENCILFUNCSEPARATEPROC __glewStencilFuncSeparate = NULL; +PFNGLSTENCILMASKSEPARATEPROC __glewStencilMaskSeparate = NULL; +PFNGLSTENCILOPSEPARATEPROC __glewStencilOpSeparate = NULL; +PFNGLUNIFORM1FPROC __glewUniform1f = NULL; +PFNGLUNIFORM1FVPROC __glewUniform1fv = NULL; +PFNGLUNIFORM1IPROC __glewUniform1i = NULL; +PFNGLUNIFORM1IVPROC __glewUniform1iv = NULL; +PFNGLUNIFORM2FPROC __glewUniform2f = NULL; +PFNGLUNIFORM2FVPROC __glewUniform2fv = NULL; +PFNGLUNIFORM2IPROC __glewUniform2i = NULL; +PFNGLUNIFORM2IVPROC __glewUniform2iv = NULL; +PFNGLUNIFORM3FPROC __glewUniform3f = NULL; +PFNGLUNIFORM3FVPROC __glewUniform3fv = NULL; +PFNGLUNIFORM3IPROC __glewUniform3i = NULL; +PFNGLUNIFORM3IVPROC __glewUniform3iv = NULL; +PFNGLUNIFORM4FPROC __glewUniform4f = NULL; +PFNGLUNIFORM4FVPROC __glewUniform4fv = NULL; +PFNGLUNIFORM4IPROC __glewUniform4i = NULL; +PFNGLUNIFORM4IVPROC __glewUniform4iv = NULL; +PFNGLUNIFORMMATRIX2FVPROC __glewUniformMatrix2fv = NULL; +PFNGLUNIFORMMATRIX3FVPROC __glewUniformMatrix3fv = NULL; +PFNGLUNIFORMMATRIX4FVPROC __glewUniformMatrix4fv = NULL; +PFNGLUSEPROGRAMPROC __glewUseProgram = NULL; +PFNGLVALIDATEPROGRAMPROC __glewValidateProgram = NULL; +PFNGLVERTEXATTRIB1DPROC __glewVertexAttrib1d = NULL; +PFNGLVERTEXATTRIB1DVPROC __glewVertexAttrib1dv = NULL; +PFNGLVERTEXATTRIB1FPROC __glewVertexAttrib1f = NULL; +PFNGLVERTEXATTRIB1FVPROC __glewVertexAttrib1fv = NULL; +PFNGLVERTEXATTRIB1SPROC __glewVertexAttrib1s = NULL; +PFNGLVERTEXATTRIB1SVPROC __glewVertexAttrib1sv = NULL; +PFNGLVERTEXATTRIB2DPROC __glewVertexAttrib2d = NULL; +PFNGLVERTEXATTRIB2DVPROC __glewVertexAttrib2dv = NULL; +PFNGLVERTEXATTRIB2FPROC __glewVertexAttrib2f = NULL; +PFNGLVERTEXATTRIB2FVPROC __glewVertexAttrib2fv = NULL; +PFNGLVERTEXATTRIB2SPROC __glewVertexAttrib2s = NULL; +PFNGLVERTEXATTRIB2SVPROC __glewVertexAttrib2sv = NULL; +PFNGLVERTEXATTRIB3DPROC __glewVertexAttrib3d = NULL; +PFNGLVERTEXATTRIB3DVPROC __glewVertexAttrib3dv = NULL; +PFNGLVERTEXATTRIB3FPROC __glewVertexAttrib3f = NULL; +PFNGLVERTEXATTRIB3FVPROC __glewVertexAttrib3fv = NULL; +PFNGLVERTEXATTRIB3SPROC __glewVertexAttrib3s = NULL; +PFNGLVERTEXATTRIB3SVPROC __glewVertexAttrib3sv = NULL; +PFNGLVERTEXATTRIB4NBVPROC __glewVertexAttrib4Nbv = NULL; +PFNGLVERTEXATTRIB4NIVPROC __glewVertexAttrib4Niv = NULL; +PFNGLVERTEXATTRIB4NSVPROC __glewVertexAttrib4Nsv = NULL; +PFNGLVERTEXATTRIB4NUBPROC __glewVertexAttrib4Nub = NULL; +PFNGLVERTEXATTRIB4NUBVPROC __glewVertexAttrib4Nubv = NULL; +PFNGLVERTEXATTRIB4NUIVPROC __glewVertexAttrib4Nuiv = NULL; +PFNGLVERTEXATTRIB4NUSVPROC __glewVertexAttrib4Nusv = NULL; +PFNGLVERTEXATTRIB4BVPROC __glewVertexAttrib4bv = NULL; +PFNGLVERTEXATTRIB4DPROC __glewVertexAttrib4d = NULL; +PFNGLVERTEXATTRIB4DVPROC __glewVertexAttrib4dv = NULL; +PFNGLVERTEXATTRIB4FPROC __glewVertexAttrib4f = NULL; +PFNGLVERTEXATTRIB4FVPROC __glewVertexAttrib4fv = NULL; +PFNGLVERTEXATTRIB4IVPROC __glewVertexAttrib4iv = NULL; +PFNGLVERTEXATTRIB4SPROC __glewVertexAttrib4s = NULL; +PFNGLVERTEXATTRIB4SVPROC __glewVertexAttrib4sv = NULL; +PFNGLVERTEXATTRIB4UBVPROC __glewVertexAttrib4ubv = NULL; +PFNGLVERTEXATTRIB4UIVPROC __glewVertexAttrib4uiv = NULL; +PFNGLVERTEXATTRIB4USVPROC __glewVertexAttrib4usv = NULL; +PFNGLVERTEXATTRIBPOINTERPROC __glewVertexAttribPointer = NULL; + +PFNGLUNIFORMMATRIX2X3FVPROC __glewUniformMatrix2x3fv = NULL; +PFNGLUNIFORMMATRIX2X4FVPROC __glewUniformMatrix2x4fv = NULL; +PFNGLUNIFORMMATRIX3X2FVPROC __glewUniformMatrix3x2fv = NULL; +PFNGLUNIFORMMATRIX3X4FVPROC __glewUniformMatrix3x4fv = NULL; +PFNGLUNIFORMMATRIX4X2FVPROC __glewUniformMatrix4x2fv = NULL; +PFNGLUNIFORMMATRIX4X3FVPROC __glewUniformMatrix4x3fv = NULL; + +PFNGLTBUFFERMASK3DFXPROC __glewTbufferMask3DFX = NULL; + +PFNGLDRAWELEMENTARRAYAPPLEPROC __glewDrawElementArrayAPPLE = NULL; +PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC __glewDrawRangeElementArrayAPPLE = NULL; +PFNGLELEMENTPOINTERAPPLEPROC __glewElementPointerAPPLE = NULL; +PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC __glewMultiDrawElementArrayAPPLE = NULL; +PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC __glewMultiDrawRangeElementArrayAPPLE = NULL; + +PFNGLDELETEFENCESAPPLEPROC __glewDeleteFencesAPPLE = NULL; +PFNGLFINISHFENCEAPPLEPROC __glewFinishFenceAPPLE = NULL; +PFNGLFINISHOBJECTAPPLEPROC __glewFinishObjectAPPLE = NULL; +PFNGLGENFENCESAPPLEPROC __glewGenFencesAPPLE = NULL; +PFNGLISFENCEAPPLEPROC __glewIsFenceAPPLE = NULL; +PFNGLSETFENCEAPPLEPROC __glewSetFenceAPPLE = NULL; +PFNGLTESTFENCEAPPLEPROC __glewTestFenceAPPLE = NULL; +PFNGLTESTOBJECTAPPLEPROC __glewTestObjectAPPLE = NULL; + +PFNGLBUFFERPARAMETERIAPPLEPROC __glewBufferParameteriAPPLE = NULL; +PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC __glewFlushMappedBufferRangeAPPLE = NULL; + +PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC __glewGetTexParameterPointervAPPLE = NULL; +PFNGLTEXTURERANGEAPPLEPROC __glewTextureRangeAPPLE = NULL; + +PFNGLBINDVERTEXARRAYAPPLEPROC __glewBindVertexArrayAPPLE = NULL; +PFNGLDELETEVERTEXARRAYSAPPLEPROC __glewDeleteVertexArraysAPPLE = NULL; +PFNGLGENVERTEXARRAYSAPPLEPROC __glewGenVertexArraysAPPLE = NULL; +PFNGLISVERTEXARRAYAPPLEPROC __glewIsVertexArrayAPPLE = NULL; + +PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC __glewFlushVertexArrayRangeAPPLE = NULL; +PFNGLVERTEXARRAYPARAMETERIAPPLEPROC __glewVertexArrayParameteriAPPLE = NULL; +PFNGLVERTEXARRAYRANGEAPPLEPROC __glewVertexArrayRangeAPPLE = NULL; + +PFNGLCLAMPCOLORARBPROC __glewClampColorARB = NULL; + +PFNGLDRAWBUFFERSARBPROC __glewDrawBuffersARB = NULL; + +PFNGLCOLORSUBTABLEPROC __glewColorSubTable = NULL; +PFNGLCOLORTABLEPROC __glewColorTable = NULL; +PFNGLCOLORTABLEPARAMETERFVPROC __glewColorTableParameterfv = NULL; +PFNGLCOLORTABLEPARAMETERIVPROC __glewColorTableParameteriv = NULL; +PFNGLCONVOLUTIONFILTER1DPROC __glewConvolutionFilter1D = NULL; +PFNGLCONVOLUTIONFILTER2DPROC __glewConvolutionFilter2D = NULL; +PFNGLCONVOLUTIONPARAMETERFPROC __glewConvolutionParameterf = NULL; +PFNGLCONVOLUTIONPARAMETERFVPROC __glewConvolutionParameterfv = NULL; +PFNGLCONVOLUTIONPARAMETERIPROC __glewConvolutionParameteri = NULL; +PFNGLCONVOLUTIONPARAMETERIVPROC __glewConvolutionParameteriv = NULL; +PFNGLCOPYCOLORSUBTABLEPROC __glewCopyColorSubTable = NULL; +PFNGLCOPYCOLORTABLEPROC __glewCopyColorTable = NULL; +PFNGLCOPYCONVOLUTIONFILTER1DPROC __glewCopyConvolutionFilter1D = NULL; +PFNGLCOPYCONVOLUTIONFILTER2DPROC __glewCopyConvolutionFilter2D = NULL; +PFNGLGETCOLORTABLEPROC __glewGetColorTable = NULL; +PFNGLGETCOLORTABLEPARAMETERFVPROC __glewGetColorTableParameterfv = NULL; +PFNGLGETCOLORTABLEPARAMETERIVPROC __glewGetColorTableParameteriv = NULL; +PFNGLGETCONVOLUTIONFILTERPROC __glewGetConvolutionFilter = NULL; +PFNGLGETCONVOLUTIONPARAMETERFVPROC __glewGetConvolutionParameterfv = NULL; +PFNGLGETCONVOLUTIONPARAMETERIVPROC __glewGetConvolutionParameteriv = NULL; +PFNGLGETHISTOGRAMPROC __glewGetHistogram = NULL; +PFNGLGETHISTOGRAMPARAMETERFVPROC __glewGetHistogramParameterfv = NULL; +PFNGLGETHISTOGRAMPARAMETERIVPROC __glewGetHistogramParameteriv = NULL; +PFNGLGETMINMAXPROC __glewGetMinmax = NULL; +PFNGLGETMINMAXPARAMETERFVPROC __glewGetMinmaxParameterfv = NULL; +PFNGLGETMINMAXPARAMETERIVPROC __glewGetMinmaxParameteriv = NULL; +PFNGLGETSEPARABLEFILTERPROC __glewGetSeparableFilter = NULL; +PFNGLHISTOGRAMPROC __glewHistogram = NULL; +PFNGLMINMAXPROC __glewMinmax = NULL; +PFNGLRESETHISTOGRAMPROC __glewResetHistogram = NULL; +PFNGLRESETMINMAXPROC __glewResetMinmax = NULL; +PFNGLSEPARABLEFILTER2DPROC __glewSeparableFilter2D = NULL; + +PFNGLCURRENTPALETTEMATRIXARBPROC __glewCurrentPaletteMatrixARB = NULL; +PFNGLMATRIXINDEXPOINTERARBPROC __glewMatrixIndexPointerARB = NULL; +PFNGLMATRIXINDEXUBVARBPROC __glewMatrixIndexubvARB = NULL; +PFNGLMATRIXINDEXUIVARBPROC __glewMatrixIndexuivARB = NULL; +PFNGLMATRIXINDEXUSVARBPROC __glewMatrixIndexusvARB = NULL; + +PFNGLSAMPLECOVERAGEARBPROC __glewSampleCoverageARB = NULL; + +PFNGLACTIVETEXTUREARBPROC __glewActiveTextureARB = NULL; +PFNGLCLIENTACTIVETEXTUREARBPROC __glewClientActiveTextureARB = NULL; +PFNGLMULTITEXCOORD1DARBPROC __glewMultiTexCoord1dARB = NULL; +PFNGLMULTITEXCOORD1DVARBPROC __glewMultiTexCoord1dvARB = NULL; +PFNGLMULTITEXCOORD1FARBPROC __glewMultiTexCoord1fARB = NULL; +PFNGLMULTITEXCOORD1FVARBPROC __glewMultiTexCoord1fvARB = NULL; +PFNGLMULTITEXCOORD1IARBPROC __glewMultiTexCoord1iARB = NULL; +PFNGLMULTITEXCOORD1IVARBPROC __glewMultiTexCoord1ivARB = NULL; +PFNGLMULTITEXCOORD1SARBPROC __glewMultiTexCoord1sARB = NULL; +PFNGLMULTITEXCOORD1SVARBPROC __glewMultiTexCoord1svARB = NULL; +PFNGLMULTITEXCOORD2DARBPROC __glewMultiTexCoord2dARB = NULL; +PFNGLMULTITEXCOORD2DVARBPROC __glewMultiTexCoord2dvARB = NULL; +PFNGLMULTITEXCOORD2FARBPROC __glewMultiTexCoord2fARB = NULL; +PFNGLMULTITEXCOORD2FVARBPROC __glewMultiTexCoord2fvARB = NULL; +PFNGLMULTITEXCOORD2IARBPROC __glewMultiTexCoord2iARB = NULL; +PFNGLMULTITEXCOORD2IVARBPROC __glewMultiTexCoord2ivARB = NULL; +PFNGLMULTITEXCOORD2SARBPROC __glewMultiTexCoord2sARB = NULL; +PFNGLMULTITEXCOORD2SVARBPROC __glewMultiTexCoord2svARB = NULL; +PFNGLMULTITEXCOORD3DARBPROC __glewMultiTexCoord3dARB = NULL; +PFNGLMULTITEXCOORD3DVARBPROC __glewMultiTexCoord3dvARB = NULL; +PFNGLMULTITEXCOORD3FARBPROC __glewMultiTexCoord3fARB = NULL; +PFNGLMULTITEXCOORD3FVARBPROC __glewMultiTexCoord3fvARB = NULL; +PFNGLMULTITEXCOORD3IARBPROC __glewMultiTexCoord3iARB = NULL; +PFNGLMULTITEXCOORD3IVARBPROC __glewMultiTexCoord3ivARB = NULL; +PFNGLMULTITEXCOORD3SARBPROC __glewMultiTexCoord3sARB = NULL; +PFNGLMULTITEXCOORD3SVARBPROC __glewMultiTexCoord3svARB = NULL; +PFNGLMULTITEXCOORD4DARBPROC __glewMultiTexCoord4dARB = NULL; +PFNGLMULTITEXCOORD4DVARBPROC __glewMultiTexCoord4dvARB = NULL; +PFNGLMULTITEXCOORD4FARBPROC __glewMultiTexCoord4fARB = NULL; +PFNGLMULTITEXCOORD4FVARBPROC __glewMultiTexCoord4fvARB = NULL; +PFNGLMULTITEXCOORD4IARBPROC __glewMultiTexCoord4iARB = NULL; +PFNGLMULTITEXCOORD4IVARBPROC __glewMultiTexCoord4ivARB = NULL; +PFNGLMULTITEXCOORD4SARBPROC __glewMultiTexCoord4sARB = NULL; +PFNGLMULTITEXCOORD4SVARBPROC __glewMultiTexCoord4svARB = NULL; + +PFNGLBEGINQUERYARBPROC __glewBeginQueryARB = NULL; +PFNGLDELETEQUERIESARBPROC __glewDeleteQueriesARB = NULL; +PFNGLENDQUERYARBPROC __glewEndQueryARB = NULL; +PFNGLGENQUERIESARBPROC __glewGenQueriesARB = NULL; +PFNGLGETQUERYOBJECTIVARBPROC __glewGetQueryObjectivARB = NULL; +PFNGLGETQUERYOBJECTUIVARBPROC __glewGetQueryObjectuivARB = NULL; +PFNGLGETQUERYIVARBPROC __glewGetQueryivARB = NULL; +PFNGLISQUERYARBPROC __glewIsQueryARB = NULL; + +PFNGLPOINTPARAMETERFARBPROC __glewPointParameterfARB = NULL; +PFNGLPOINTPARAMETERFVARBPROC __glewPointParameterfvARB = NULL; + +PFNGLATTACHOBJECTARBPROC __glewAttachObjectARB = NULL; +PFNGLCOMPILESHADERARBPROC __glewCompileShaderARB = NULL; +PFNGLCREATEPROGRAMOBJECTARBPROC __glewCreateProgramObjectARB = NULL; +PFNGLCREATESHADEROBJECTARBPROC __glewCreateShaderObjectARB = NULL; +PFNGLDELETEOBJECTARBPROC __glewDeleteObjectARB = NULL; +PFNGLDETACHOBJECTARBPROC __glewDetachObjectARB = NULL; +PFNGLGETACTIVEUNIFORMARBPROC __glewGetActiveUniformARB = NULL; +PFNGLGETATTACHEDOBJECTSARBPROC __glewGetAttachedObjectsARB = NULL; +PFNGLGETHANDLEARBPROC __glewGetHandleARB = NULL; +PFNGLGETINFOLOGARBPROC __glewGetInfoLogARB = NULL; +PFNGLGETOBJECTPARAMETERFVARBPROC __glewGetObjectParameterfvARB = NULL; +PFNGLGETOBJECTPARAMETERIVARBPROC __glewGetObjectParameterivARB = NULL; +PFNGLGETSHADERSOURCEARBPROC __glewGetShaderSourceARB = NULL; +PFNGLGETUNIFORMLOCATIONARBPROC __glewGetUniformLocationARB = NULL; +PFNGLGETUNIFORMFVARBPROC __glewGetUniformfvARB = NULL; +PFNGLGETUNIFORMIVARBPROC __glewGetUniformivARB = NULL; +PFNGLLINKPROGRAMARBPROC __glewLinkProgramARB = NULL; +PFNGLSHADERSOURCEARBPROC __glewShaderSourceARB = NULL; +PFNGLUNIFORM1FARBPROC __glewUniform1fARB = NULL; +PFNGLUNIFORM1FVARBPROC __glewUniform1fvARB = NULL; +PFNGLUNIFORM1IARBPROC __glewUniform1iARB = NULL; +PFNGLUNIFORM1IVARBPROC __glewUniform1ivARB = NULL; +PFNGLUNIFORM2FARBPROC __glewUniform2fARB = NULL; +PFNGLUNIFORM2FVARBPROC __glewUniform2fvARB = NULL; +PFNGLUNIFORM2IARBPROC __glewUniform2iARB = NULL; +PFNGLUNIFORM2IVARBPROC __glewUniform2ivARB = NULL; +PFNGLUNIFORM3FARBPROC __glewUniform3fARB = NULL; +PFNGLUNIFORM3FVARBPROC __glewUniform3fvARB = NULL; +PFNGLUNIFORM3IARBPROC __glewUniform3iARB = NULL; +PFNGLUNIFORM3IVARBPROC __glewUniform3ivARB = NULL; +PFNGLUNIFORM4FARBPROC __glewUniform4fARB = NULL; +PFNGLUNIFORM4FVARBPROC __glewUniform4fvARB = NULL; +PFNGLUNIFORM4IARBPROC __glewUniform4iARB = NULL; +PFNGLUNIFORM4IVARBPROC __glewUniform4ivARB = NULL; +PFNGLUNIFORMMATRIX2FVARBPROC __glewUniformMatrix2fvARB = NULL; +PFNGLUNIFORMMATRIX3FVARBPROC __glewUniformMatrix3fvARB = NULL; +PFNGLUNIFORMMATRIX4FVARBPROC __glewUniformMatrix4fvARB = NULL; +PFNGLUSEPROGRAMOBJECTARBPROC __glewUseProgramObjectARB = NULL; +PFNGLVALIDATEPROGRAMARBPROC __glewValidateProgramARB = NULL; + +PFNGLCOMPRESSEDTEXIMAGE1DARBPROC __glewCompressedTexImage1DARB = NULL; +PFNGLCOMPRESSEDTEXIMAGE2DARBPROC __glewCompressedTexImage2DARB = NULL; +PFNGLCOMPRESSEDTEXIMAGE3DARBPROC __glewCompressedTexImage3DARB = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC __glewCompressedTexSubImage1DARB = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC __glewCompressedTexSubImage2DARB = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC __glewCompressedTexSubImage3DARB = NULL; +PFNGLGETCOMPRESSEDTEXIMAGEARBPROC __glewGetCompressedTexImageARB = NULL; + +PFNGLLOADTRANSPOSEMATRIXDARBPROC __glewLoadTransposeMatrixdARB = NULL; +PFNGLLOADTRANSPOSEMATRIXFARBPROC __glewLoadTransposeMatrixfARB = NULL; +PFNGLMULTTRANSPOSEMATRIXDARBPROC __glewMultTransposeMatrixdARB = NULL; +PFNGLMULTTRANSPOSEMATRIXFARBPROC __glewMultTransposeMatrixfARB = NULL; + +PFNGLVERTEXBLENDARBPROC __glewVertexBlendARB = NULL; +PFNGLWEIGHTPOINTERARBPROC __glewWeightPointerARB = NULL; +PFNGLWEIGHTBVARBPROC __glewWeightbvARB = NULL; +PFNGLWEIGHTDVARBPROC __glewWeightdvARB = NULL; +PFNGLWEIGHTFVARBPROC __glewWeightfvARB = NULL; +PFNGLWEIGHTIVARBPROC __glewWeightivARB = NULL; +PFNGLWEIGHTSVARBPROC __glewWeightsvARB = NULL; +PFNGLWEIGHTUBVARBPROC __glewWeightubvARB = NULL; +PFNGLWEIGHTUIVARBPROC __glewWeightuivARB = NULL; +PFNGLWEIGHTUSVARBPROC __glewWeightusvARB = NULL; + +PFNGLBINDBUFFERARBPROC __glewBindBufferARB = NULL; +PFNGLBUFFERDATAARBPROC __glewBufferDataARB = NULL; +PFNGLBUFFERSUBDATAARBPROC __glewBufferSubDataARB = NULL; +PFNGLDELETEBUFFERSARBPROC __glewDeleteBuffersARB = NULL; +PFNGLGENBUFFERSARBPROC __glewGenBuffersARB = NULL; +PFNGLGETBUFFERPARAMETERIVARBPROC __glewGetBufferParameterivARB = NULL; +PFNGLGETBUFFERPOINTERVARBPROC __glewGetBufferPointervARB = NULL; +PFNGLGETBUFFERSUBDATAARBPROC __glewGetBufferSubDataARB = NULL; +PFNGLISBUFFERARBPROC __glewIsBufferARB = NULL; +PFNGLMAPBUFFERARBPROC __glewMapBufferARB = NULL; +PFNGLUNMAPBUFFERARBPROC __glewUnmapBufferARB = NULL; + +PFNGLBINDPROGRAMARBPROC __glewBindProgramARB = NULL; +PFNGLDELETEPROGRAMSARBPROC __glewDeleteProgramsARB = NULL; +PFNGLDISABLEVERTEXATTRIBARRAYARBPROC __glewDisableVertexAttribArrayARB = NULL; +PFNGLENABLEVERTEXATTRIBARRAYARBPROC __glewEnableVertexAttribArrayARB = NULL; +PFNGLGENPROGRAMSARBPROC __glewGenProgramsARB = NULL; +PFNGLGETPROGRAMENVPARAMETERDVARBPROC __glewGetProgramEnvParameterdvARB = NULL; +PFNGLGETPROGRAMENVPARAMETERFVARBPROC __glewGetProgramEnvParameterfvARB = NULL; +PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC __glewGetProgramLocalParameterdvARB = NULL; +PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC __glewGetProgramLocalParameterfvARB = NULL; +PFNGLGETPROGRAMSTRINGARBPROC __glewGetProgramStringARB = NULL; +PFNGLGETPROGRAMIVARBPROC __glewGetProgramivARB = NULL; +PFNGLGETVERTEXATTRIBPOINTERVARBPROC __glewGetVertexAttribPointervARB = NULL; +PFNGLGETVERTEXATTRIBDVARBPROC __glewGetVertexAttribdvARB = NULL; +PFNGLGETVERTEXATTRIBFVARBPROC __glewGetVertexAttribfvARB = NULL; +PFNGLGETVERTEXATTRIBIVARBPROC __glewGetVertexAttribivARB = NULL; +PFNGLISPROGRAMARBPROC __glewIsProgramARB = NULL; +PFNGLPROGRAMENVPARAMETER4DARBPROC __glewProgramEnvParameter4dARB = NULL; +PFNGLPROGRAMENVPARAMETER4DVARBPROC __glewProgramEnvParameter4dvARB = NULL; +PFNGLPROGRAMENVPARAMETER4FARBPROC __glewProgramEnvParameter4fARB = NULL; +PFNGLPROGRAMENVPARAMETER4FVARBPROC __glewProgramEnvParameter4fvARB = NULL; +PFNGLPROGRAMLOCALPARAMETER4DARBPROC __glewProgramLocalParameter4dARB = NULL; +PFNGLPROGRAMLOCALPARAMETER4DVARBPROC __glewProgramLocalParameter4dvARB = NULL; +PFNGLPROGRAMLOCALPARAMETER4FARBPROC __glewProgramLocalParameter4fARB = NULL; +PFNGLPROGRAMLOCALPARAMETER4FVARBPROC __glewProgramLocalParameter4fvARB = NULL; +PFNGLPROGRAMSTRINGARBPROC __glewProgramStringARB = NULL; +PFNGLVERTEXATTRIB1DARBPROC __glewVertexAttrib1dARB = NULL; +PFNGLVERTEXATTRIB1DVARBPROC __glewVertexAttrib1dvARB = NULL; +PFNGLVERTEXATTRIB1FARBPROC __glewVertexAttrib1fARB = NULL; +PFNGLVERTEXATTRIB1FVARBPROC __glewVertexAttrib1fvARB = NULL; +PFNGLVERTEXATTRIB1SARBPROC __glewVertexAttrib1sARB = NULL; +PFNGLVERTEXATTRIB1SVARBPROC __glewVertexAttrib1svARB = NULL; +PFNGLVERTEXATTRIB2DARBPROC __glewVertexAttrib2dARB = NULL; +PFNGLVERTEXATTRIB2DVARBPROC __glewVertexAttrib2dvARB = NULL; +PFNGLVERTEXATTRIB2FARBPROC __glewVertexAttrib2fARB = NULL; +PFNGLVERTEXATTRIB2FVARBPROC __glewVertexAttrib2fvARB = NULL; +PFNGLVERTEXATTRIB2SARBPROC __glewVertexAttrib2sARB = NULL; +PFNGLVERTEXATTRIB2SVARBPROC __glewVertexAttrib2svARB = NULL; +PFNGLVERTEXATTRIB3DARBPROC __glewVertexAttrib3dARB = NULL; +PFNGLVERTEXATTRIB3DVARBPROC __glewVertexAttrib3dvARB = NULL; +PFNGLVERTEXATTRIB3FARBPROC __glewVertexAttrib3fARB = NULL; +PFNGLVERTEXATTRIB3FVARBPROC __glewVertexAttrib3fvARB = NULL; +PFNGLVERTEXATTRIB3SARBPROC __glewVertexAttrib3sARB = NULL; +PFNGLVERTEXATTRIB3SVARBPROC __glewVertexAttrib3svARB = NULL; +PFNGLVERTEXATTRIB4NBVARBPROC __glewVertexAttrib4NbvARB = NULL; +PFNGLVERTEXATTRIB4NIVARBPROC __glewVertexAttrib4NivARB = NULL; +PFNGLVERTEXATTRIB4NSVARBPROC __glewVertexAttrib4NsvARB = NULL; +PFNGLVERTEXATTRIB4NUBARBPROC __glewVertexAttrib4NubARB = NULL; +PFNGLVERTEXATTRIB4NUBVARBPROC __glewVertexAttrib4NubvARB = NULL; +PFNGLVERTEXATTRIB4NUIVARBPROC __glewVertexAttrib4NuivARB = NULL; +PFNGLVERTEXATTRIB4NUSVARBPROC __glewVertexAttrib4NusvARB = NULL; +PFNGLVERTEXATTRIB4BVARBPROC __glewVertexAttrib4bvARB = NULL; +PFNGLVERTEXATTRIB4DARBPROC __glewVertexAttrib4dARB = NULL; +PFNGLVERTEXATTRIB4DVARBPROC __glewVertexAttrib4dvARB = NULL; +PFNGLVERTEXATTRIB4FARBPROC __glewVertexAttrib4fARB = NULL; +PFNGLVERTEXATTRIB4FVARBPROC __glewVertexAttrib4fvARB = NULL; +PFNGLVERTEXATTRIB4IVARBPROC __glewVertexAttrib4ivARB = NULL; +PFNGLVERTEXATTRIB4SARBPROC __glewVertexAttrib4sARB = NULL; +PFNGLVERTEXATTRIB4SVARBPROC __glewVertexAttrib4svARB = NULL; +PFNGLVERTEXATTRIB4UBVARBPROC __glewVertexAttrib4ubvARB = NULL; +PFNGLVERTEXATTRIB4UIVARBPROC __glewVertexAttrib4uivARB = NULL; +PFNGLVERTEXATTRIB4USVARBPROC __glewVertexAttrib4usvARB = NULL; +PFNGLVERTEXATTRIBPOINTERARBPROC __glewVertexAttribPointerARB = NULL; + +PFNGLBINDATTRIBLOCATIONARBPROC __glewBindAttribLocationARB = NULL; +PFNGLGETACTIVEATTRIBARBPROC __glewGetActiveAttribARB = NULL; +PFNGLGETATTRIBLOCATIONARBPROC __glewGetAttribLocationARB = NULL; + +PFNGLWINDOWPOS2DARBPROC __glewWindowPos2dARB = NULL; +PFNGLWINDOWPOS2DVARBPROC __glewWindowPos2dvARB = NULL; +PFNGLWINDOWPOS2FARBPROC __glewWindowPos2fARB = NULL; +PFNGLWINDOWPOS2FVARBPROC __glewWindowPos2fvARB = NULL; +PFNGLWINDOWPOS2IARBPROC __glewWindowPos2iARB = NULL; +PFNGLWINDOWPOS2IVARBPROC __glewWindowPos2ivARB = NULL; +PFNGLWINDOWPOS2SARBPROC __glewWindowPos2sARB = NULL; +PFNGLWINDOWPOS2SVARBPROC __glewWindowPos2svARB = NULL; +PFNGLWINDOWPOS3DARBPROC __glewWindowPos3dARB = NULL; +PFNGLWINDOWPOS3DVARBPROC __glewWindowPos3dvARB = NULL; +PFNGLWINDOWPOS3FARBPROC __glewWindowPos3fARB = NULL; +PFNGLWINDOWPOS3FVARBPROC __glewWindowPos3fvARB = NULL; +PFNGLWINDOWPOS3IARBPROC __glewWindowPos3iARB = NULL; +PFNGLWINDOWPOS3IVARBPROC __glewWindowPos3ivARB = NULL; +PFNGLWINDOWPOS3SARBPROC __glewWindowPos3sARB = NULL; +PFNGLWINDOWPOS3SVARBPROC __glewWindowPos3svARB = NULL; + +PFNGLDRAWBUFFERSATIPROC __glewDrawBuffersATI = NULL; + +PFNGLDRAWELEMENTARRAYATIPROC __glewDrawElementArrayATI = NULL; +PFNGLDRAWRANGEELEMENTARRAYATIPROC __glewDrawRangeElementArrayATI = NULL; +PFNGLELEMENTPOINTERATIPROC __glewElementPointerATI = NULL; + +PFNGLGETTEXBUMPPARAMETERFVATIPROC __glewGetTexBumpParameterfvATI = NULL; +PFNGLGETTEXBUMPPARAMETERIVATIPROC __glewGetTexBumpParameterivATI = NULL; +PFNGLTEXBUMPPARAMETERFVATIPROC __glewTexBumpParameterfvATI = NULL; +PFNGLTEXBUMPPARAMETERIVATIPROC __glewTexBumpParameterivATI = NULL; + +PFNGLALPHAFRAGMENTOP1ATIPROC __glewAlphaFragmentOp1ATI = NULL; +PFNGLALPHAFRAGMENTOP2ATIPROC __glewAlphaFragmentOp2ATI = NULL; +PFNGLALPHAFRAGMENTOP3ATIPROC __glewAlphaFragmentOp3ATI = NULL; +PFNGLBEGINFRAGMENTSHADERATIPROC __glewBeginFragmentShaderATI = NULL; +PFNGLBINDFRAGMENTSHADERATIPROC __glewBindFragmentShaderATI = NULL; +PFNGLCOLORFRAGMENTOP1ATIPROC __glewColorFragmentOp1ATI = NULL; +PFNGLCOLORFRAGMENTOP2ATIPROC __glewColorFragmentOp2ATI = NULL; +PFNGLCOLORFRAGMENTOP3ATIPROC __glewColorFragmentOp3ATI = NULL; +PFNGLDELETEFRAGMENTSHADERATIPROC __glewDeleteFragmentShaderATI = NULL; +PFNGLENDFRAGMENTSHADERATIPROC __glewEndFragmentShaderATI = NULL; +PFNGLGENFRAGMENTSHADERSATIPROC __glewGenFragmentShadersATI = NULL; +PFNGLPASSTEXCOORDATIPROC __glewPassTexCoordATI = NULL; +PFNGLSAMPLEMAPATIPROC __glewSampleMapATI = NULL; +PFNGLSETFRAGMENTSHADERCONSTANTATIPROC __glewSetFragmentShaderConstantATI = NULL; + +PFNGLMAPOBJECTBUFFERATIPROC __glewMapObjectBufferATI = NULL; +PFNGLUNMAPOBJECTBUFFERATIPROC __glewUnmapObjectBufferATI = NULL; + +PFNGLPNTRIANGLESFATIPROC __glPNTrianglewesfATI = NULL; +PFNGLPNTRIANGLESIATIPROC __glPNTrianglewesiATI = NULL; + +PFNGLSTENCILFUNCSEPARATEATIPROC __glewStencilFuncSeparateATI = NULL; +PFNGLSTENCILOPSEPARATEATIPROC __glewStencilOpSeparateATI = NULL; + +PFNGLARRAYOBJECTATIPROC __glewArrayObjectATI = NULL; +PFNGLFREEOBJECTBUFFERATIPROC __glewFreeObjectBufferATI = NULL; +PFNGLGETARRAYOBJECTFVATIPROC __glewGetArrayObjectfvATI = NULL; +PFNGLGETARRAYOBJECTIVATIPROC __glewGetArrayObjectivATI = NULL; +PFNGLGETOBJECTBUFFERFVATIPROC __glewGetObjectBufferfvATI = NULL; +PFNGLGETOBJECTBUFFERIVATIPROC __glewGetObjectBufferivATI = NULL; +PFNGLGETVARIANTARRAYOBJECTFVATIPROC __glewGetVariantArrayObjectfvATI = NULL; +PFNGLGETVARIANTARRAYOBJECTIVATIPROC __glewGetVariantArrayObjectivATI = NULL; +PFNGLISOBJECTBUFFERATIPROC __glewIsObjectBufferATI = NULL; +PFNGLNEWOBJECTBUFFERATIPROC __glewNewObjectBufferATI = NULL; +PFNGLUPDATEOBJECTBUFFERATIPROC __glewUpdateObjectBufferATI = NULL; +PFNGLVARIANTARRAYOBJECTATIPROC __glewVariantArrayObjectATI = NULL; + +PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC __glewGetVertexAttribArrayObjectfvATI = NULL; +PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC __glewGetVertexAttribArrayObjectivATI = NULL; +PFNGLVERTEXATTRIBARRAYOBJECTATIPROC __glewVertexAttribArrayObjectATI = NULL; + +PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC __glewClientActiveVertexStreamATI = NULL; +PFNGLNORMALSTREAM3BATIPROC __glewNormalStream3bATI = NULL; +PFNGLNORMALSTREAM3BVATIPROC __glewNormalStream3bvATI = NULL; +PFNGLNORMALSTREAM3DATIPROC __glewNormalStream3dATI = NULL; +PFNGLNORMALSTREAM3DVATIPROC __glewNormalStream3dvATI = NULL; +PFNGLNORMALSTREAM3FATIPROC __glewNormalStream3fATI = NULL; +PFNGLNORMALSTREAM3FVATIPROC __glewNormalStream3fvATI = NULL; +PFNGLNORMALSTREAM3IATIPROC __glewNormalStream3iATI = NULL; +PFNGLNORMALSTREAM3IVATIPROC __glewNormalStream3ivATI = NULL; +PFNGLNORMALSTREAM3SATIPROC __glewNormalStream3sATI = NULL; +PFNGLNORMALSTREAM3SVATIPROC __glewNormalStream3svATI = NULL; +PFNGLVERTEXBLENDENVFATIPROC __glewVertexBlendEnvfATI = NULL; +PFNGLVERTEXBLENDENVIATIPROC __glewVertexBlendEnviATI = NULL; +PFNGLVERTEXSTREAM2DATIPROC __glewVertexStream2dATI = NULL; +PFNGLVERTEXSTREAM2DVATIPROC __glewVertexStream2dvATI = NULL; +PFNGLVERTEXSTREAM2FATIPROC __glewVertexStream2fATI = NULL; +PFNGLVERTEXSTREAM2FVATIPROC __glewVertexStream2fvATI = NULL; +PFNGLVERTEXSTREAM2IATIPROC __glewVertexStream2iATI = NULL; +PFNGLVERTEXSTREAM2IVATIPROC __glewVertexStream2ivATI = NULL; +PFNGLVERTEXSTREAM2SATIPROC __glewVertexStream2sATI = NULL; +PFNGLVERTEXSTREAM2SVATIPROC __glewVertexStream2svATI = NULL; +PFNGLVERTEXSTREAM3DATIPROC __glewVertexStream3dATI = NULL; +PFNGLVERTEXSTREAM3DVATIPROC __glewVertexStream3dvATI = NULL; +PFNGLVERTEXSTREAM3FATIPROC __glewVertexStream3fATI = NULL; +PFNGLVERTEXSTREAM3FVATIPROC __glewVertexStream3fvATI = NULL; +PFNGLVERTEXSTREAM3IATIPROC __glewVertexStream3iATI = NULL; +PFNGLVERTEXSTREAM3IVATIPROC __glewVertexStream3ivATI = NULL; +PFNGLVERTEXSTREAM3SATIPROC __glewVertexStream3sATI = NULL; +PFNGLVERTEXSTREAM3SVATIPROC __glewVertexStream3svATI = NULL; +PFNGLVERTEXSTREAM4DATIPROC __glewVertexStream4dATI = NULL; +PFNGLVERTEXSTREAM4DVATIPROC __glewVertexStream4dvATI = NULL; +PFNGLVERTEXSTREAM4FATIPROC __glewVertexStream4fATI = NULL; +PFNGLVERTEXSTREAM4FVATIPROC __glewVertexStream4fvATI = NULL; +PFNGLVERTEXSTREAM4IATIPROC __glewVertexStream4iATI = NULL; +PFNGLVERTEXSTREAM4IVATIPROC __glewVertexStream4ivATI = NULL; +PFNGLVERTEXSTREAM4SATIPROC __glewVertexStream4sATI = NULL; +PFNGLVERTEXSTREAM4SVATIPROC __glewVertexStream4svATI = NULL; + +PFNGLGETUNIFORMBUFFERSIZEEXTPROC __glewGetUniformBufferSizeEXT = NULL; +PFNGLGETUNIFORMOFFSETEXTPROC __glewGetUniformOffsetEXT = NULL; +PFNGLUNIFORMBUFFEREXTPROC __glewUniformBufferEXT = NULL; + +PFNGLBLENDCOLOREXTPROC __glewBlendColorEXT = NULL; + +PFNGLBLENDEQUATIONSEPARATEEXTPROC __glewBlendEquationSeparateEXT = NULL; + +PFNGLBLENDFUNCSEPARATEEXTPROC __glewBlendFuncSeparateEXT = NULL; + +PFNGLBLENDEQUATIONEXTPROC __glewBlendEquationEXT = NULL; + +PFNGLCOLORSUBTABLEEXTPROC __glewColorSubTableEXT = NULL; +PFNGLCOPYCOLORSUBTABLEEXTPROC __glewCopyColorSubTableEXT = NULL; + +PFNGLLOCKARRAYSEXTPROC __glewLockArraysEXT = NULL; +PFNGLUNLOCKARRAYSEXTPROC __glewUnlockArraysEXT = NULL; + +PFNGLCONVOLUTIONFILTER1DEXTPROC __glewConvolutionFilter1DEXT = NULL; +PFNGLCONVOLUTIONFILTER2DEXTPROC __glewConvolutionFilter2DEXT = NULL; +PFNGLCONVOLUTIONPARAMETERFEXTPROC __glewConvolutionParameterfEXT = NULL; +PFNGLCONVOLUTIONPARAMETERFVEXTPROC __glewConvolutionParameterfvEXT = NULL; +PFNGLCONVOLUTIONPARAMETERIEXTPROC __glewConvolutionParameteriEXT = NULL; +PFNGLCONVOLUTIONPARAMETERIVEXTPROC __glewConvolutionParameterivEXT = NULL; +PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC __glewCopyConvolutionFilter1DEXT = NULL; +PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC __glewCopyConvolutionFilter2DEXT = NULL; +PFNGLGETCONVOLUTIONFILTEREXTPROC __glewGetConvolutionFilterEXT = NULL; +PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC __glewGetConvolutionParameterfvEXT = NULL; +PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC __glewGetConvolutionParameterivEXT = NULL; +PFNGLGETSEPARABLEFILTEREXTPROC __glewGetSeparableFilterEXT = NULL; +PFNGLSEPARABLEFILTER2DEXTPROC __glewSeparableFilter2DEXT = NULL; + +PFNGLBINORMALPOINTEREXTPROC __glewBinormalPointerEXT = NULL; +PFNGLTANGENTPOINTEREXTPROC __glewTangentPointerEXT = NULL; + +PFNGLCOPYTEXIMAGE1DEXTPROC __glewCopyTexImage1DEXT = NULL; +PFNGLCOPYTEXIMAGE2DEXTPROC __glewCopyTexImage2DEXT = NULL; +PFNGLCOPYTEXSUBIMAGE1DEXTPROC __glewCopyTexSubImage1DEXT = NULL; +PFNGLCOPYTEXSUBIMAGE2DEXTPROC __glewCopyTexSubImage2DEXT = NULL; +PFNGLCOPYTEXSUBIMAGE3DEXTPROC __glewCopyTexSubImage3DEXT = NULL; + +PFNGLCULLPARAMETERDVEXTPROC __glewCullParameterdvEXT = NULL; +PFNGLCULLPARAMETERFVEXTPROC __glewCullParameterfvEXT = NULL; + +PFNGLDEPTHBOUNDSEXTPROC __glewDepthBoundsEXT = NULL; + +PFNGLCOLORMASKINDEXEDEXTPROC __glewColorMaskIndexedEXT = NULL; +PFNGLDISABLEINDEXEDEXTPROC __glewDisableIndexedEXT = NULL; +PFNGLENABLEINDEXEDEXTPROC __glewEnableIndexedEXT = NULL; +PFNGLGETBOOLEANINDEXEDVEXTPROC __glewGetBooleanIndexedvEXT = NULL; +PFNGLGETINTEGERINDEXEDVEXTPROC __glewGetIntegerIndexedvEXT = NULL; +PFNGLISENABLEDINDEXEDEXTPROC __glewIsEnabledIndexedEXT = NULL; + +PFNGLDRAWARRAYSINSTANCEDEXTPROC __glewDrawArraysInstancedEXT = NULL; +PFNGLDRAWELEMENTSINSTANCEDEXTPROC __glewDrawElementsInstancedEXT = NULL; + +PFNGLDRAWRANGEELEMENTSEXTPROC __glewDrawRangeElementsEXT = NULL; + +PFNGLFOGCOORDPOINTEREXTPROC __glewFogCoordPointerEXT = NULL; +PFNGLFOGCOORDDEXTPROC __glewFogCoorddEXT = NULL; +PFNGLFOGCOORDDVEXTPROC __glewFogCoorddvEXT = NULL; +PFNGLFOGCOORDFEXTPROC __glewFogCoordfEXT = NULL; +PFNGLFOGCOORDFVEXTPROC __glewFogCoordfvEXT = NULL; + +PFNGLFRAGMENTCOLORMATERIALEXTPROC __glewFragmentColorMaterialEXT = NULL; +PFNGLFRAGMENTLIGHTMODELFEXTPROC __glewFragmentLightModelfEXT = NULL; +PFNGLFRAGMENTLIGHTMODELFVEXTPROC __glewFragmentLightModelfvEXT = NULL; +PFNGLFRAGMENTLIGHTMODELIEXTPROC __glewFragmentLightModeliEXT = NULL; +PFNGLFRAGMENTLIGHTMODELIVEXTPROC __glewFragmentLightModelivEXT = NULL; +PFNGLFRAGMENTLIGHTFEXTPROC __glewFragmentLightfEXT = NULL; +PFNGLFRAGMENTLIGHTFVEXTPROC __glewFragmentLightfvEXT = NULL; +PFNGLFRAGMENTLIGHTIEXTPROC __glewFragmentLightiEXT = NULL; +PFNGLFRAGMENTLIGHTIVEXTPROC __glewFragmentLightivEXT = NULL; +PFNGLFRAGMENTMATERIALFEXTPROC __glewFragmentMaterialfEXT = NULL; +PFNGLFRAGMENTMATERIALFVEXTPROC __glewFragmentMaterialfvEXT = NULL; +PFNGLFRAGMENTMATERIALIEXTPROC __glewFragmentMaterialiEXT = NULL; +PFNGLFRAGMENTMATERIALIVEXTPROC __glewFragmentMaterialivEXT = NULL; +PFNGLGETFRAGMENTLIGHTFVEXTPROC __glewGetFragmentLightfvEXT = NULL; +PFNGLGETFRAGMENTLIGHTIVEXTPROC __glewGetFragmentLightivEXT = NULL; +PFNGLGETFRAGMENTMATERIALFVEXTPROC __glewGetFragmentMaterialfvEXT = NULL; +PFNGLGETFRAGMENTMATERIALIVEXTPROC __glewGetFragmentMaterialivEXT = NULL; +PFNGLLIGHTENVIEXTPROC __glewLightEnviEXT = NULL; + +PFNGLBLITFRAMEBUFFEREXTPROC __glewBlitFramebufferEXT = NULL; + +PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewRenderbufferStorageMultisampleEXT = NULL; + +PFNGLBINDFRAMEBUFFEREXTPROC __glewBindFramebufferEXT = NULL; +PFNGLBINDRENDERBUFFEREXTPROC __glewBindRenderbufferEXT = NULL; +PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC __glewCheckFramebufferStatusEXT = NULL; +PFNGLDELETEFRAMEBUFFERSEXTPROC __glewDeleteFramebuffersEXT = NULL; +PFNGLDELETERENDERBUFFERSEXTPROC __glewDeleteRenderbuffersEXT = NULL; +PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC __glewFramebufferRenderbufferEXT = NULL; +PFNGLFRAMEBUFFERTEXTURE1DEXTPROC __glewFramebufferTexture1DEXT = NULL; +PFNGLFRAMEBUFFERTEXTURE2DEXTPROC __glewFramebufferTexture2DEXT = NULL; +PFNGLFRAMEBUFFERTEXTURE3DEXTPROC __glewFramebufferTexture3DEXT = NULL; +PFNGLGENFRAMEBUFFERSEXTPROC __glewGenFramebuffersEXT = NULL; +PFNGLGENRENDERBUFFERSEXTPROC __glewGenRenderbuffersEXT = NULL; +PFNGLGENERATEMIPMAPEXTPROC __glewGenerateMipmapEXT = NULL; +PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC __glewGetFramebufferAttachmentParameterivEXT = NULL; +PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC __glewGetRenderbufferParameterivEXT = NULL; +PFNGLISFRAMEBUFFEREXTPROC __glewIsFramebufferEXT = NULL; +PFNGLISRENDERBUFFEREXTPROC __glewIsRenderbufferEXT = NULL; +PFNGLRENDERBUFFERSTORAGEEXTPROC __glewRenderbufferStorageEXT = NULL; + +PFNGLFRAMEBUFFERTEXTUREEXTPROC __glewFramebufferTextureEXT = NULL; +PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC __glewFramebufferTextureFaceEXT = NULL; +PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC __glewFramebufferTextureLayerEXT = NULL; +PFNGLPROGRAMPARAMETERIEXTPROC __glewProgramParameteriEXT = NULL; + +PFNGLPROGRAMENVPARAMETERS4FVEXTPROC __glewProgramEnvParameters4fvEXT = NULL; +PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC __glewProgramLocalParameters4fvEXT = NULL; + +PFNGLBINDFRAGDATALOCATIONEXTPROC __glewBindFragDataLocationEXT = NULL; +PFNGLGETFRAGDATALOCATIONEXTPROC __glewGetFragDataLocationEXT = NULL; +PFNGLGETUNIFORMUIVEXTPROC __glewGetUniformuivEXT = NULL; +PFNGLGETVERTEXATTRIBIIVEXTPROC __glewGetVertexAttribIivEXT = NULL; +PFNGLGETVERTEXATTRIBIUIVEXTPROC __glewGetVertexAttribIuivEXT = NULL; +PFNGLUNIFORM1UIEXTPROC __glewUniform1uiEXT = NULL; +PFNGLUNIFORM1UIVEXTPROC __glewUniform1uivEXT = NULL; +PFNGLUNIFORM2UIEXTPROC __glewUniform2uiEXT = NULL; +PFNGLUNIFORM2UIVEXTPROC __glewUniform2uivEXT = NULL; +PFNGLUNIFORM3UIEXTPROC __glewUniform3uiEXT = NULL; +PFNGLUNIFORM3UIVEXTPROC __glewUniform3uivEXT = NULL; +PFNGLUNIFORM4UIEXTPROC __glewUniform4uiEXT = NULL; +PFNGLUNIFORM4UIVEXTPROC __glewUniform4uivEXT = NULL; +PFNGLVERTEXATTRIBI1IEXTPROC __glewVertexAttribI1iEXT = NULL; +PFNGLVERTEXATTRIBI1IVEXTPROC __glewVertexAttribI1ivEXT = NULL; +PFNGLVERTEXATTRIBI1UIEXTPROC __glewVertexAttribI1uiEXT = NULL; +PFNGLVERTEXATTRIBI1UIVEXTPROC __glewVertexAttribI1uivEXT = NULL; +PFNGLVERTEXATTRIBI2IEXTPROC __glewVertexAttribI2iEXT = NULL; +PFNGLVERTEXATTRIBI2IVEXTPROC __glewVertexAttribI2ivEXT = NULL; +PFNGLVERTEXATTRIBI2UIEXTPROC __glewVertexAttribI2uiEXT = NULL; +PFNGLVERTEXATTRIBI2UIVEXTPROC __glewVertexAttribI2uivEXT = NULL; +PFNGLVERTEXATTRIBI3IEXTPROC __glewVertexAttribI3iEXT = NULL; +PFNGLVERTEXATTRIBI3IVEXTPROC __glewVertexAttribI3ivEXT = NULL; +PFNGLVERTEXATTRIBI3UIEXTPROC __glewVertexAttribI3uiEXT = NULL; +PFNGLVERTEXATTRIBI3UIVEXTPROC __glewVertexAttribI3uivEXT = NULL; +PFNGLVERTEXATTRIBI4BVEXTPROC __glewVertexAttribI4bvEXT = NULL; +PFNGLVERTEXATTRIBI4IEXTPROC __glewVertexAttribI4iEXT = NULL; +PFNGLVERTEXATTRIBI4IVEXTPROC __glewVertexAttribI4ivEXT = NULL; +PFNGLVERTEXATTRIBI4SVEXTPROC __glewVertexAttribI4svEXT = NULL; +PFNGLVERTEXATTRIBI4UBVEXTPROC __glewVertexAttribI4ubvEXT = NULL; +PFNGLVERTEXATTRIBI4UIEXTPROC __glewVertexAttribI4uiEXT = NULL; +PFNGLVERTEXATTRIBI4UIVEXTPROC __glewVertexAttribI4uivEXT = NULL; +PFNGLVERTEXATTRIBI4USVEXTPROC __glewVertexAttribI4usvEXT = NULL; +PFNGLVERTEXATTRIBIPOINTEREXTPROC __glewVertexAttribIPointerEXT = NULL; + +PFNGLGETHISTOGRAMEXTPROC __glewGetHistogramEXT = NULL; +PFNGLGETHISTOGRAMPARAMETERFVEXTPROC __glewGetHistogramParameterfvEXT = NULL; +PFNGLGETHISTOGRAMPARAMETERIVEXTPROC __glewGetHistogramParameterivEXT = NULL; +PFNGLGETMINMAXEXTPROC __glewGetMinmaxEXT = NULL; +PFNGLGETMINMAXPARAMETERFVEXTPROC __glewGetMinmaxParameterfvEXT = NULL; +PFNGLGETMINMAXPARAMETERIVEXTPROC __glewGetMinmaxParameterivEXT = NULL; +PFNGLHISTOGRAMEXTPROC __glewHistogramEXT = NULL; +PFNGLMINMAXEXTPROC __glewMinmaxEXT = NULL; +PFNGLRESETHISTOGRAMEXTPROC __glewResetHistogramEXT = NULL; +PFNGLRESETMINMAXEXTPROC __glewResetMinmaxEXT = NULL; + +PFNGLINDEXFUNCEXTPROC __glewIndexFuncEXT = NULL; + +PFNGLINDEXMATERIALEXTPROC __glewIndexMaterialEXT = NULL; + +PFNGLAPPLYTEXTUREEXTPROC __glewApplyTextureEXT = NULL; +PFNGLTEXTURELIGHTEXTPROC __glewTextureLightEXT = NULL; +PFNGLTEXTUREMATERIALEXTPROC __glewTextureMaterialEXT = NULL; + +PFNGLMULTIDRAWARRAYSEXTPROC __glewMultiDrawArraysEXT = NULL; +PFNGLMULTIDRAWELEMENTSEXTPROC __glewMultiDrawElementsEXT = NULL; + +PFNGLSAMPLEMASKEXTPROC __glewSampleMaskEXT = NULL; +PFNGLSAMPLEPATTERNEXTPROC __glewSamplePatternEXT = NULL; + +PFNGLCOLORTABLEEXTPROC __glewColorTableEXT = NULL; +PFNGLGETCOLORTABLEEXTPROC __glewGetColorTableEXT = NULL; +PFNGLGETCOLORTABLEPARAMETERFVEXTPROC __glewGetColorTableParameterfvEXT = NULL; +PFNGLGETCOLORTABLEPARAMETERIVEXTPROC __glewGetColorTableParameterivEXT = NULL; + +PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC __glewGetPixelTransformParameterfvEXT = NULL; +PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC __glewGetPixelTransformParameterivEXT = NULL; +PFNGLPIXELTRANSFORMPARAMETERFEXTPROC __glewPixelTransformParameterfEXT = NULL; +PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC __glewPixelTransformParameterfvEXT = NULL; +PFNGLPIXELTRANSFORMPARAMETERIEXTPROC __glewPixelTransformParameteriEXT = NULL; +PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC __glewPixelTransformParameterivEXT = NULL; + +PFNGLPOINTPARAMETERFEXTPROC __glewPointParameterfEXT = NULL; +PFNGLPOINTPARAMETERFVEXTPROC __glewPointParameterfvEXT = NULL; + +PFNGLPOLYGONOFFSETEXTPROC __glewPolygonOffsetEXT = NULL; + +PFNGLBEGINSCENEEXTPROC __glewBeginSceneEXT = NULL; +PFNGLENDSCENEEXTPROC __glewEndSceneEXT = NULL; + +PFNGLSECONDARYCOLOR3BEXTPROC __glewSecondaryColor3bEXT = NULL; +PFNGLSECONDARYCOLOR3BVEXTPROC __glewSecondaryColor3bvEXT = NULL; +PFNGLSECONDARYCOLOR3DEXTPROC __glewSecondaryColor3dEXT = NULL; +PFNGLSECONDARYCOLOR3DVEXTPROC __glewSecondaryColor3dvEXT = NULL; +PFNGLSECONDARYCOLOR3FEXTPROC __glewSecondaryColor3fEXT = NULL; +PFNGLSECONDARYCOLOR3FVEXTPROC __glewSecondaryColor3fvEXT = NULL; +PFNGLSECONDARYCOLOR3IEXTPROC __glewSecondaryColor3iEXT = NULL; +PFNGLSECONDARYCOLOR3IVEXTPROC __glewSecondaryColor3ivEXT = NULL; +PFNGLSECONDARYCOLOR3SEXTPROC __glewSecondaryColor3sEXT = NULL; +PFNGLSECONDARYCOLOR3SVEXTPROC __glewSecondaryColor3svEXT = NULL; +PFNGLSECONDARYCOLOR3UBEXTPROC __glewSecondaryColor3ubEXT = NULL; +PFNGLSECONDARYCOLOR3UBVEXTPROC __glewSecondaryColor3ubvEXT = NULL; +PFNGLSECONDARYCOLOR3UIEXTPROC __glewSecondaryColor3uiEXT = NULL; +PFNGLSECONDARYCOLOR3UIVEXTPROC __glewSecondaryColor3uivEXT = NULL; +PFNGLSECONDARYCOLOR3USEXTPROC __glewSecondaryColor3usEXT = NULL; +PFNGLSECONDARYCOLOR3USVEXTPROC __glewSecondaryColor3usvEXT = NULL; +PFNGLSECONDARYCOLORPOINTEREXTPROC __glewSecondaryColorPointerEXT = NULL; + +PFNGLACTIVESTENCILFACEEXTPROC __glewActiveStencilFaceEXT = NULL; + +PFNGLTEXSUBIMAGE1DEXTPROC __glewTexSubImage1DEXT = NULL; +PFNGLTEXSUBIMAGE2DEXTPROC __glewTexSubImage2DEXT = NULL; +PFNGLTEXSUBIMAGE3DEXTPROC __glewTexSubImage3DEXT = NULL; + +PFNGLTEXIMAGE3DEXTPROC __glewTexImage3DEXT = NULL; + +PFNGLTEXBUFFEREXTPROC __glewTexBufferEXT = NULL; + +PFNGLCLEARCOLORIIEXTPROC __glewClearColorIiEXT = NULL; +PFNGLCLEARCOLORIUIEXTPROC __glewClearColorIuiEXT = NULL; +PFNGLGETTEXPARAMETERIIVEXTPROC __glewGetTexParameterIivEXT = NULL; +PFNGLGETTEXPARAMETERIUIVEXTPROC __glewGetTexParameterIuivEXT = NULL; +PFNGLTEXPARAMETERIIVEXTPROC __glewTexParameterIivEXT = NULL; +PFNGLTEXPARAMETERIUIVEXTPROC __glewTexParameterIuivEXT = NULL; + +PFNGLARETEXTURESRESIDENTEXTPROC __glewAreTexturesResidentEXT = NULL; +PFNGLBINDTEXTUREEXTPROC __glewBindTextureEXT = NULL; +PFNGLDELETETEXTURESEXTPROC __glewDeleteTexturesEXT = NULL; +PFNGLGENTEXTURESEXTPROC __glewGenTexturesEXT = NULL; +PFNGLISTEXTUREEXTPROC __glewIsTextureEXT = NULL; +PFNGLPRIORITIZETEXTURESEXTPROC __glewPrioritizeTexturesEXT = NULL; + +PFNGLTEXTURENORMALEXTPROC __glewTextureNormalEXT = NULL; + +PFNGLGETQUERYOBJECTI64VEXTPROC __glewGetQueryObjecti64vEXT = NULL; +PFNGLGETQUERYOBJECTUI64VEXTPROC __glewGetQueryObjectui64vEXT = NULL; + +PFNGLARRAYELEMENTEXTPROC __glewArrayElementEXT = NULL; +PFNGLCOLORPOINTEREXTPROC __glewColorPointerEXT = NULL; +PFNGLDRAWARRAYSEXTPROC __glewDrawArraysEXT = NULL; +PFNGLEDGEFLAGPOINTEREXTPROC __glewEdgeFlagPointerEXT = NULL; +PFNGLGETPOINTERVEXTPROC __glewGetPointervEXT = NULL; +PFNGLINDEXPOINTEREXTPROC __glewIndexPointerEXT = NULL; +PFNGLNORMALPOINTEREXTPROC __glewNormalPointerEXT = NULL; +PFNGLTEXCOORDPOINTEREXTPROC __glewTexCoordPointerEXT = NULL; +PFNGLVERTEXPOINTEREXTPROC __glewVertexPointerEXT = NULL; + +PFNGLBEGINVERTEXSHADEREXTPROC __glewBeginVertexShaderEXT = NULL; +PFNGLBINDLIGHTPARAMETEREXTPROC __glewBindLightParameterEXT = NULL; +PFNGLBINDMATERIALPARAMETEREXTPROC __glewBindMaterialParameterEXT = NULL; +PFNGLBINDPARAMETEREXTPROC __glewBindParameterEXT = NULL; +PFNGLBINDTEXGENPARAMETEREXTPROC __glewBindTexGenParameterEXT = NULL; +PFNGLBINDTEXTUREUNITPARAMETEREXTPROC __glewBindTextureUnitParameterEXT = NULL; +PFNGLBINDVERTEXSHADEREXTPROC __glewBindVertexShaderEXT = NULL; +PFNGLDELETEVERTEXSHADEREXTPROC __glewDeleteVertexShaderEXT = NULL; +PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC __glewDisableVariantClientStateEXT = NULL; +PFNGLENABLEVARIANTCLIENTSTATEEXTPROC __glewEnableVariantClientStateEXT = NULL; +PFNGLENDVERTEXSHADEREXTPROC __glewEndVertexShaderEXT = NULL; +PFNGLEXTRACTCOMPONENTEXTPROC __glewExtractComponentEXT = NULL; +PFNGLGENSYMBOLSEXTPROC __glewGenSymbolsEXT = NULL; +PFNGLGENVERTEXSHADERSEXTPROC __glewGenVertexShadersEXT = NULL; +PFNGLGETINVARIANTBOOLEANVEXTPROC __glewGetInvariantBooleanvEXT = NULL; +PFNGLGETINVARIANTFLOATVEXTPROC __glewGetInvariantFloatvEXT = NULL; +PFNGLGETINVARIANTINTEGERVEXTPROC __glewGetInvariantIntegervEXT = NULL; +PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC __glewGetLocalConstantBooleanvEXT = NULL; +PFNGLGETLOCALCONSTANTFLOATVEXTPROC __glewGetLocalConstantFloatvEXT = NULL; +PFNGLGETLOCALCONSTANTINTEGERVEXTPROC __glewGetLocalConstantIntegervEXT = NULL; +PFNGLGETVARIANTBOOLEANVEXTPROC __glewGetVariantBooleanvEXT = NULL; +PFNGLGETVARIANTFLOATVEXTPROC __glewGetVariantFloatvEXT = NULL; +PFNGLGETVARIANTINTEGERVEXTPROC __glewGetVariantIntegervEXT = NULL; +PFNGLGETVARIANTPOINTERVEXTPROC __glewGetVariantPointervEXT = NULL; +PFNGLINSERTCOMPONENTEXTPROC __glewInsertComponentEXT = NULL; +PFNGLISVARIANTENABLEDEXTPROC __glewIsVariantEnabledEXT = NULL; +PFNGLSETINVARIANTEXTPROC __glewSetInvariantEXT = NULL; +PFNGLSETLOCALCONSTANTEXTPROC __glewSetLocalConstantEXT = NULL; +PFNGLSHADEROP1EXTPROC __glewShaderOp1EXT = NULL; +PFNGLSHADEROP2EXTPROC __glewShaderOp2EXT = NULL; +PFNGLSHADEROP3EXTPROC __glewShaderOp3EXT = NULL; +PFNGLSWIZZLEEXTPROC __glewSwizzleEXT = NULL; +PFNGLVARIANTPOINTEREXTPROC __glewVariantPointerEXT = NULL; +PFNGLVARIANTBVEXTPROC __glewVariantbvEXT = NULL; +PFNGLVARIANTDVEXTPROC __glewVariantdvEXT = NULL; +PFNGLVARIANTFVEXTPROC __glewVariantfvEXT = NULL; +PFNGLVARIANTIVEXTPROC __glewVariantivEXT = NULL; +PFNGLVARIANTSVEXTPROC __glewVariantsvEXT = NULL; +PFNGLVARIANTUBVEXTPROC __glewVariantubvEXT = NULL; +PFNGLVARIANTUIVEXTPROC __glewVariantuivEXT = NULL; +PFNGLVARIANTUSVEXTPROC __glewVariantusvEXT = NULL; +PFNGLWRITEMASKEXTPROC __glewWriteMaskEXT = NULL; + +PFNGLVERTEXWEIGHTPOINTEREXTPROC __glewVertexWeightPointerEXT = NULL; +PFNGLVERTEXWEIGHTFEXTPROC __glewVertexWeightfEXT = NULL; +PFNGLVERTEXWEIGHTFVEXTPROC __glewVertexWeightfvEXT = NULL; + +PFNGLFRAMETERMINATORGREMEDYPROC __glewFrameTerminatorGREMEDY = NULL; + +PFNGLSTRINGMARKERGREMEDYPROC __glewStringMarkerGREMEDY = NULL; + +PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC __glewGetImageTransformParameterfvHP = NULL; +PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC __glewGetImageTransformParameterivHP = NULL; +PFNGLIMAGETRANSFORMPARAMETERFHPPROC __glewImageTransformParameterfHP = NULL; +PFNGLIMAGETRANSFORMPARAMETERFVHPPROC __glewImageTransformParameterfvHP = NULL; +PFNGLIMAGETRANSFORMPARAMETERIHPPROC __glewImageTransformParameteriHP = NULL; +PFNGLIMAGETRANSFORMPARAMETERIVHPPROC __glewImageTransformParameterivHP = NULL; + +PFNGLMULTIMODEDRAWARRAYSIBMPROC __glewMultiModeDrawArraysIBM = NULL; +PFNGLMULTIMODEDRAWELEMENTSIBMPROC __glewMultiModeDrawElementsIBM = NULL; + +PFNGLCOLORPOINTERLISTIBMPROC __glewColorPointerListIBM = NULL; +PFNGLEDGEFLAGPOINTERLISTIBMPROC __glewEdgeFlagPointerListIBM = NULL; +PFNGLFOGCOORDPOINTERLISTIBMPROC __glewFogCoordPointerListIBM = NULL; +PFNGLINDEXPOINTERLISTIBMPROC __glewIndexPointerListIBM = NULL; +PFNGLNORMALPOINTERLISTIBMPROC __glewNormalPointerListIBM = NULL; +PFNGLSECONDARYCOLORPOINTERLISTIBMPROC __glewSecondaryColorPointerListIBM = NULL; +PFNGLTEXCOORDPOINTERLISTIBMPROC __glewTexCoordPointerListIBM = NULL; +PFNGLVERTEXPOINTERLISTIBMPROC __glewVertexPointerListIBM = NULL; + +PFNGLCOLORPOINTERVINTELPROC __glewColorPointervINTEL = NULL; +PFNGLNORMALPOINTERVINTELPROC __glewNormalPointervINTEL = NULL; +PFNGLTEXCOORDPOINTERVINTELPROC __glewTexCoordPointervINTEL = NULL; +PFNGLVERTEXPOINTERVINTELPROC __glewVertexPointervINTEL = NULL; + +PFNGLTEXSCISSORFUNCINTELPROC __glewTexScissorFuncINTEL = NULL; +PFNGLTEXSCISSORINTELPROC __glewTexScissorINTEL = NULL; + +PFNGLBUFFERREGIONENABLEDEXTPROC __glewBufferRegionEnabledEXT = NULL; +PFNGLDELETEBUFFERREGIONEXTPROC __glewDeleteBufferRegionEXT = NULL; +PFNGLDRAWBUFFERREGIONEXTPROC __glewDrawBufferRegionEXT = NULL; +PFNGLNEWBUFFERREGIONEXTPROC __glewNewBufferRegionEXT = NULL; +PFNGLREADBUFFERREGIONEXTPROC __glewReadBufferRegionEXT = NULL; + +PFNGLRESIZEBUFFERSMESAPROC __glewResizeBuffersMESA = NULL; + +PFNGLWINDOWPOS2DMESAPROC __glewWindowPos2dMESA = NULL; +PFNGLWINDOWPOS2DVMESAPROC __glewWindowPos2dvMESA = NULL; +PFNGLWINDOWPOS2FMESAPROC __glewWindowPos2fMESA = NULL; +PFNGLWINDOWPOS2FVMESAPROC __glewWindowPos2fvMESA = NULL; +PFNGLWINDOWPOS2IMESAPROC __glewWindowPos2iMESA = NULL; +PFNGLWINDOWPOS2IVMESAPROC __glewWindowPos2ivMESA = NULL; +PFNGLWINDOWPOS2SMESAPROC __glewWindowPos2sMESA = NULL; +PFNGLWINDOWPOS2SVMESAPROC __glewWindowPos2svMESA = NULL; +PFNGLWINDOWPOS3DMESAPROC __glewWindowPos3dMESA = NULL; +PFNGLWINDOWPOS3DVMESAPROC __glewWindowPos3dvMESA = NULL; +PFNGLWINDOWPOS3FMESAPROC __glewWindowPos3fMESA = NULL; +PFNGLWINDOWPOS3FVMESAPROC __glewWindowPos3fvMESA = NULL; +PFNGLWINDOWPOS3IMESAPROC __glewWindowPos3iMESA = NULL; +PFNGLWINDOWPOS3IVMESAPROC __glewWindowPos3ivMESA = NULL; +PFNGLWINDOWPOS3SMESAPROC __glewWindowPos3sMESA = NULL; +PFNGLWINDOWPOS3SVMESAPROC __glewWindowPos3svMESA = NULL; +PFNGLWINDOWPOS4DMESAPROC __glewWindowPos4dMESA = NULL; +PFNGLWINDOWPOS4DVMESAPROC __glewWindowPos4dvMESA = NULL; +PFNGLWINDOWPOS4FMESAPROC __glewWindowPos4fMESA = NULL; +PFNGLWINDOWPOS4FVMESAPROC __glewWindowPos4fvMESA = NULL; +PFNGLWINDOWPOS4IMESAPROC __glewWindowPos4iMESA = NULL; +PFNGLWINDOWPOS4IVMESAPROC __glewWindowPos4ivMESA = NULL; +PFNGLWINDOWPOS4SMESAPROC __glewWindowPos4sMESA = NULL; +PFNGLWINDOWPOS4SVMESAPROC __glewWindowPos4svMESA = NULL; + +PFNGLCLEARDEPTHDNVPROC __glewClearDepthdNV = NULL; +PFNGLDEPTHBOUNDSDNVPROC __glewDepthBoundsdNV = NULL; +PFNGLDEPTHRANGEDNVPROC __glewDepthRangedNV = NULL; + +PFNGLEVALMAPSNVPROC __glewEvalMapsNV = NULL; +PFNGLGETMAPATTRIBPARAMETERFVNVPROC __glewGetMapAttribParameterfvNV = NULL; +PFNGLGETMAPATTRIBPARAMETERIVNVPROC __glewGetMapAttribParameterivNV = NULL; +PFNGLGETMAPCONTROLPOINTSNVPROC __glewGetMapControlPointsNV = NULL; +PFNGLGETMAPPARAMETERFVNVPROC __glewGetMapParameterfvNV = NULL; +PFNGLGETMAPPARAMETERIVNVPROC __glewGetMapParameterivNV = NULL; +PFNGLMAPCONTROLPOINTSNVPROC __glewMapControlPointsNV = NULL; +PFNGLMAPPARAMETERFVNVPROC __glewMapParameterfvNV = NULL; +PFNGLMAPPARAMETERIVNVPROC __glewMapParameterivNV = NULL; + +PFNGLDELETEFENCESNVPROC __glewDeleteFencesNV = NULL; +PFNGLFINISHFENCENVPROC __glewFinishFenceNV = NULL; +PFNGLGENFENCESNVPROC __glewGenFencesNV = NULL; +PFNGLGETFENCEIVNVPROC __glewGetFenceivNV = NULL; +PFNGLISFENCENVPROC __glewIsFenceNV = NULL; +PFNGLSETFENCENVPROC __glewSetFenceNV = NULL; +PFNGLTESTFENCENVPROC __glewTestFenceNV = NULL; + +PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC __glewGetProgramNamedParameterdvNV = NULL; +PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC __glewGetProgramNamedParameterfvNV = NULL; +PFNGLPROGRAMNAMEDPARAMETER4DNVPROC __glewProgramNamedParameter4dNV = NULL; +PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC __glewProgramNamedParameter4dvNV = NULL; +PFNGLPROGRAMNAMEDPARAMETER4FNVPROC __glewProgramNamedParameter4fNV = NULL; +PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC __glewProgramNamedParameter4fvNV = NULL; + +PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC __glewRenderbufferStorageMultisampleCoverageNV = NULL; + +PFNGLPROGRAMVERTEXLIMITNVPROC __glewProgramVertexLimitNV = NULL; + +PFNGLPROGRAMENVPARAMETERI4INVPROC __glewProgramEnvParameterI4iNV = NULL; +PFNGLPROGRAMENVPARAMETERI4IVNVPROC __glewProgramEnvParameterI4ivNV = NULL; +PFNGLPROGRAMENVPARAMETERI4UINVPROC __glewProgramEnvParameterI4uiNV = NULL; +PFNGLPROGRAMENVPARAMETERI4UIVNVPROC __glewProgramEnvParameterI4uivNV = NULL; +PFNGLPROGRAMENVPARAMETERSI4IVNVPROC __glewProgramEnvParametersI4ivNV = NULL; +PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC __glewProgramEnvParametersI4uivNV = NULL; +PFNGLPROGRAMLOCALPARAMETERI4INVPROC __glewProgramLocalParameterI4iNV = NULL; +PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC __glewProgramLocalParameterI4ivNV = NULL; +PFNGLPROGRAMLOCALPARAMETERI4UINVPROC __glewProgramLocalParameterI4uiNV = NULL; +PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC __glewProgramLocalParameterI4uivNV = NULL; +PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC __glewProgramLocalParametersI4ivNV = NULL; +PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC __glewProgramLocalParametersI4uivNV = NULL; + +PFNGLCOLOR3HNVPROC __glewColor3hNV = NULL; +PFNGLCOLOR3HVNVPROC __glewColor3hvNV = NULL; +PFNGLCOLOR4HNVPROC __glewColor4hNV = NULL; +PFNGLCOLOR4HVNVPROC __glewColor4hvNV = NULL; +PFNGLFOGCOORDHNVPROC __glewFogCoordhNV = NULL; +PFNGLFOGCOORDHVNVPROC __glewFogCoordhvNV = NULL; +PFNGLMULTITEXCOORD1HNVPROC __glewMultiTexCoord1hNV = NULL; +PFNGLMULTITEXCOORD1HVNVPROC __glewMultiTexCoord1hvNV = NULL; +PFNGLMULTITEXCOORD2HNVPROC __glewMultiTexCoord2hNV = NULL; +PFNGLMULTITEXCOORD2HVNVPROC __glewMultiTexCoord2hvNV = NULL; +PFNGLMULTITEXCOORD3HNVPROC __glewMultiTexCoord3hNV = NULL; +PFNGLMULTITEXCOORD3HVNVPROC __glewMultiTexCoord3hvNV = NULL; +PFNGLMULTITEXCOORD4HNVPROC __glewMultiTexCoord4hNV = NULL; +PFNGLMULTITEXCOORD4HVNVPROC __glewMultiTexCoord4hvNV = NULL; +PFNGLNORMAL3HNVPROC __glewNormal3hNV = NULL; +PFNGLNORMAL3HVNVPROC __glewNormal3hvNV = NULL; +PFNGLSECONDARYCOLOR3HNVPROC __glewSecondaryColor3hNV = NULL; +PFNGLSECONDARYCOLOR3HVNVPROC __glewSecondaryColor3hvNV = NULL; +PFNGLTEXCOORD1HNVPROC __glewTexCoord1hNV = NULL; +PFNGLTEXCOORD1HVNVPROC __glewTexCoord1hvNV = NULL; +PFNGLTEXCOORD2HNVPROC __glewTexCoord2hNV = NULL; +PFNGLTEXCOORD2HVNVPROC __glewTexCoord2hvNV = NULL; +PFNGLTEXCOORD3HNVPROC __glewTexCoord3hNV = NULL; +PFNGLTEXCOORD3HVNVPROC __glewTexCoord3hvNV = NULL; +PFNGLTEXCOORD4HNVPROC __glewTexCoord4hNV = NULL; +PFNGLTEXCOORD4HVNVPROC __glewTexCoord4hvNV = NULL; +PFNGLVERTEX2HNVPROC __glewVertex2hNV = NULL; +PFNGLVERTEX2HVNVPROC __glewVertex2hvNV = NULL; +PFNGLVERTEX3HNVPROC __glewVertex3hNV = NULL; +PFNGLVERTEX3HVNVPROC __glewVertex3hvNV = NULL; +PFNGLVERTEX4HNVPROC __glewVertex4hNV = NULL; +PFNGLVERTEX4HVNVPROC __glewVertex4hvNV = NULL; +PFNGLVERTEXATTRIB1HNVPROC __glewVertexAttrib1hNV = NULL; +PFNGLVERTEXATTRIB1HVNVPROC __glewVertexAttrib1hvNV = NULL; +PFNGLVERTEXATTRIB2HNVPROC __glewVertexAttrib2hNV = NULL; +PFNGLVERTEXATTRIB2HVNVPROC __glewVertexAttrib2hvNV = NULL; +PFNGLVERTEXATTRIB3HNVPROC __glewVertexAttrib3hNV = NULL; +PFNGLVERTEXATTRIB3HVNVPROC __glewVertexAttrib3hvNV = NULL; +PFNGLVERTEXATTRIB4HNVPROC __glewVertexAttrib4hNV = NULL; +PFNGLVERTEXATTRIB4HVNVPROC __glewVertexAttrib4hvNV = NULL; +PFNGLVERTEXATTRIBS1HVNVPROC __glewVertexAttribs1hvNV = NULL; +PFNGLVERTEXATTRIBS2HVNVPROC __glewVertexAttribs2hvNV = NULL; +PFNGLVERTEXATTRIBS3HVNVPROC __glewVertexAttribs3hvNV = NULL; +PFNGLVERTEXATTRIBS4HVNVPROC __glewVertexAttribs4hvNV = NULL; +PFNGLVERTEXWEIGHTHNVPROC __glewVertexWeighthNV = NULL; +PFNGLVERTEXWEIGHTHVNVPROC __glewVertexWeighthvNV = NULL; + +PFNGLBEGINOCCLUSIONQUERYNVPROC __glewBeginOcclusionQueryNV = NULL; +PFNGLDELETEOCCLUSIONQUERIESNVPROC __glewDeleteOcclusionQueriesNV = NULL; +PFNGLENDOCCLUSIONQUERYNVPROC __glewEndOcclusionQueryNV = NULL; +PFNGLGENOCCLUSIONQUERIESNVPROC __glewGenOcclusionQueriesNV = NULL; +PFNGLGETOCCLUSIONQUERYIVNVPROC __glewGetOcclusionQueryivNV = NULL; +PFNGLGETOCCLUSIONQUERYUIVNVPROC __glewGetOcclusionQueryuivNV = NULL; +PFNGLISOCCLUSIONQUERYNVPROC __glewIsOcclusionQueryNV = NULL; + +PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC __glewProgramBufferParametersIivNV = NULL; +PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC __glewProgramBufferParametersIuivNV = NULL; +PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC __glewProgramBufferParametersfvNV = NULL; + +PFNGLFLUSHPIXELDATARANGENVPROC __glewFlushPixelDataRangeNV = NULL; +PFNGLPIXELDATARANGENVPROC __glewPixelDataRangeNV = NULL; + +PFNGLPOINTPARAMETERINVPROC __glewPointParameteriNV = NULL; +PFNGLPOINTPARAMETERIVNVPROC __glewPointParameterivNV = NULL; + +PFNGLPRIMITIVERESTARTINDEXNVPROC __glewPrimitiveRestartIndexNV = NULL; +PFNGLPRIMITIVERESTARTNVPROC __glewPrimitiveRestartNV = NULL; + +PFNGLCOMBINERINPUTNVPROC __glewCombinerInputNV = NULL; +PFNGLCOMBINEROUTPUTNVPROC __glewCombinerOutputNV = NULL; +PFNGLCOMBINERPARAMETERFNVPROC __glewCombinerParameterfNV = NULL; +PFNGLCOMBINERPARAMETERFVNVPROC __glewCombinerParameterfvNV = NULL; +PFNGLCOMBINERPARAMETERINVPROC __glewCombinerParameteriNV = NULL; +PFNGLCOMBINERPARAMETERIVNVPROC __glewCombinerParameterivNV = NULL; +PFNGLFINALCOMBINERINPUTNVPROC __glewFinalCombinerInputNV = NULL; +PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC __glewGetCombinerInputParameterfvNV = NULL; +PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC __glewGetCombinerInputParameterivNV = NULL; +PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC __glewGetCombinerOutputParameterfvNV = NULL; +PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC __glewGetCombinerOutputParameterivNV = NULL; +PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC __glewGetFinalCombinerInputParameterfvNV = NULL; +PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC __glewGetFinalCombinerInputParameterivNV = NULL; + +PFNGLCOMBINERSTAGEPARAMETERFVNVPROC __glewCombinerStageParameterfvNV = NULL; +PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC __glewGetCombinerStageParameterfvNV = NULL; + +PFNGLACTIVEVARYINGNVPROC __glewActiveVaryingNV = NULL; +PFNGLBEGINTRANSFORMFEEDBACKNVPROC __glewBeginTransformFeedbackNV = NULL; +PFNGLBINDBUFFERBASENVPROC __glewBindBufferBaseNV = NULL; +PFNGLBINDBUFFEROFFSETNVPROC __glewBindBufferOffsetNV = NULL; +PFNGLBINDBUFFERRANGENVPROC __glewBindBufferRangeNV = NULL; +PFNGLENDTRANSFORMFEEDBACKNVPROC __glewEndTransformFeedbackNV = NULL; +PFNGLGETACTIVEVARYINGNVPROC __glewGetActiveVaryingNV = NULL; +PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC __glewGetTransformFeedbackVaryingNV = NULL; +PFNGLGETVARYINGLOCATIONNVPROC __glewGetVaryingLocationNV = NULL; +PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC __glewTransformFeedbackAttribsNV = NULL; +PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC __glewTransformFeedbackVaryingsNV = NULL; + +PFNGLFLUSHVERTEXARRAYRANGENVPROC __glewFlushVertexArrayRangeNV = NULL; +PFNGLVERTEXARRAYRANGENVPROC __glewVertexArrayRangeNV = NULL; + +PFNGLAREPROGRAMSRESIDENTNVPROC __glewAreProgramsResidentNV = NULL; +PFNGLBINDPROGRAMNVPROC __glewBindProgramNV = NULL; +PFNGLDELETEPROGRAMSNVPROC __glewDeleteProgramsNV = NULL; +PFNGLEXECUTEPROGRAMNVPROC __glewExecuteProgramNV = NULL; +PFNGLGENPROGRAMSNVPROC __glewGenProgramsNV = NULL; +PFNGLGETPROGRAMPARAMETERDVNVPROC __glewGetProgramParameterdvNV = NULL; +PFNGLGETPROGRAMPARAMETERFVNVPROC __glewGetProgramParameterfvNV = NULL; +PFNGLGETPROGRAMSTRINGNVPROC __glewGetProgramStringNV = NULL; +PFNGLGETPROGRAMIVNVPROC __glewGetProgramivNV = NULL; +PFNGLGETTRACKMATRIXIVNVPROC __glewGetTrackMatrixivNV = NULL; +PFNGLGETVERTEXATTRIBPOINTERVNVPROC __glewGetVertexAttribPointervNV = NULL; +PFNGLGETVERTEXATTRIBDVNVPROC __glewGetVertexAttribdvNV = NULL; +PFNGLGETVERTEXATTRIBFVNVPROC __glewGetVertexAttribfvNV = NULL; +PFNGLGETVERTEXATTRIBIVNVPROC __glewGetVertexAttribivNV = NULL; +PFNGLISPROGRAMNVPROC __glewIsProgramNV = NULL; +PFNGLLOADPROGRAMNVPROC __glewLoadProgramNV = NULL; +PFNGLPROGRAMPARAMETER4DNVPROC __glewProgramParameter4dNV = NULL; +PFNGLPROGRAMPARAMETER4DVNVPROC __glewProgramParameter4dvNV = NULL; +PFNGLPROGRAMPARAMETER4FNVPROC __glewProgramParameter4fNV = NULL; +PFNGLPROGRAMPARAMETER4FVNVPROC __glewProgramParameter4fvNV = NULL; +PFNGLPROGRAMPARAMETERS4DVNVPROC __glewProgramParameters4dvNV = NULL; +PFNGLPROGRAMPARAMETERS4FVNVPROC __glewProgramParameters4fvNV = NULL; +PFNGLREQUESTRESIDENTPROGRAMSNVPROC __glewRequestResidentProgramsNV = NULL; +PFNGLTRACKMATRIXNVPROC __glewTrackMatrixNV = NULL; +PFNGLVERTEXATTRIB1DNVPROC __glewVertexAttrib1dNV = NULL; +PFNGLVERTEXATTRIB1DVNVPROC __glewVertexAttrib1dvNV = NULL; +PFNGLVERTEXATTRIB1FNVPROC __glewVertexAttrib1fNV = NULL; +PFNGLVERTEXATTRIB1FVNVPROC __glewVertexAttrib1fvNV = NULL; +PFNGLVERTEXATTRIB1SNVPROC __glewVertexAttrib1sNV = NULL; +PFNGLVERTEXATTRIB1SVNVPROC __glewVertexAttrib1svNV = NULL; +PFNGLVERTEXATTRIB2DNVPROC __glewVertexAttrib2dNV = NULL; +PFNGLVERTEXATTRIB2DVNVPROC __glewVertexAttrib2dvNV = NULL; +PFNGLVERTEXATTRIB2FNVPROC __glewVertexAttrib2fNV = NULL; +PFNGLVERTEXATTRIB2FVNVPROC __glewVertexAttrib2fvNV = NULL; +PFNGLVERTEXATTRIB2SNVPROC __glewVertexAttrib2sNV = NULL; +PFNGLVERTEXATTRIB2SVNVPROC __glewVertexAttrib2svNV = NULL; +PFNGLVERTEXATTRIB3DNVPROC __glewVertexAttrib3dNV = NULL; +PFNGLVERTEXATTRIB3DVNVPROC __glewVertexAttrib3dvNV = NULL; +PFNGLVERTEXATTRIB3FNVPROC __glewVertexAttrib3fNV = NULL; +PFNGLVERTEXATTRIB3FVNVPROC __glewVertexAttrib3fvNV = NULL; +PFNGLVERTEXATTRIB3SNVPROC __glewVertexAttrib3sNV = NULL; +PFNGLVERTEXATTRIB3SVNVPROC __glewVertexAttrib3svNV = NULL; +PFNGLVERTEXATTRIB4DNVPROC __glewVertexAttrib4dNV = NULL; +PFNGLVERTEXATTRIB4DVNVPROC __glewVertexAttrib4dvNV = NULL; +PFNGLVERTEXATTRIB4FNVPROC __glewVertexAttrib4fNV = NULL; +PFNGLVERTEXATTRIB4FVNVPROC __glewVertexAttrib4fvNV = NULL; +PFNGLVERTEXATTRIB4SNVPROC __glewVertexAttrib4sNV = NULL; +PFNGLVERTEXATTRIB4SVNVPROC __glewVertexAttrib4svNV = NULL; +PFNGLVERTEXATTRIB4UBNVPROC __glewVertexAttrib4ubNV = NULL; +PFNGLVERTEXATTRIB4UBVNVPROC __glewVertexAttrib4ubvNV = NULL; +PFNGLVERTEXATTRIBPOINTERNVPROC __glewVertexAttribPointerNV = NULL; +PFNGLVERTEXATTRIBS1DVNVPROC __glewVertexAttribs1dvNV = NULL; +PFNGLVERTEXATTRIBS1FVNVPROC __glewVertexAttribs1fvNV = NULL; +PFNGLVERTEXATTRIBS1SVNVPROC __glewVertexAttribs1svNV = NULL; +PFNGLVERTEXATTRIBS2DVNVPROC __glewVertexAttribs2dvNV = NULL; +PFNGLVERTEXATTRIBS2FVNVPROC __glewVertexAttribs2fvNV = NULL; +PFNGLVERTEXATTRIBS2SVNVPROC __glewVertexAttribs2svNV = NULL; +PFNGLVERTEXATTRIBS3DVNVPROC __glewVertexAttribs3dvNV = NULL; +PFNGLVERTEXATTRIBS3FVNVPROC __glewVertexAttribs3fvNV = NULL; +PFNGLVERTEXATTRIBS3SVNVPROC __glewVertexAttribs3svNV = NULL; +PFNGLVERTEXATTRIBS4DVNVPROC __glewVertexAttribs4dvNV = NULL; +PFNGLVERTEXATTRIBS4FVNVPROC __glewVertexAttribs4fvNV = NULL; +PFNGLVERTEXATTRIBS4SVNVPROC __glewVertexAttribs4svNV = NULL; +PFNGLVERTEXATTRIBS4UBVNVPROC __glewVertexAttribs4ubvNV = NULL; + +PFNGLCLEARDEPTHFOESPROC __glewClearDepthfOES = NULL; +PFNGLCLIPPLANEFOESPROC __glewClipPlanefOES = NULL; +PFNGLDEPTHRANGEFOESPROC __glewDepthRangefOES = NULL; +PFNGLFRUSTUMFOESPROC __glewFrustumfOES = NULL; +PFNGLGETCLIPPLANEFOESPROC __glewGetClipPlanefOES = NULL; +PFNGLORTHOFOESPROC __glewOrthofOES = NULL; + +PFNGLDETAILTEXFUNCSGISPROC __glewDetailTexFuncSGIS = NULL; +PFNGLGETDETAILTEXFUNCSGISPROC __glewGetDetailTexFuncSGIS = NULL; + +PFNGLFOGFUNCSGISPROC __glewFogFuncSGIS = NULL; +PFNGLGETFOGFUNCSGISPROC __glewGetFogFuncSGIS = NULL; + +PFNGLSAMPLEMASKSGISPROC __glewSampleMaskSGIS = NULL; +PFNGLSAMPLEPATTERNSGISPROC __glewSamplePatternSGIS = NULL; + +PFNGLGETSHARPENTEXFUNCSGISPROC __glewGetSharpenTexFuncSGIS = NULL; +PFNGLSHARPENTEXFUNCSGISPROC __glewSharpenTexFuncSGIS = NULL; + +PFNGLTEXIMAGE4DSGISPROC __glewTexImage4DSGIS = NULL; +PFNGLTEXSUBIMAGE4DSGISPROC __glewTexSubImage4DSGIS = NULL; + +PFNGLGETTEXFILTERFUNCSGISPROC __glewGetTexFilterFuncSGIS = NULL; +PFNGLTEXFILTERFUNCSGISPROC __glewTexFilterFuncSGIS = NULL; + +PFNGLASYNCMARKERSGIXPROC __glewAsyncMarkerSGIX = NULL; +PFNGLDELETEASYNCMARKERSSGIXPROC __glewDeleteAsyncMarkersSGIX = NULL; +PFNGLFINISHASYNCSGIXPROC __glewFinishAsyncSGIX = NULL; +PFNGLGENASYNCMARKERSSGIXPROC __glewGenAsyncMarkersSGIX = NULL; +PFNGLISASYNCMARKERSGIXPROC __glewIsAsyncMarkerSGIX = NULL; +PFNGLPOLLASYNCSGIXPROC __glewPollAsyncSGIX = NULL; + +PFNGLFLUSHRASTERSGIXPROC __glewFlushRasterSGIX = NULL; + +PFNGLTEXTUREFOGSGIXPROC __glewTextureFogSGIX = NULL; + +PFNGLFRAGMENTCOLORMATERIALSGIXPROC __glewFragmentColorMaterialSGIX = NULL; +PFNGLFRAGMENTLIGHTMODELFSGIXPROC __glewFragmentLightModelfSGIX = NULL; +PFNGLFRAGMENTLIGHTMODELFVSGIXPROC __glewFragmentLightModelfvSGIX = NULL; +PFNGLFRAGMENTLIGHTMODELISGIXPROC __glewFragmentLightModeliSGIX = NULL; +PFNGLFRAGMENTLIGHTMODELIVSGIXPROC __glewFragmentLightModelivSGIX = NULL; +PFNGLFRAGMENTLIGHTFSGIXPROC __glewFragmentLightfSGIX = NULL; +PFNGLFRAGMENTLIGHTFVSGIXPROC __glewFragmentLightfvSGIX = NULL; +PFNGLFRAGMENTLIGHTISGIXPROC __glewFragmentLightiSGIX = NULL; +PFNGLFRAGMENTLIGHTIVSGIXPROC __glewFragmentLightivSGIX = NULL; +PFNGLFRAGMENTMATERIALFSGIXPROC __glewFragmentMaterialfSGIX = NULL; +PFNGLFRAGMENTMATERIALFVSGIXPROC __glewFragmentMaterialfvSGIX = NULL; +PFNGLFRAGMENTMATERIALISGIXPROC __glewFragmentMaterialiSGIX = NULL; +PFNGLFRAGMENTMATERIALIVSGIXPROC __glewFragmentMaterialivSGIX = NULL; +PFNGLGETFRAGMENTLIGHTFVSGIXPROC __glewGetFragmentLightfvSGIX = NULL; +PFNGLGETFRAGMENTLIGHTIVSGIXPROC __glewGetFragmentLightivSGIX = NULL; +PFNGLGETFRAGMENTMATERIALFVSGIXPROC __glewGetFragmentMaterialfvSGIX = NULL; +PFNGLGETFRAGMENTMATERIALIVSGIXPROC __glewGetFragmentMaterialivSGIX = NULL; + +PFNGLFRAMEZOOMSGIXPROC __glewFrameZoomSGIX = NULL; + +PFNGLPIXELTEXGENSGIXPROC __glewPixelTexGenSGIX = NULL; + +PFNGLREFERENCEPLANESGIXPROC __glewReferencePlaneSGIX = NULL; + +PFNGLSPRITEPARAMETERFSGIXPROC __glewSpriteParameterfSGIX = NULL; +PFNGLSPRITEPARAMETERFVSGIXPROC __glewSpriteParameterfvSGIX = NULL; +PFNGLSPRITEPARAMETERISGIXPROC __glewSpriteParameteriSGIX = NULL; +PFNGLSPRITEPARAMETERIVSGIXPROC __glewSpriteParameterivSGIX = NULL; + +PFNGLTAGSAMPLEBUFFERSGIXPROC __glewTagSampleBufferSGIX = NULL; + +PFNGLCOLORTABLEPARAMETERFVSGIPROC __glewColorTableParameterfvSGI = NULL; +PFNGLCOLORTABLEPARAMETERIVSGIPROC __glewColorTableParameterivSGI = NULL; +PFNGLCOLORTABLESGIPROC __glewColorTableSGI = NULL; +PFNGLCOPYCOLORTABLESGIPROC __glewCopyColorTableSGI = NULL; +PFNGLGETCOLORTABLEPARAMETERFVSGIPROC __glewGetColorTableParameterfvSGI = NULL; +PFNGLGETCOLORTABLEPARAMETERIVSGIPROC __glewGetColorTableParameterivSGI = NULL; +PFNGLGETCOLORTABLESGIPROC __glewGetColorTableSGI = NULL; + +PFNGLFINISHTEXTURESUNXPROC __glewFinishTextureSUNX = NULL; + +PFNGLGLOBALALPHAFACTORBSUNPROC __glewGlobalAlphaFactorbSUN = NULL; +PFNGLGLOBALALPHAFACTORDSUNPROC __glewGlobalAlphaFactordSUN = NULL; +PFNGLGLOBALALPHAFACTORFSUNPROC __glewGlobalAlphaFactorfSUN = NULL; +PFNGLGLOBALALPHAFACTORISUNPROC __glewGlobalAlphaFactoriSUN = NULL; +PFNGLGLOBALALPHAFACTORSSUNPROC __glewGlobalAlphaFactorsSUN = NULL; +PFNGLGLOBALALPHAFACTORUBSUNPROC __glewGlobalAlphaFactorubSUN = NULL; +PFNGLGLOBALALPHAFACTORUISUNPROC __glewGlobalAlphaFactoruiSUN = NULL; +PFNGLGLOBALALPHAFACTORUSSUNPROC __glewGlobalAlphaFactorusSUN = NULL; + +PFNGLREADVIDEOPIXELSSUNPROC __glewReadVideoPixelsSUN = NULL; + +PFNGLREPLACEMENTCODEPOINTERSUNPROC __glewReplacementCodePointerSUN = NULL; +PFNGLREPLACEMENTCODEUBSUNPROC __glewReplacementCodeubSUN = NULL; +PFNGLREPLACEMENTCODEUBVSUNPROC __glewReplacementCodeubvSUN = NULL; +PFNGLREPLACEMENTCODEUISUNPROC __glewReplacementCodeuiSUN = NULL; +PFNGLREPLACEMENTCODEUIVSUNPROC __glewReplacementCodeuivSUN = NULL; +PFNGLREPLACEMENTCODEUSSUNPROC __glewReplacementCodeusSUN = NULL; +PFNGLREPLACEMENTCODEUSVSUNPROC __glewReplacementCodeusvSUN = NULL; + +PFNGLCOLOR3FVERTEX3FSUNPROC __glewColor3fVertex3fSUN = NULL; +PFNGLCOLOR3FVERTEX3FVSUNPROC __glewColor3fVertex3fvSUN = NULL; +PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewColor4fNormal3fVertex3fSUN = NULL; +PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewColor4fNormal3fVertex3fvSUN = NULL; +PFNGLCOLOR4UBVERTEX2FSUNPROC __glewColor4ubVertex2fSUN = NULL; +PFNGLCOLOR4UBVERTEX2FVSUNPROC __glewColor4ubVertex2fvSUN = NULL; +PFNGLCOLOR4UBVERTEX3FSUNPROC __glewColor4ubVertex3fSUN = NULL; +PFNGLCOLOR4UBVERTEX3FVSUNPROC __glewColor4ubVertex3fvSUN = NULL; +PFNGLNORMAL3FVERTEX3FSUNPROC __glewNormal3fVertex3fSUN = NULL; +PFNGLNORMAL3FVERTEX3FVSUNPROC __glewNormal3fVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC __glewReplacementCodeuiColor3fVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor3fVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC __glewReplacementCodeuiColor4ubVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC __glewReplacementCodeuiColor4ubVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiNormal3fVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiNormal3fVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fvSUN = NULL; +PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC __glewReplacementCodeuiVertex3fSUN = NULL; +PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC __glewReplacementCodeuiVertex3fvSUN = NULL; +PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC __glewTexCoord2fColor3fVertex3fSUN = NULL; +PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC __glewTexCoord2fColor3fVertex3fvSUN = NULL; +PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fSUN = NULL; +PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fvSUN = NULL; +PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC __glewTexCoord2fColor4ubVertex3fSUN = NULL; +PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC __glewTexCoord2fColor4ubVertex3fvSUN = NULL; +PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fNormal3fVertex3fSUN = NULL; +PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fNormal3fVertex3fvSUN = NULL; +PFNGLTEXCOORD2FVERTEX3FSUNPROC __glewTexCoord2fVertex3fSUN = NULL; +PFNGLTEXCOORD2FVERTEX3FVSUNPROC __glewTexCoord2fVertex3fvSUN = NULL; +PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fSUN = NULL; +PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fvSUN = NULL; +PFNGLTEXCOORD4FVERTEX4FSUNPROC __glewTexCoord4fVertex4fSUN = NULL; +PFNGLTEXCOORD4FVERTEX4FVSUNPROC __glewTexCoord4fVertex4fvSUN = NULL; + +PFNGLADDSWAPHINTRECTWINPROC __glewAddSwapHintRectWIN = NULL; + +#endif /* !WIN32 || !GLEW_MX */ + +#if !defined(GLEW_MX) + +GLboolean __GLEW_VERSION_1_1 = GL_FALSE; +GLboolean __GLEW_VERSION_1_2 = GL_FALSE; +GLboolean __GLEW_VERSION_1_3 = GL_FALSE; +GLboolean __GLEW_VERSION_1_4 = GL_FALSE; +GLboolean __GLEW_VERSION_1_5 = GL_FALSE; +GLboolean __GLEW_VERSION_2_0 = GL_FALSE; +GLboolean __GLEW_VERSION_2_1 = GL_FALSE; +GLboolean __GLEW_3DFX_multisample = GL_FALSE; +GLboolean __GLEW_3DFX_tbuffer = GL_FALSE; +GLboolean __GLEW_3DFX_texture_compression_FXT1 = GL_FALSE; +GLboolean __GLEW_APPLE_client_storage = GL_FALSE; +GLboolean __GLEW_APPLE_element_array = GL_FALSE; +GLboolean __GLEW_APPLE_fence = GL_FALSE; +GLboolean __GLEW_APPLE_float_pixels = GL_FALSE; +GLboolean __GLEW_APPLE_flush_buffer_range = GL_FALSE; +GLboolean __GLEW_APPLE_pixel_buffer = GL_FALSE; +GLboolean __GLEW_APPLE_specular_vector = GL_FALSE; +GLboolean __GLEW_APPLE_texture_range = GL_FALSE; +GLboolean __GLEW_APPLE_transform_hint = GL_FALSE; +GLboolean __GLEW_APPLE_vertex_array_object = GL_FALSE; +GLboolean __GLEW_APPLE_vertex_array_range = GL_FALSE; +GLboolean __GLEW_APPLE_ycbcr_422 = GL_FALSE; +GLboolean __GLEW_ARB_color_buffer_float = GL_FALSE; +GLboolean __GLEW_ARB_depth_texture = GL_FALSE; +GLboolean __GLEW_ARB_draw_buffers = GL_FALSE; +GLboolean __GLEW_ARB_fragment_program = GL_FALSE; +GLboolean __GLEW_ARB_fragment_program_shadow = GL_FALSE; +GLboolean __GLEW_ARB_fragment_shader = GL_FALSE; +GLboolean __GLEW_ARB_half_float_pixel = GL_FALSE; +GLboolean __GLEW_ARB_imaging = GL_FALSE; +GLboolean __GLEW_ARB_matrix_palette = GL_FALSE; +GLboolean __GLEW_ARB_multisample = GL_FALSE; +GLboolean __GLEW_ARB_multitexture = GL_FALSE; +GLboolean __GLEW_ARB_occlusion_query = GL_FALSE; +GLboolean __GLEW_ARB_pixel_buffer_object = GL_FALSE; +GLboolean __GLEW_ARB_point_parameters = GL_FALSE; +GLboolean __GLEW_ARB_point_sprite = GL_FALSE; +GLboolean __GLEW_ARB_shader_objects = GL_FALSE; +GLboolean __GLEW_ARB_shading_language_100 = GL_FALSE; +GLboolean __GLEW_ARB_shadow = GL_FALSE; +GLboolean __GLEW_ARB_shadow_ambient = GL_FALSE; +GLboolean __GLEW_ARB_texture_border_clamp = GL_FALSE; +GLboolean __GLEW_ARB_texture_compression = GL_FALSE; +GLboolean __GLEW_ARB_texture_cube_map = GL_FALSE; +GLboolean __GLEW_ARB_texture_env_add = GL_FALSE; +GLboolean __GLEW_ARB_texture_env_combine = GL_FALSE; +GLboolean __GLEW_ARB_texture_env_crossbar = GL_FALSE; +GLboolean __GLEW_ARB_texture_env_dot3 = GL_FALSE; +GLboolean __GLEW_ARB_texture_float = GL_FALSE; +GLboolean __GLEW_ARB_texture_mirrored_repeat = GL_FALSE; +GLboolean __GLEW_ARB_texture_non_power_of_two = GL_FALSE; +GLboolean __GLEW_ARB_texture_rectangle = GL_FALSE; +GLboolean __GLEW_ARB_transpose_matrix = GL_FALSE; +GLboolean __GLEW_ARB_vertex_blend = GL_FALSE; +GLboolean __GLEW_ARB_vertex_buffer_object = GL_FALSE; +GLboolean __GLEW_ARB_vertex_program = GL_FALSE; +GLboolean __GLEW_ARB_vertex_shader = GL_FALSE; +GLboolean __GLEW_ARB_window_pos = GL_FALSE; +GLboolean __GLEW_ATIX_point_sprites = GL_FALSE; +GLboolean __GLEW_ATIX_texture_env_combine3 = GL_FALSE; +GLboolean __GLEW_ATIX_texture_env_route = GL_FALSE; +GLboolean __GLEW_ATIX_vertex_shader_output_point_size = GL_FALSE; +GLboolean __GLEW_ATI_draw_buffers = GL_FALSE; +GLboolean __GLEW_ATI_element_array = GL_FALSE; +GLboolean __GLEW_ATI_envmap_bumpmap = GL_FALSE; +GLboolean __GLEW_ATI_fragment_shader = GL_FALSE; +GLboolean __GLEW_ATI_map_object_buffer = GL_FALSE; +GLboolean __GLEW_ATI_pn_triangles = GL_FALSE; +GLboolean __GLEW_ATI_separate_stencil = GL_FALSE; +GLboolean __GLEW_ATI_shader_texture_lod = GL_FALSE; +GLboolean __GLEW_ATI_text_fragment_shader = GL_FALSE; +GLboolean __GLEW_ATI_texture_compression_3dc = GL_FALSE; +GLboolean __GLEW_ATI_texture_env_combine3 = GL_FALSE; +GLboolean __GLEW_ATI_texture_float = GL_FALSE; +GLboolean __GLEW_ATI_texture_mirror_once = GL_FALSE; +GLboolean __GLEW_ATI_vertex_array_object = GL_FALSE; +GLboolean __GLEW_ATI_vertex_attrib_array_object = GL_FALSE; +GLboolean __GLEW_ATI_vertex_streams = GL_FALSE; +GLboolean __GLEW_EXT_422_pixels = GL_FALSE; +GLboolean __GLEW_EXT_Cg_shader = GL_FALSE; +GLboolean __GLEW_EXT_abgr = GL_FALSE; +GLboolean __GLEW_EXT_bgra = GL_FALSE; +GLboolean __GLEW_EXT_bindable_uniform = GL_FALSE; +GLboolean __GLEW_EXT_blend_color = GL_FALSE; +GLboolean __GLEW_EXT_blend_equation_separate = GL_FALSE; +GLboolean __GLEW_EXT_blend_func_separate = GL_FALSE; +GLboolean __GLEW_EXT_blend_logic_op = GL_FALSE; +GLboolean __GLEW_EXT_blend_minmax = GL_FALSE; +GLboolean __GLEW_EXT_blend_subtract = GL_FALSE; +GLboolean __GLEW_EXT_clip_volume_hint = GL_FALSE; +GLboolean __GLEW_EXT_cmyka = GL_FALSE; +GLboolean __GLEW_EXT_color_subtable = GL_FALSE; +GLboolean __GLEW_EXT_compiled_vertex_array = GL_FALSE; +GLboolean __GLEW_EXT_convolution = GL_FALSE; +GLboolean __GLEW_EXT_coordinate_frame = GL_FALSE; +GLboolean __GLEW_EXT_copy_texture = GL_FALSE; +GLboolean __GLEW_EXT_cull_vertex = GL_FALSE; +GLboolean __GLEW_EXT_depth_bounds_test = GL_FALSE; +GLboolean __GLEW_EXT_draw_buffers2 = GL_FALSE; +GLboolean __GLEW_EXT_draw_instanced = GL_FALSE; +GLboolean __GLEW_EXT_draw_range_elements = GL_FALSE; +GLboolean __GLEW_EXT_fog_coord = GL_FALSE; +GLboolean __GLEW_EXT_fragment_lighting = GL_FALSE; +GLboolean __GLEW_EXT_framebuffer_blit = GL_FALSE; +GLboolean __GLEW_EXT_framebuffer_multisample = GL_FALSE; +GLboolean __GLEW_EXT_framebuffer_object = GL_FALSE; +GLboolean __GLEW_EXT_framebuffer_sRGB = GL_FALSE; +GLboolean __GLEW_EXT_geometry_shader4 = GL_FALSE; +GLboolean __GLEW_EXT_gpu_program_parameters = GL_FALSE; +GLboolean __GLEW_EXT_gpu_shader4 = GL_FALSE; +GLboolean __GLEW_EXT_histogram = GL_FALSE; +GLboolean __GLEW_EXT_index_array_formats = GL_FALSE; +GLboolean __GLEW_EXT_index_func = GL_FALSE; +GLboolean __GLEW_EXT_index_material = GL_FALSE; +GLboolean __GLEW_EXT_index_texture = GL_FALSE; +GLboolean __GLEW_EXT_light_texture = GL_FALSE; +GLboolean __GLEW_EXT_misc_attribute = GL_FALSE; +GLboolean __GLEW_EXT_multi_draw_arrays = GL_FALSE; +GLboolean __GLEW_EXT_multisample = GL_FALSE; +GLboolean __GLEW_EXT_packed_depth_stencil = GL_FALSE; +GLboolean __GLEW_EXT_packed_float = GL_FALSE; +GLboolean __GLEW_EXT_packed_pixels = GL_FALSE; +GLboolean __GLEW_EXT_paletted_texture = GL_FALSE; +GLboolean __GLEW_EXT_pixel_buffer_object = GL_FALSE; +GLboolean __GLEW_EXT_pixel_transform = GL_FALSE; +GLboolean __GLEW_EXT_pixel_transform_color_table = GL_FALSE; +GLboolean __GLEW_EXT_point_parameters = GL_FALSE; +GLboolean __GLEW_EXT_polygon_offset = GL_FALSE; +GLboolean __GLEW_EXT_rescale_normal = GL_FALSE; +GLboolean __GLEW_EXT_scene_marker = GL_FALSE; +GLboolean __GLEW_EXT_secondary_color = GL_FALSE; +GLboolean __GLEW_EXT_separate_specular_color = GL_FALSE; +GLboolean __GLEW_EXT_shadow_funcs = GL_FALSE; +GLboolean __GLEW_EXT_shared_texture_palette = GL_FALSE; +GLboolean __GLEW_EXT_stencil_clear_tag = GL_FALSE; +GLboolean __GLEW_EXT_stencil_two_side = GL_FALSE; +GLboolean __GLEW_EXT_stencil_wrap = GL_FALSE; +GLboolean __GLEW_EXT_subtexture = GL_FALSE; +GLboolean __GLEW_EXT_texture = GL_FALSE; +GLboolean __GLEW_EXT_texture3D = GL_FALSE; +GLboolean __GLEW_EXT_texture_array = GL_FALSE; +GLboolean __GLEW_EXT_texture_buffer_object = GL_FALSE; +GLboolean __GLEW_EXT_texture_compression_dxt1 = GL_FALSE; +GLboolean __GLEW_EXT_texture_compression_latc = GL_FALSE; +GLboolean __GLEW_EXT_texture_compression_rgtc = GL_FALSE; +GLboolean __GLEW_EXT_texture_compression_s3tc = GL_FALSE; +GLboolean __GLEW_EXT_texture_cube_map = GL_FALSE; +GLboolean __GLEW_EXT_texture_edge_clamp = GL_FALSE; +GLboolean __GLEW_EXT_texture_env = GL_FALSE; +GLboolean __GLEW_EXT_texture_env_add = GL_FALSE; +GLboolean __GLEW_EXT_texture_env_combine = GL_FALSE; +GLboolean __GLEW_EXT_texture_env_dot3 = GL_FALSE; +GLboolean __GLEW_EXT_texture_filter_anisotropic = GL_FALSE; +GLboolean __GLEW_EXT_texture_integer = GL_FALSE; +GLboolean __GLEW_EXT_texture_lod_bias = GL_FALSE; +GLboolean __GLEW_EXT_texture_mirror_clamp = GL_FALSE; +GLboolean __GLEW_EXT_texture_object = GL_FALSE; +GLboolean __GLEW_EXT_texture_perturb_normal = GL_FALSE; +GLboolean __GLEW_EXT_texture_rectangle = GL_FALSE; +GLboolean __GLEW_EXT_texture_sRGB = GL_FALSE; +GLboolean __GLEW_EXT_texture_shared_exponent = GL_FALSE; +GLboolean __GLEW_EXT_timer_query = GL_FALSE; +GLboolean __GLEW_EXT_vertex_array = GL_FALSE; +GLboolean __GLEW_EXT_vertex_shader = GL_FALSE; +GLboolean __GLEW_EXT_vertex_weighting = GL_FALSE; +GLboolean __GLEW_GREMEDY_frame_terminator = GL_FALSE; +GLboolean __GLEW_GREMEDY_string_marker = GL_FALSE; +GLboolean __GLEW_HP_convolution_border_modes = GL_FALSE; +GLboolean __GLEW_HP_image_transform = GL_FALSE; +GLboolean __GLEW_HP_occlusion_test = GL_FALSE; +GLboolean __GLEW_HP_texture_lighting = GL_FALSE; +GLboolean __GLEW_IBM_cull_vertex = GL_FALSE; +GLboolean __GLEW_IBM_multimode_draw_arrays = GL_FALSE; +GLboolean __GLEW_IBM_rasterpos_clip = GL_FALSE; +GLboolean __GLEW_IBM_static_data = GL_FALSE; +GLboolean __GLEW_IBM_texture_mirrored_repeat = GL_FALSE; +GLboolean __GLEW_IBM_vertex_array_lists = GL_FALSE; +GLboolean __GLEW_INGR_color_clamp = GL_FALSE; +GLboolean __GLEW_INGR_interlace_read = GL_FALSE; +GLboolean __GLEW_INTEL_parallel_arrays = GL_FALSE; +GLboolean __GLEW_INTEL_texture_scissor = GL_FALSE; +GLboolean __GLEW_KTX_buffer_region = GL_FALSE; +GLboolean __GLEW_MESAX_texture_stack = GL_FALSE; +GLboolean __GLEW_MESA_pack_invert = GL_FALSE; +GLboolean __GLEW_MESA_resize_buffers = GL_FALSE; +GLboolean __GLEW_MESA_window_pos = GL_FALSE; +GLboolean __GLEW_MESA_ycbcr_texture = GL_FALSE; +GLboolean __GLEW_NV_blend_square = GL_FALSE; +GLboolean __GLEW_NV_copy_depth_to_color = GL_FALSE; +GLboolean __GLEW_NV_depth_buffer_float = GL_FALSE; +GLboolean __GLEW_NV_depth_clamp = GL_FALSE; +GLboolean __GLEW_NV_depth_range_unclamped = GL_FALSE; +GLboolean __GLEW_NV_evaluators = GL_FALSE; +GLboolean __GLEW_NV_fence = GL_FALSE; +GLboolean __GLEW_NV_float_buffer = GL_FALSE; +GLboolean __GLEW_NV_fog_distance = GL_FALSE; +GLboolean __GLEW_NV_fragment_program = GL_FALSE; +GLboolean __GLEW_NV_fragment_program2 = GL_FALSE; +GLboolean __GLEW_NV_fragment_program4 = GL_FALSE; +GLboolean __GLEW_NV_fragment_program_option = GL_FALSE; +GLboolean __GLEW_NV_framebuffer_multisample_coverage = GL_FALSE; +GLboolean __GLEW_NV_geometry_program4 = GL_FALSE; +GLboolean __GLEW_NV_geometry_shader4 = GL_FALSE; +GLboolean __GLEW_NV_gpu_program4 = GL_FALSE; +GLboolean __GLEW_NV_half_float = GL_FALSE; +GLboolean __GLEW_NV_light_max_exponent = GL_FALSE; +GLboolean __GLEW_NV_multisample_filter_hint = GL_FALSE; +GLboolean __GLEW_NV_occlusion_query = GL_FALSE; +GLboolean __GLEW_NV_packed_depth_stencil = GL_FALSE; +GLboolean __GLEW_NV_parameter_buffer_object = GL_FALSE; +GLboolean __GLEW_NV_pixel_data_range = GL_FALSE; +GLboolean __GLEW_NV_point_sprite = GL_FALSE; +GLboolean __GLEW_NV_primitive_restart = GL_FALSE; +GLboolean __GLEW_NV_register_combiners = GL_FALSE; +GLboolean __GLEW_NV_register_combiners2 = GL_FALSE; +GLboolean __GLEW_NV_texgen_emboss = GL_FALSE; +GLboolean __GLEW_NV_texgen_reflection = GL_FALSE; +GLboolean __GLEW_NV_texture_compression_vtc = GL_FALSE; +GLboolean __GLEW_NV_texture_env_combine4 = GL_FALSE; +GLboolean __GLEW_NV_texture_expand_normal = GL_FALSE; +GLboolean __GLEW_NV_texture_rectangle = GL_FALSE; +GLboolean __GLEW_NV_texture_shader = GL_FALSE; +GLboolean __GLEW_NV_texture_shader2 = GL_FALSE; +GLboolean __GLEW_NV_texture_shader3 = GL_FALSE; +GLboolean __GLEW_NV_transform_feedback = GL_FALSE; +GLboolean __GLEW_NV_vertex_array_range = GL_FALSE; +GLboolean __GLEW_NV_vertex_array_range2 = GL_FALSE; +GLboolean __GLEW_NV_vertex_program = GL_FALSE; +GLboolean __GLEW_NV_vertex_program1_1 = GL_FALSE; +GLboolean __GLEW_NV_vertex_program2 = GL_FALSE; +GLboolean __GLEW_NV_vertex_program2_option = GL_FALSE; +GLboolean __GLEW_NV_vertex_program3 = GL_FALSE; +GLboolean __GLEW_NV_vertex_program4 = GL_FALSE; +GLboolean __GLEW_OES_byte_coordinates = GL_FALSE; +GLboolean __GLEW_OES_compressed_paletted_texture = GL_FALSE; +GLboolean __GLEW_OES_read_format = GL_FALSE; +GLboolean __GLEW_OES_single_precision = GL_FALSE; +GLboolean __GLEW_OML_interlace = GL_FALSE; +GLboolean __GLEW_OML_resample = GL_FALSE; +GLboolean __GLEW_OML_subsample = GL_FALSE; +GLboolean __GLEW_PGI_misc_hints = GL_FALSE; +GLboolean __GLEW_PGI_vertex_hints = GL_FALSE; +GLboolean __GLEW_REND_screen_coordinates = GL_FALSE; +GLboolean __GLEW_S3_s3tc = GL_FALSE; +GLboolean __GLEW_SGIS_color_range = GL_FALSE; +GLboolean __GLEW_SGIS_detail_texture = GL_FALSE; +GLboolean __GLEW_SGIS_fog_function = GL_FALSE; +GLboolean __GLEW_SGIS_generate_mipmap = GL_FALSE; +GLboolean __GLEW_SGIS_multisample = GL_FALSE; +GLboolean __GLEW_SGIS_pixel_texture = GL_FALSE; +GLboolean __GLEW_SGIS_sharpen_texture = GL_FALSE; +GLboolean __GLEW_SGIS_texture4D = GL_FALSE; +GLboolean __GLEW_SGIS_texture_border_clamp = GL_FALSE; +GLboolean __GLEW_SGIS_texture_edge_clamp = GL_FALSE; +GLboolean __GLEW_SGIS_texture_filter4 = GL_FALSE; +GLboolean __GLEW_SGIS_texture_lod = GL_FALSE; +GLboolean __GLEW_SGIS_texture_select = GL_FALSE; +GLboolean __GLEW_SGIX_async = GL_FALSE; +GLboolean __GLEW_SGIX_async_histogram = GL_FALSE; +GLboolean __GLEW_SGIX_async_pixel = GL_FALSE; +GLboolean __GLEW_SGIX_blend_alpha_minmax = GL_FALSE; +GLboolean __GLEW_SGIX_clipmap = GL_FALSE; +GLboolean __GLEW_SGIX_depth_texture = GL_FALSE; +GLboolean __GLEW_SGIX_flush_raster = GL_FALSE; +GLboolean __GLEW_SGIX_fog_offset = GL_FALSE; +GLboolean __GLEW_SGIX_fog_texture = GL_FALSE; +GLboolean __GLEW_SGIX_fragment_specular_lighting = GL_FALSE; +GLboolean __GLEW_SGIX_framezoom = GL_FALSE; +GLboolean __GLEW_SGIX_interlace = GL_FALSE; +GLboolean __GLEW_SGIX_ir_instrument1 = GL_FALSE; +GLboolean __GLEW_SGIX_list_priority = GL_FALSE; +GLboolean __GLEW_SGIX_pixel_texture = GL_FALSE; +GLboolean __GLEW_SGIX_pixel_texture_bits = GL_FALSE; +GLboolean __GLEW_SGIX_reference_plane = GL_FALSE; +GLboolean __GLEW_SGIX_resample = GL_FALSE; +GLboolean __GLEW_SGIX_shadow = GL_FALSE; +GLboolean __GLEW_SGIX_shadow_ambient = GL_FALSE; +GLboolean __GLEW_SGIX_sprite = GL_FALSE; +GLboolean __GLEW_SGIX_tag_sample_buffer = GL_FALSE; +GLboolean __GLEW_SGIX_texture_add_env = GL_FALSE; +GLboolean __GLEW_SGIX_texture_coordinate_clamp = GL_FALSE; +GLboolean __GLEW_SGIX_texture_lod_bias = GL_FALSE; +GLboolean __GLEW_SGIX_texture_multi_buffer = GL_FALSE; +GLboolean __GLEW_SGIX_texture_range = GL_FALSE; +GLboolean __GLEW_SGIX_texture_scale_bias = GL_FALSE; +GLboolean __GLEW_SGIX_vertex_preclip = GL_FALSE; +GLboolean __GLEW_SGIX_vertex_preclip_hint = GL_FALSE; +GLboolean __GLEW_SGIX_ycrcb = GL_FALSE; +GLboolean __GLEW_SGI_color_matrix = GL_FALSE; +GLboolean __GLEW_SGI_color_table = GL_FALSE; +GLboolean __GLEW_SGI_texture_color_table = GL_FALSE; +GLboolean __GLEW_SUNX_constant_data = GL_FALSE; +GLboolean __GLEW_SUN_convolution_border_modes = GL_FALSE; +GLboolean __GLEW_SUN_global_alpha = GL_FALSE; +GLboolean __GLEW_SUN_mesh_array = GL_FALSE; +GLboolean __GLEW_SUN_read_video_pixels = GL_FALSE; +GLboolean __GLEW_SUN_slice_accum = GL_FALSE; +GLboolean __GLEW_SUN_triangle_list = GL_FALSE; +GLboolean __GLEW_SUN_vertex = GL_FALSE; +GLboolean __GLEW_WIN_phong_shading = GL_FALSE; +GLboolean __GLEW_WIN_specular_fog = GL_FALSE; +GLboolean __GLEW_WIN_swap_hint = GL_FALSE; + +#endif /* !GLEW_MX */ + +#ifdef GL_VERSION_1_2 + +static GLboolean _glewInit_GL_VERSION_1_2 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glCopyTexSubImage3D")) == NULL) || r; + r = ((glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElements")) == NULL) || r; + r = ((glTexImage3D = (PFNGLTEXIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glTexImage3D")) == NULL) || r; + r = ((glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage3D")) == NULL) || r; + + return r; +} + +#endif /* GL_VERSION_1_2 */ + +#ifdef GL_VERSION_1_3 + +static GLboolean _glewInit_GL_VERSION_1_3 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glActiveTexture = (PFNGLACTIVETEXTUREPROC)glewGetProcAddress((const GLubyte*)"glActiveTexture")) == NULL) || r; + r = ((glClientActiveTexture = (PFNGLCLIENTACTIVETEXTUREPROC)glewGetProcAddress((const GLubyte*)"glClientActiveTexture")) == NULL) || r; + r = ((glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage1D")) == NULL) || r; + r = ((glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage2D")) == NULL) || r; + r = ((glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage3D")) == NULL) || r; + r = ((glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage1D")) == NULL) || r; + r = ((glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage2D")) == NULL) || r; + r = ((glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage3D")) == NULL) || r; + r = ((glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)glewGetProcAddress((const GLubyte*)"glGetCompressedTexImage")) == NULL) || r; + r = ((glLoadTransposeMatrixd = (PFNGLLOADTRANSPOSEMATRIXDPROC)glewGetProcAddress((const GLubyte*)"glLoadTransposeMatrixd")) == NULL) || r; + r = ((glLoadTransposeMatrixf = (PFNGLLOADTRANSPOSEMATRIXFPROC)glewGetProcAddress((const GLubyte*)"glLoadTransposeMatrixf")) == NULL) || r; + r = ((glMultTransposeMatrixd = (PFNGLMULTTRANSPOSEMATRIXDPROC)glewGetProcAddress((const GLubyte*)"glMultTransposeMatrixd")) == NULL) || r; + r = ((glMultTransposeMatrixf = (PFNGLMULTTRANSPOSEMATRIXFPROC)glewGetProcAddress((const GLubyte*)"glMultTransposeMatrixf")) == NULL) || r; + r = ((glMultiTexCoord1d = (PFNGLMULTITEXCOORD1DPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1d")) == NULL) || r; + r = ((glMultiTexCoord1dv = (PFNGLMULTITEXCOORD1DVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1dv")) == NULL) || r; + r = ((glMultiTexCoord1f = (PFNGLMULTITEXCOORD1FPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1f")) == NULL) || r; + r = ((glMultiTexCoord1fv = (PFNGLMULTITEXCOORD1FVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1fv")) == NULL) || r; + r = ((glMultiTexCoord1i = (PFNGLMULTITEXCOORD1IPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1i")) == NULL) || r; + r = ((glMultiTexCoord1iv = (PFNGLMULTITEXCOORD1IVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1iv")) == NULL) || r; + r = ((glMultiTexCoord1s = (PFNGLMULTITEXCOORD1SPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1s")) == NULL) || r; + r = ((glMultiTexCoord1sv = (PFNGLMULTITEXCOORD1SVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1sv")) == NULL) || r; + r = ((glMultiTexCoord2d = (PFNGLMULTITEXCOORD2DPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2d")) == NULL) || r; + r = ((glMultiTexCoord2dv = (PFNGLMULTITEXCOORD2DVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2dv")) == NULL) || r; + r = ((glMultiTexCoord2f = (PFNGLMULTITEXCOORD2FPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2f")) == NULL) || r; + r = ((glMultiTexCoord2fv = (PFNGLMULTITEXCOORD2FVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2fv")) == NULL) || r; + r = ((glMultiTexCoord2i = (PFNGLMULTITEXCOORD2IPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2i")) == NULL) || r; + r = ((glMultiTexCoord2iv = (PFNGLMULTITEXCOORD2IVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2iv")) == NULL) || r; + r = ((glMultiTexCoord2s = (PFNGLMULTITEXCOORD2SPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2s")) == NULL) || r; + r = ((glMultiTexCoord2sv = (PFNGLMULTITEXCOORD2SVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2sv")) == NULL) || r; + r = ((glMultiTexCoord3d = (PFNGLMULTITEXCOORD3DPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3d")) == NULL) || r; + r = ((glMultiTexCoord3dv = (PFNGLMULTITEXCOORD3DVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3dv")) == NULL) || r; + r = ((glMultiTexCoord3f = (PFNGLMULTITEXCOORD3FPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3f")) == NULL) || r; + r = ((glMultiTexCoord3fv = (PFNGLMULTITEXCOORD3FVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3fv")) == NULL) || r; + r = ((glMultiTexCoord3i = (PFNGLMULTITEXCOORD3IPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3i")) == NULL) || r; + r = ((glMultiTexCoord3iv = (PFNGLMULTITEXCOORD3IVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3iv")) == NULL) || r; + r = ((glMultiTexCoord3s = (PFNGLMULTITEXCOORD3SPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3s")) == NULL) || r; + r = ((glMultiTexCoord3sv = (PFNGLMULTITEXCOORD3SVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3sv")) == NULL) || r; + r = ((glMultiTexCoord4d = (PFNGLMULTITEXCOORD4DPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4d")) == NULL) || r; + r = ((glMultiTexCoord4dv = (PFNGLMULTITEXCOORD4DVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4dv")) == NULL) || r; + r = ((glMultiTexCoord4f = (PFNGLMULTITEXCOORD4FPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4f")) == NULL) || r; + r = ((glMultiTexCoord4fv = (PFNGLMULTITEXCOORD4FVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4fv")) == NULL) || r; + r = ((glMultiTexCoord4i = (PFNGLMULTITEXCOORD4IPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4i")) == NULL) || r; + r = ((glMultiTexCoord4iv = (PFNGLMULTITEXCOORD4IVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4iv")) == NULL) || r; + r = ((glMultiTexCoord4s = (PFNGLMULTITEXCOORD4SPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4s")) == NULL) || r; + r = ((glMultiTexCoord4sv = (PFNGLMULTITEXCOORD4SVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4sv")) == NULL) || r; + r = ((glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)glewGetProcAddress((const GLubyte*)"glSampleCoverage")) == NULL) || r; + + return r; +} + +#endif /* GL_VERSION_1_3 */ + +#ifdef GL_VERSION_1_4 + +static GLboolean _glewInit_GL_VERSION_1_4 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBlendColor = (PFNGLBLENDCOLORPROC)glewGetProcAddress((const GLubyte*)"glBlendColor")) == NULL) || r; + r = ((glBlendEquation = (PFNGLBLENDEQUATIONPROC)glewGetProcAddress((const GLubyte*)"glBlendEquation")) == NULL) || r; + r = ((glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncSeparate")) == NULL) || r; + r = ((glFogCoordPointer = (PFNGLFOGCOORDPOINTERPROC)glewGetProcAddress((const GLubyte*)"glFogCoordPointer")) == NULL) || r; + r = ((glFogCoordd = (PFNGLFOGCOORDDPROC)glewGetProcAddress((const GLubyte*)"glFogCoordd")) == NULL) || r; + r = ((glFogCoorddv = (PFNGLFOGCOORDDVPROC)glewGetProcAddress((const GLubyte*)"glFogCoorddv")) == NULL) || r; + r = ((glFogCoordf = (PFNGLFOGCOORDFPROC)glewGetProcAddress((const GLubyte*)"glFogCoordf")) == NULL) || r; + r = ((glFogCoordfv = (PFNGLFOGCOORDFVPROC)glewGetProcAddress((const GLubyte*)"glFogCoordfv")) == NULL) || r; + r = ((glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArrays")) == NULL) || r; + r = ((glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElements")) == NULL) || r; + r = ((glPointParameterf = (PFNGLPOINTPARAMETERFPROC)glewGetProcAddress((const GLubyte*)"glPointParameterf")) == NULL) || r; + r = ((glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfv")) == NULL) || r; + r = ((glPointParameteri = (PFNGLPOINTPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glPointParameteri")) == NULL) || r; + r = ((glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glPointParameteriv")) == NULL) || r; + r = ((glSecondaryColor3b = (PFNGLSECONDARYCOLOR3BPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3b")) == NULL) || r; + r = ((glSecondaryColor3bv = (PFNGLSECONDARYCOLOR3BVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3bv")) == NULL) || r; + r = ((glSecondaryColor3d = (PFNGLSECONDARYCOLOR3DPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3d")) == NULL) || r; + r = ((glSecondaryColor3dv = (PFNGLSECONDARYCOLOR3DVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3dv")) == NULL) || r; + r = ((glSecondaryColor3f = (PFNGLSECONDARYCOLOR3FPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3f")) == NULL) || r; + r = ((glSecondaryColor3fv = (PFNGLSECONDARYCOLOR3FVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3fv")) == NULL) || r; + r = ((glSecondaryColor3i = (PFNGLSECONDARYCOLOR3IPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3i")) == NULL) || r; + r = ((glSecondaryColor3iv = (PFNGLSECONDARYCOLOR3IVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3iv")) == NULL) || r; + r = ((glSecondaryColor3s = (PFNGLSECONDARYCOLOR3SPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3s")) == NULL) || r; + r = ((glSecondaryColor3sv = (PFNGLSECONDARYCOLOR3SVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3sv")) == NULL) || r; + r = ((glSecondaryColor3ub = (PFNGLSECONDARYCOLOR3UBPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ub")) == NULL) || r; + r = ((glSecondaryColor3ubv = (PFNGLSECONDARYCOLOR3UBVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ubv")) == NULL) || r; + r = ((glSecondaryColor3ui = (PFNGLSECONDARYCOLOR3UIPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ui")) == NULL) || r; + r = ((glSecondaryColor3uiv = (PFNGLSECONDARYCOLOR3UIVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3uiv")) == NULL) || r; + r = ((glSecondaryColor3us = (PFNGLSECONDARYCOLOR3USPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3us")) == NULL) || r; + r = ((glSecondaryColor3usv = (PFNGLSECONDARYCOLOR3USVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3usv")) == NULL) || r; + r = ((glSecondaryColorPointer = (PFNGLSECONDARYCOLORPOINTERPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorPointer")) == NULL) || r; + r = ((glWindowPos2d = (PFNGLWINDOWPOS2DPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2d")) == NULL) || r; + r = ((glWindowPos2dv = (PFNGLWINDOWPOS2DVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dv")) == NULL) || r; + r = ((glWindowPos2f = (PFNGLWINDOWPOS2FPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2f")) == NULL) || r; + r = ((glWindowPos2fv = (PFNGLWINDOWPOS2FVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fv")) == NULL) || r; + r = ((glWindowPos2i = (PFNGLWINDOWPOS2IPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2i")) == NULL) || r; + r = ((glWindowPos2iv = (PFNGLWINDOWPOS2IVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2iv")) == NULL) || r; + r = ((glWindowPos2s = (PFNGLWINDOWPOS2SPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2s")) == NULL) || r; + r = ((glWindowPos2sv = (PFNGLWINDOWPOS2SVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2sv")) == NULL) || r; + r = ((glWindowPos3d = (PFNGLWINDOWPOS3DPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3d")) == NULL) || r; + r = ((glWindowPos3dv = (PFNGLWINDOWPOS3DVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dv")) == NULL) || r; + r = ((glWindowPos3f = (PFNGLWINDOWPOS3FPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3f")) == NULL) || r; + r = ((glWindowPos3fv = (PFNGLWINDOWPOS3FVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fv")) == NULL) || r; + r = ((glWindowPos3i = (PFNGLWINDOWPOS3IPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3i")) == NULL) || r; + r = ((glWindowPos3iv = (PFNGLWINDOWPOS3IVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3iv")) == NULL) || r; + r = ((glWindowPos3s = (PFNGLWINDOWPOS3SPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3s")) == NULL) || r; + r = ((glWindowPos3sv = (PFNGLWINDOWPOS3SVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3sv")) == NULL) || r; + + return r; +} + +#endif /* GL_VERSION_1_4 */ + +#ifdef GL_VERSION_1_5 + +static GLboolean _glewInit_GL_VERSION_1_5 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBeginQuery = (PFNGLBEGINQUERYPROC)glewGetProcAddress((const GLubyte*)"glBeginQuery")) == NULL) || r; + r = ((glBindBuffer = (PFNGLBINDBUFFERPROC)glewGetProcAddress((const GLubyte*)"glBindBuffer")) == NULL) || r; + r = ((glBufferData = (PFNGLBUFFERDATAPROC)glewGetProcAddress((const GLubyte*)"glBufferData")) == NULL) || r; + r = ((glBufferSubData = (PFNGLBUFFERSUBDATAPROC)glewGetProcAddress((const GLubyte*)"glBufferSubData")) == NULL) || r; + r = ((glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glDeleteBuffers")) == NULL) || r; + r = ((glDeleteQueries = (PFNGLDELETEQUERIESPROC)glewGetProcAddress((const GLubyte*)"glDeleteQueries")) == NULL) || r; + r = ((glEndQuery = (PFNGLENDQUERYPROC)glewGetProcAddress((const GLubyte*)"glEndQuery")) == NULL) || r; + r = ((glGenBuffers = (PFNGLGENBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glGenBuffers")) == NULL) || r; + r = ((glGenQueries = (PFNGLGENQUERIESPROC)glewGetProcAddress((const GLubyte*)"glGenQueries")) == NULL) || r; + r = ((glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetBufferParameteriv")) == NULL) || r; + r = ((glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC)glewGetProcAddress((const GLubyte*)"glGetBufferPointerv")) == NULL) || r; + r = ((glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC)glewGetProcAddress((const GLubyte*)"glGetBufferSubData")) == NULL) || r; + r = ((glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectiv")) == NULL) || r; + r = ((glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectuiv")) == NULL) || r; + r = ((glGetQueryiv = (PFNGLGETQUERYIVPROC)glewGetProcAddress((const GLubyte*)"glGetQueryiv")) == NULL) || r; + r = ((glIsBuffer = (PFNGLISBUFFERPROC)glewGetProcAddress((const GLubyte*)"glIsBuffer")) == NULL) || r; + r = ((glIsQuery = (PFNGLISQUERYPROC)glewGetProcAddress((const GLubyte*)"glIsQuery")) == NULL) || r; + r = ((glMapBuffer = (PFNGLMAPBUFFERPROC)glewGetProcAddress((const GLubyte*)"glMapBuffer")) == NULL) || r; + r = ((glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)glewGetProcAddress((const GLubyte*)"glUnmapBuffer")) == NULL) || r; + + return r; +} + +#endif /* GL_VERSION_1_5 */ + +#ifdef GL_VERSION_2_0 + +static GLboolean _glewInit_GL_VERSION_2_0 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glAttachShader = (PFNGLATTACHSHADERPROC)glewGetProcAddress((const GLubyte*)"glAttachShader")) == NULL) || r; + r = ((glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)glewGetProcAddress((const GLubyte*)"glBindAttribLocation")) == NULL) || r; + r = ((glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationSeparate")) == NULL) || r; + r = ((glCompileShader = (PFNGLCOMPILESHADERPROC)glewGetProcAddress((const GLubyte*)"glCompileShader")) == NULL) || r; + r = ((glCreateProgram = (PFNGLCREATEPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glCreateProgram")) == NULL) || r; + r = ((glCreateShader = (PFNGLCREATESHADERPROC)glewGetProcAddress((const GLubyte*)"glCreateShader")) == NULL) || r; + r = ((glDeleteProgram = (PFNGLDELETEPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glDeleteProgram")) == NULL) || r; + r = ((glDeleteShader = (PFNGLDELETESHADERPROC)glewGetProcAddress((const GLubyte*)"glDeleteShader")) == NULL) || r; + r = ((glDetachShader = (PFNGLDETACHSHADERPROC)glewGetProcAddress((const GLubyte*)"glDetachShader")) == NULL) || r; + r = ((glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)glewGetProcAddress((const GLubyte*)"glDisableVertexAttribArray")) == NULL) || r; + r = ((glDrawBuffers = (PFNGLDRAWBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glDrawBuffers")) == NULL) || r; + r = ((glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)glewGetProcAddress((const GLubyte*)"glEnableVertexAttribArray")) == NULL) || r; + r = ((glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)glewGetProcAddress((const GLubyte*)"glGetActiveAttrib")) == NULL) || r; + r = ((glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniform")) == NULL) || r; + r = ((glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)glewGetProcAddress((const GLubyte*)"glGetAttachedShaders")) == NULL) || r; + r = ((glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)glewGetProcAddress((const GLubyte*)"glGetAttribLocation")) == NULL) || r; + r = ((glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)glewGetProcAddress((const GLubyte*)"glGetProgramInfoLog")) == NULL) || r; + r = ((glGetProgramiv = (PFNGLGETPROGRAMIVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramiv")) == NULL) || r; + r = ((glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)glewGetProcAddress((const GLubyte*)"glGetShaderInfoLog")) == NULL) || r; + r = ((glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)glewGetProcAddress((const GLubyte*)"glGetShaderSource")) == NULL) || r; + r = ((glGetShaderiv = (PFNGLGETSHADERIVPROC)glewGetProcAddress((const GLubyte*)"glGetShaderiv")) == NULL) || r; + r = ((glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)glewGetProcAddress((const GLubyte*)"glGetUniformLocation")) == NULL) || r; + r = ((glGetUniformfv = (PFNGLGETUNIFORMFVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformfv")) == NULL) || r; + r = ((glGetUniformiv = (PFNGLGETUNIFORMIVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformiv")) == NULL) || r; + r = ((glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribPointerv")) == NULL) || r; + r = ((glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribdv")) == NULL) || r; + r = ((glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribfv")) == NULL) || r; + r = ((glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribiv")) == NULL) || r; + r = ((glIsProgram = (PFNGLISPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glIsProgram")) == NULL) || r; + r = ((glIsShader = (PFNGLISSHADERPROC)glewGetProcAddress((const GLubyte*)"glIsShader")) == NULL) || r; + r = ((glLinkProgram = (PFNGLLINKPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glLinkProgram")) == NULL) || r; + r = ((glShaderSource = (PFNGLSHADERSOURCEPROC)glewGetProcAddress((const GLubyte*)"glShaderSource")) == NULL) || r; + r = ((glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glStencilFuncSeparate")) == NULL) || r; + r = ((glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glStencilMaskSeparate")) == NULL) || r; + r = ((glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glStencilOpSeparate")) == NULL) || r; + r = ((glUniform1f = (PFNGLUNIFORM1FPROC)glewGetProcAddress((const GLubyte*)"glUniform1f")) == NULL) || r; + r = ((glUniform1fv = (PFNGLUNIFORM1FVPROC)glewGetProcAddress((const GLubyte*)"glUniform1fv")) == NULL) || r; + r = ((glUniform1i = (PFNGLUNIFORM1IPROC)glewGetProcAddress((const GLubyte*)"glUniform1i")) == NULL) || r; + r = ((glUniform1iv = (PFNGLUNIFORM1IVPROC)glewGetProcAddress((const GLubyte*)"glUniform1iv")) == NULL) || r; + r = ((glUniform2f = (PFNGLUNIFORM2FPROC)glewGetProcAddress((const GLubyte*)"glUniform2f")) == NULL) || r; + r = ((glUniform2fv = (PFNGLUNIFORM2FVPROC)glewGetProcAddress((const GLubyte*)"glUniform2fv")) == NULL) || r; + r = ((glUniform2i = (PFNGLUNIFORM2IPROC)glewGetProcAddress((const GLubyte*)"glUniform2i")) == NULL) || r; + r = ((glUniform2iv = (PFNGLUNIFORM2IVPROC)glewGetProcAddress((const GLubyte*)"glUniform2iv")) == NULL) || r; + r = ((glUniform3f = (PFNGLUNIFORM3FPROC)glewGetProcAddress((const GLubyte*)"glUniform3f")) == NULL) || r; + r = ((glUniform3fv = (PFNGLUNIFORM3FVPROC)glewGetProcAddress((const GLubyte*)"glUniform3fv")) == NULL) || r; + r = ((glUniform3i = (PFNGLUNIFORM3IPROC)glewGetProcAddress((const GLubyte*)"glUniform3i")) == NULL) || r; + r = ((glUniform3iv = (PFNGLUNIFORM3IVPROC)glewGetProcAddress((const GLubyte*)"glUniform3iv")) == NULL) || r; + r = ((glUniform4f = (PFNGLUNIFORM4FPROC)glewGetProcAddress((const GLubyte*)"glUniform4f")) == NULL) || r; + r = ((glUniform4fv = (PFNGLUNIFORM4FVPROC)glewGetProcAddress((const GLubyte*)"glUniform4fv")) == NULL) || r; + r = ((glUniform4i = (PFNGLUNIFORM4IPROC)glewGetProcAddress((const GLubyte*)"glUniform4i")) == NULL) || r; + r = ((glUniform4iv = (PFNGLUNIFORM4IVPROC)glewGetProcAddress((const GLubyte*)"glUniform4iv")) == NULL) || r; + r = ((glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2fv")) == NULL) || r; + r = ((glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3fv")) == NULL) || r; + r = ((glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4fv")) == NULL) || r; + r = ((glUseProgram = (PFNGLUSEPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glUseProgram")) == NULL) || r; + r = ((glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glValidateProgram")) == NULL) || r; + r = ((glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1d")) == NULL) || r; + r = ((glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dv")) == NULL) || r; + r = ((glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1f")) == NULL) || r; + r = ((glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fv")) == NULL) || r; + r = ((glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1s")) == NULL) || r; + r = ((glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1sv")) == NULL) || r; + r = ((glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2d")) == NULL) || r; + r = ((glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dv")) == NULL) || r; + r = ((glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2f")) == NULL) || r; + r = ((glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fv")) == NULL) || r; + r = ((glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2s")) == NULL) || r; + r = ((glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2sv")) == NULL) || r; + r = ((glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3d")) == NULL) || r; + r = ((glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dv")) == NULL) || r; + r = ((glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3f")) == NULL) || r; + r = ((glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fv")) == NULL) || r; + r = ((glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3s")) == NULL) || r; + r = ((glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3sv")) == NULL) || r; + r = ((glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nbv")) == NULL) || r; + r = ((glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Niv")) == NULL) || r; + r = ((glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nsv")) == NULL) || r; + r = ((glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nub")) == NULL) || r; + r = ((glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nubv")) == NULL) || r; + r = ((glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nuiv")) == NULL) || r; + r = ((glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nusv")) == NULL) || r; + r = ((glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4bv")) == NULL) || r; + r = ((glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4d")) == NULL) || r; + r = ((glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dv")) == NULL) || r; + r = ((glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4f")) == NULL) || r; + r = ((glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fv")) == NULL) || r; + r = ((glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4iv")) == NULL) || r; + r = ((glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4s")) == NULL) || r; + r = ((glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4sv")) == NULL) || r; + r = ((glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ubv")) == NULL) || r; + r = ((glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4uiv")) == NULL) || r; + r = ((glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4usv")) == NULL) || r; + r = ((glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribPointer")) == NULL) || r; + + return r; +} + +#endif /* GL_VERSION_2_0 */ + +#ifdef GL_VERSION_2_1 + +static GLboolean _glewInit_GL_VERSION_2_1 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2x3fv")) == NULL) || r; + r = ((glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2x4fv")) == NULL) || r; + r = ((glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3x2fv")) == NULL) || r; + r = ((glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3x4fv")) == NULL) || r; + r = ((glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4x2fv")) == NULL) || r; + r = ((glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4x3fv")) == NULL) || r; + + return r; +} + +#endif /* GL_VERSION_2_1 */ + +#ifdef GL_3DFX_multisample + +#endif /* GL_3DFX_multisample */ + +#ifdef GL_3DFX_tbuffer + +static GLboolean _glewInit_GL_3DFX_tbuffer (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTbufferMask3DFX = (PFNGLTBUFFERMASK3DFXPROC)glewGetProcAddress((const GLubyte*)"glTbufferMask3DFX")) == NULL) || r; + + return r; +} + +#endif /* GL_3DFX_tbuffer */ + +#ifdef GL_3DFX_texture_compression_FXT1 + +#endif /* GL_3DFX_texture_compression_FXT1 */ + +#ifdef GL_APPLE_client_storage + +#endif /* GL_APPLE_client_storage */ + +#ifdef GL_APPLE_element_array + +static GLboolean _glewInit_GL_APPLE_element_array (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDrawElementArrayAPPLE = (PFNGLDRAWELEMENTARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDrawElementArrayAPPLE")) == NULL) || r; + r = ((glDrawRangeElementArrayAPPLE = (PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElementArrayAPPLE")) == NULL) || r; + r = ((glElementPointerAPPLE = (PFNGLELEMENTPOINTERAPPLEPROC)glewGetProcAddress((const GLubyte*)"glElementPointerAPPLE")) == NULL) || r; + r = ((glMultiDrawElementArrayAPPLE = (PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementArrayAPPLE")) == NULL) || r; + r = ((glMultiDrawRangeElementArrayAPPLE = (PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawRangeElementArrayAPPLE")) == NULL) || r; + + return r; +} + +#endif /* GL_APPLE_element_array */ + +#ifdef GL_APPLE_fence + +static GLboolean _glewInit_GL_APPLE_fence (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDeleteFencesAPPLE = (PFNGLDELETEFENCESAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDeleteFencesAPPLE")) == NULL) || r; + r = ((glFinishFenceAPPLE = (PFNGLFINISHFENCEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glFinishFenceAPPLE")) == NULL) || r; + r = ((glFinishObjectAPPLE = (PFNGLFINISHOBJECTAPPLEPROC)glewGetProcAddress((const GLubyte*)"glFinishObjectAPPLE")) == NULL) || r; + r = ((glGenFencesAPPLE = (PFNGLGENFENCESAPPLEPROC)glewGetProcAddress((const GLubyte*)"glGenFencesAPPLE")) == NULL) || r; + r = ((glIsFenceAPPLE = (PFNGLISFENCEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glIsFenceAPPLE")) == NULL) || r; + r = ((glSetFenceAPPLE = (PFNGLSETFENCEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glSetFenceAPPLE")) == NULL) || r; + r = ((glTestFenceAPPLE = (PFNGLTESTFENCEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glTestFenceAPPLE")) == NULL) || r; + r = ((glTestObjectAPPLE = (PFNGLTESTOBJECTAPPLEPROC)glewGetProcAddress((const GLubyte*)"glTestObjectAPPLE")) == NULL) || r; + + return r; +} + +#endif /* GL_APPLE_fence */ + +#ifdef GL_APPLE_float_pixels + +#endif /* GL_APPLE_float_pixels */ + +#ifdef GL_APPLE_flush_buffer_range + +static GLboolean _glewInit_GL_APPLE_flush_buffer_range (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBufferParameteriAPPLE = (PFNGLBUFFERPARAMETERIAPPLEPROC)glewGetProcAddress((const GLubyte*)"glBufferParameteriAPPLE")) == NULL) || r; + r = ((glFlushMappedBufferRangeAPPLE = (PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glFlushMappedBufferRangeAPPLE")) == NULL) || r; + + return r; +} + +#endif /* GL_APPLE_flush_buffer_range */ + +#ifdef GL_APPLE_pixel_buffer + +#endif /* GL_APPLE_pixel_buffer */ + +#ifdef GL_APPLE_specular_vector + +#endif /* GL_APPLE_specular_vector */ + +#ifdef GL_APPLE_texture_range + +static GLboolean _glewInit_GL_APPLE_texture_range (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetTexParameterPointervAPPLE = (PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterPointervAPPLE")) == NULL) || r; + r = ((glTextureRangeAPPLE = (PFNGLTEXTURERANGEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glTextureRangeAPPLE")) == NULL) || r; + + return r; +} + +#endif /* GL_APPLE_texture_range */ + +#ifdef GL_APPLE_transform_hint + +#endif /* GL_APPLE_transform_hint */ + +#ifdef GL_APPLE_vertex_array_object + +static GLboolean _glewInit_GL_APPLE_vertex_array_object (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBindVertexArrayAPPLE = (PFNGLBINDVERTEXARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glBindVertexArrayAPPLE")) == NULL) || r; + r = ((glDeleteVertexArraysAPPLE = (PFNGLDELETEVERTEXARRAYSAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDeleteVertexArraysAPPLE")) == NULL) || r; + r = ((glGenVertexArraysAPPLE = (PFNGLGENVERTEXARRAYSAPPLEPROC)glewGetProcAddress((const GLubyte*)"glGenVertexArraysAPPLE")) == NULL) || r; + r = ((glIsVertexArrayAPPLE = (PFNGLISVERTEXARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glIsVertexArrayAPPLE")) == NULL) || r; + + return r; +} + +#endif /* GL_APPLE_vertex_array_object */ + +#ifdef GL_APPLE_vertex_array_range + +static GLboolean _glewInit_GL_APPLE_vertex_array_range (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFlushVertexArrayRangeAPPLE = (PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glFlushVertexArrayRangeAPPLE")) == NULL) || r; + r = ((glVertexArrayParameteriAPPLE = (PFNGLVERTEXARRAYPARAMETERIAPPLEPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayParameteriAPPLE")) == NULL) || r; + r = ((glVertexArrayRangeAPPLE = (PFNGLVERTEXARRAYRANGEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayRangeAPPLE")) == NULL) || r; + + return r; +} + +#endif /* GL_APPLE_vertex_array_range */ + +#ifdef GL_APPLE_ycbcr_422 + +#endif /* GL_APPLE_ycbcr_422 */ + +#ifdef GL_ARB_color_buffer_float + +static GLboolean _glewInit_GL_ARB_color_buffer_float (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glClampColorARB = (PFNGLCLAMPCOLORARBPROC)glewGetProcAddress((const GLubyte*)"glClampColorARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_color_buffer_float */ + +#ifdef GL_ARB_depth_texture + +#endif /* GL_ARB_depth_texture */ + +#ifdef GL_ARB_draw_buffers + +static GLboolean _glewInit_GL_ARB_draw_buffers (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDrawBuffersARB = (PFNGLDRAWBUFFERSARBPROC)glewGetProcAddress((const GLubyte*)"glDrawBuffersARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_draw_buffers */ + +#ifdef GL_ARB_fragment_program + +#endif /* GL_ARB_fragment_program */ + +#ifdef GL_ARB_fragment_program_shadow + +#endif /* GL_ARB_fragment_program_shadow */ + +#ifdef GL_ARB_fragment_shader + +#endif /* GL_ARB_fragment_shader */ + +#ifdef GL_ARB_half_float_pixel + +#endif /* GL_ARB_half_float_pixel */ + +#ifdef GL_ARB_imaging + +static GLboolean _glewInit_GL_ARB_imaging (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBlendEquation = (PFNGLBLENDEQUATIONPROC)glewGetProcAddress((const GLubyte*)"glBlendEquation")) == NULL) || r; + r = ((glColorSubTable = (PFNGLCOLORSUBTABLEPROC)glewGetProcAddress((const GLubyte*)"glColorSubTable")) == NULL) || r; + r = ((glColorTable = (PFNGLCOLORTABLEPROC)glewGetProcAddress((const GLubyte*)"glColorTable")) == NULL) || r; + r = ((glColorTableParameterfv = (PFNGLCOLORTABLEPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glColorTableParameterfv")) == NULL) || r; + r = ((glColorTableParameteriv = (PFNGLCOLORTABLEPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glColorTableParameteriv")) == NULL) || r; + r = ((glConvolutionFilter1D = (PFNGLCONVOLUTIONFILTER1DPROC)glewGetProcAddress((const GLubyte*)"glConvolutionFilter1D")) == NULL) || r; + r = ((glConvolutionFilter2D = (PFNGLCONVOLUTIONFILTER2DPROC)glewGetProcAddress((const GLubyte*)"glConvolutionFilter2D")) == NULL) || r; + r = ((glConvolutionParameterf = (PFNGLCONVOLUTIONPARAMETERFPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterf")) == NULL) || r; + r = ((glConvolutionParameterfv = (PFNGLCONVOLUTIONPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterfv")) == NULL) || r; + r = ((glConvolutionParameteri = (PFNGLCONVOLUTIONPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameteri")) == NULL) || r; + r = ((glConvolutionParameteriv = (PFNGLCONVOLUTIONPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameteriv")) == NULL) || r; + r = ((glCopyColorSubTable = (PFNGLCOPYCOLORSUBTABLEPROC)glewGetProcAddress((const GLubyte*)"glCopyColorSubTable")) == NULL) || r; + r = ((glCopyColorTable = (PFNGLCOPYCOLORTABLEPROC)glewGetProcAddress((const GLubyte*)"glCopyColorTable")) == NULL) || r; + r = ((glCopyConvolutionFilter1D = (PFNGLCOPYCONVOLUTIONFILTER1DPROC)glewGetProcAddress((const GLubyte*)"glCopyConvolutionFilter1D")) == NULL) || r; + r = ((glCopyConvolutionFilter2D = (PFNGLCOPYCONVOLUTIONFILTER2DPROC)glewGetProcAddress((const GLubyte*)"glCopyConvolutionFilter2D")) == NULL) || r; + r = ((glGetColorTable = (PFNGLGETCOLORTABLEPROC)glewGetProcAddress((const GLubyte*)"glGetColorTable")) == NULL) || r; + r = ((glGetColorTableParameterfv = (PFNGLGETCOLORTABLEPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterfv")) == NULL) || r; + r = ((glGetColorTableParameteriv = (PFNGLGETCOLORTABLEPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameteriv")) == NULL) || r; + r = ((glGetConvolutionFilter = (PFNGLGETCONVOLUTIONFILTERPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionFilter")) == NULL) || r; + r = ((glGetConvolutionParameterfv = (PFNGLGETCONVOLUTIONPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionParameterfv")) == NULL) || r; + r = ((glGetConvolutionParameteriv = (PFNGLGETCONVOLUTIONPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionParameteriv")) == NULL) || r; + r = ((glGetHistogram = (PFNGLGETHISTOGRAMPROC)glewGetProcAddress((const GLubyte*)"glGetHistogram")) == NULL) || r; + r = ((glGetHistogramParameterfv = (PFNGLGETHISTOGRAMPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramParameterfv")) == NULL) || r; + r = ((glGetHistogramParameteriv = (PFNGLGETHISTOGRAMPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramParameteriv")) == NULL) || r; + r = ((glGetMinmax = (PFNGLGETMINMAXPROC)glewGetProcAddress((const GLubyte*)"glGetMinmax")) == NULL) || r; + r = ((glGetMinmaxParameterfv = (PFNGLGETMINMAXPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxParameterfv")) == NULL) || r; + r = ((glGetMinmaxParameteriv = (PFNGLGETMINMAXPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxParameteriv")) == NULL) || r; + r = ((glGetSeparableFilter = (PFNGLGETSEPARABLEFILTERPROC)glewGetProcAddress((const GLubyte*)"glGetSeparableFilter")) == NULL) || r; + r = ((glHistogram = (PFNGLHISTOGRAMPROC)glewGetProcAddress((const GLubyte*)"glHistogram")) == NULL) || r; + r = ((glMinmax = (PFNGLMINMAXPROC)glewGetProcAddress((const GLubyte*)"glMinmax")) == NULL) || r; + r = ((glResetHistogram = (PFNGLRESETHISTOGRAMPROC)glewGetProcAddress((const GLubyte*)"glResetHistogram")) == NULL) || r; + r = ((glResetMinmax = (PFNGLRESETMINMAXPROC)glewGetProcAddress((const GLubyte*)"glResetMinmax")) == NULL) || r; + r = ((glSeparableFilter2D = (PFNGLSEPARABLEFILTER2DPROC)glewGetProcAddress((const GLubyte*)"glSeparableFilter2D")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_imaging */ + +#ifdef GL_ARB_matrix_palette + +static GLboolean _glewInit_GL_ARB_matrix_palette (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glCurrentPaletteMatrixARB = (PFNGLCURRENTPALETTEMATRIXARBPROC)glewGetProcAddress((const GLubyte*)"glCurrentPaletteMatrixARB")) == NULL) || r; + r = ((glMatrixIndexPointerARB = (PFNGLMATRIXINDEXPOINTERARBPROC)glewGetProcAddress((const GLubyte*)"glMatrixIndexPointerARB")) == NULL) || r; + r = ((glMatrixIndexubvARB = (PFNGLMATRIXINDEXUBVARBPROC)glewGetProcAddress((const GLubyte*)"glMatrixIndexubvARB")) == NULL) || r; + r = ((glMatrixIndexuivARB = (PFNGLMATRIXINDEXUIVARBPROC)glewGetProcAddress((const GLubyte*)"glMatrixIndexuivARB")) == NULL) || r; + r = ((glMatrixIndexusvARB = (PFNGLMATRIXINDEXUSVARBPROC)glewGetProcAddress((const GLubyte*)"glMatrixIndexusvARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_matrix_palette */ + +#ifdef GL_ARB_multisample + +static GLboolean _glewInit_GL_ARB_multisample (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glSampleCoverageARB = (PFNGLSAMPLECOVERAGEARBPROC)glewGetProcAddress((const GLubyte*)"glSampleCoverageARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_multisample */ + +#ifdef GL_ARB_multitexture + +static GLboolean _glewInit_GL_ARB_multitexture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)glewGetProcAddress((const GLubyte*)"glActiveTextureARB")) == NULL) || r; + r = ((glClientActiveTextureARB = (PFNGLCLIENTACTIVETEXTUREARBPROC)glewGetProcAddress((const GLubyte*)"glClientActiveTextureARB")) == NULL) || r; + r = ((glMultiTexCoord1dARB = (PFNGLMULTITEXCOORD1DARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1dARB")) == NULL) || r; + r = ((glMultiTexCoord1dvARB = (PFNGLMULTITEXCOORD1DVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1dvARB")) == NULL) || r; + r = ((glMultiTexCoord1fARB = (PFNGLMULTITEXCOORD1FARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1fARB")) == NULL) || r; + r = ((glMultiTexCoord1fvARB = (PFNGLMULTITEXCOORD1FVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1fvARB")) == NULL) || r; + r = ((glMultiTexCoord1iARB = (PFNGLMULTITEXCOORD1IARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1iARB")) == NULL) || r; + r = ((glMultiTexCoord1ivARB = (PFNGLMULTITEXCOORD1IVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1ivARB")) == NULL) || r; + r = ((glMultiTexCoord1sARB = (PFNGLMULTITEXCOORD1SARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1sARB")) == NULL) || r; + r = ((glMultiTexCoord1svARB = (PFNGLMULTITEXCOORD1SVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1svARB")) == NULL) || r; + r = ((glMultiTexCoord2dARB = (PFNGLMULTITEXCOORD2DARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2dARB")) == NULL) || r; + r = ((glMultiTexCoord2dvARB = (PFNGLMULTITEXCOORD2DVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2dvARB")) == NULL) || r; + r = ((glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2fARB")) == NULL) || r; + r = ((glMultiTexCoord2fvARB = (PFNGLMULTITEXCOORD2FVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2fvARB")) == NULL) || r; + r = ((glMultiTexCoord2iARB = (PFNGLMULTITEXCOORD2IARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2iARB")) == NULL) || r; + r = ((glMultiTexCoord2ivARB = (PFNGLMULTITEXCOORD2IVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2ivARB")) == NULL) || r; + r = ((glMultiTexCoord2sARB = (PFNGLMULTITEXCOORD2SARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2sARB")) == NULL) || r; + r = ((glMultiTexCoord2svARB = (PFNGLMULTITEXCOORD2SVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2svARB")) == NULL) || r; + r = ((glMultiTexCoord3dARB = (PFNGLMULTITEXCOORD3DARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3dARB")) == NULL) || r; + r = ((glMultiTexCoord3dvARB = (PFNGLMULTITEXCOORD3DVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3dvARB")) == NULL) || r; + r = ((glMultiTexCoord3fARB = (PFNGLMULTITEXCOORD3FARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3fARB")) == NULL) || r; + r = ((glMultiTexCoord3fvARB = (PFNGLMULTITEXCOORD3FVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3fvARB")) == NULL) || r; + r = ((glMultiTexCoord3iARB = (PFNGLMULTITEXCOORD3IARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3iARB")) == NULL) || r; + r = ((glMultiTexCoord3ivARB = (PFNGLMULTITEXCOORD3IVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3ivARB")) == NULL) || r; + r = ((glMultiTexCoord3sARB = (PFNGLMULTITEXCOORD3SARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3sARB")) == NULL) || r; + r = ((glMultiTexCoord3svARB = (PFNGLMULTITEXCOORD3SVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3svARB")) == NULL) || r; + r = ((glMultiTexCoord4dARB = (PFNGLMULTITEXCOORD4DARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4dARB")) == NULL) || r; + r = ((glMultiTexCoord4dvARB = (PFNGLMULTITEXCOORD4DVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4dvARB")) == NULL) || r; + r = ((glMultiTexCoord4fARB = (PFNGLMULTITEXCOORD4FARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4fARB")) == NULL) || r; + r = ((glMultiTexCoord4fvARB = (PFNGLMULTITEXCOORD4FVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4fvARB")) == NULL) || r; + r = ((glMultiTexCoord4iARB = (PFNGLMULTITEXCOORD4IARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4iARB")) == NULL) || r; + r = ((glMultiTexCoord4ivARB = (PFNGLMULTITEXCOORD4IVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4ivARB")) == NULL) || r; + r = ((glMultiTexCoord4sARB = (PFNGLMULTITEXCOORD4SARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4sARB")) == NULL) || r; + r = ((glMultiTexCoord4svARB = (PFNGLMULTITEXCOORD4SVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4svARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_multitexture */ + +#ifdef GL_ARB_occlusion_query + +static GLboolean _glewInit_GL_ARB_occlusion_query (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBeginQueryARB = (PFNGLBEGINQUERYARBPROC)glewGetProcAddress((const GLubyte*)"glBeginQueryARB")) == NULL) || r; + r = ((glDeleteQueriesARB = (PFNGLDELETEQUERIESARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteQueriesARB")) == NULL) || r; + r = ((glEndQueryARB = (PFNGLENDQUERYARBPROC)glewGetProcAddress((const GLubyte*)"glEndQueryARB")) == NULL) || r; + r = ((glGenQueriesARB = (PFNGLGENQUERIESARBPROC)glewGetProcAddress((const GLubyte*)"glGenQueriesARB")) == NULL) || r; + r = ((glGetQueryObjectivARB = (PFNGLGETQUERYOBJECTIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectivARB")) == NULL) || r; + r = ((glGetQueryObjectuivARB = (PFNGLGETQUERYOBJECTUIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectuivARB")) == NULL) || r; + r = ((glGetQueryivARB = (PFNGLGETQUERYIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetQueryivARB")) == NULL) || r; + r = ((glIsQueryARB = (PFNGLISQUERYARBPROC)glewGetProcAddress((const GLubyte*)"glIsQueryARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_occlusion_query */ + +#ifdef GL_ARB_pixel_buffer_object + +#endif /* GL_ARB_pixel_buffer_object */ + +#ifdef GL_ARB_point_parameters + +static GLboolean _glewInit_GL_ARB_point_parameters (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glPointParameterfARB = (PFNGLPOINTPARAMETERFARBPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfARB")) == NULL) || r; + r = ((glPointParameterfvARB = (PFNGLPOINTPARAMETERFVARBPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfvARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_point_parameters */ + +#ifdef GL_ARB_point_sprite + +#endif /* GL_ARB_point_sprite */ + +#ifdef GL_ARB_shader_objects + +static GLboolean _glewInit_GL_ARB_shader_objects (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glAttachObjectARB")) == NULL) || r; + r = ((glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)glewGetProcAddress((const GLubyte*)"glCompileShaderARB")) == NULL) || r; + r = ((glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glCreateProgramObjectARB")) == NULL) || r; + r = ((glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glCreateShaderObjectARB")) == NULL) || r; + r = ((glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteObjectARB")) == NULL) || r; + r = ((glDetachObjectARB = (PFNGLDETACHOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glDetachObjectARB")) == NULL) || r; + r = ((glGetActiveUniformARB = (PFNGLGETACTIVEUNIFORMARBPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniformARB")) == NULL) || r; + r = ((glGetAttachedObjectsARB = (PFNGLGETATTACHEDOBJECTSARBPROC)glewGetProcAddress((const GLubyte*)"glGetAttachedObjectsARB")) == NULL) || r; + r = ((glGetHandleARB = (PFNGLGETHANDLEARBPROC)glewGetProcAddress((const GLubyte*)"glGetHandleARB")) == NULL) || r; + r = ((glGetInfoLogARB = (PFNGLGETINFOLOGARBPROC)glewGetProcAddress((const GLubyte*)"glGetInfoLogARB")) == NULL) || r; + r = ((glGetObjectParameterfvARB = (PFNGLGETOBJECTPARAMETERFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetObjectParameterfvARB")) == NULL) || r; + r = ((glGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetObjectParameterivARB")) == NULL) || r; + r = ((glGetShaderSourceARB = (PFNGLGETSHADERSOURCEARBPROC)glewGetProcAddress((const GLubyte*)"glGetShaderSourceARB")) == NULL) || r; + r = ((glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC)glewGetProcAddress((const GLubyte*)"glGetUniformLocationARB")) == NULL) || r; + r = ((glGetUniformfvARB = (PFNGLGETUNIFORMFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetUniformfvARB")) == NULL) || r; + r = ((glGetUniformivARB = (PFNGLGETUNIFORMIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetUniformivARB")) == NULL) || r; + r = ((glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glLinkProgramARB")) == NULL) || r; + r = ((glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)glewGetProcAddress((const GLubyte*)"glShaderSourceARB")) == NULL) || r; + r = ((glUniform1fARB = (PFNGLUNIFORM1FARBPROC)glewGetProcAddress((const GLubyte*)"glUniform1fARB")) == NULL) || r; + r = ((glUniform1fvARB = (PFNGLUNIFORM1FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform1fvARB")) == NULL) || r; + r = ((glUniform1iARB = (PFNGLUNIFORM1IARBPROC)glewGetProcAddress((const GLubyte*)"glUniform1iARB")) == NULL) || r; + r = ((glUniform1ivARB = (PFNGLUNIFORM1IVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform1ivARB")) == NULL) || r; + r = ((glUniform2fARB = (PFNGLUNIFORM2FARBPROC)glewGetProcAddress((const GLubyte*)"glUniform2fARB")) == NULL) || r; + r = ((glUniform2fvARB = (PFNGLUNIFORM2FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform2fvARB")) == NULL) || r; + r = ((glUniform2iARB = (PFNGLUNIFORM2IARBPROC)glewGetProcAddress((const GLubyte*)"glUniform2iARB")) == NULL) || r; + r = ((glUniform2ivARB = (PFNGLUNIFORM2IVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform2ivARB")) == NULL) || r; + r = ((glUniform3fARB = (PFNGLUNIFORM3FARBPROC)glewGetProcAddress((const GLubyte*)"glUniform3fARB")) == NULL) || r; + r = ((glUniform3fvARB = (PFNGLUNIFORM3FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform3fvARB")) == NULL) || r; + r = ((glUniform3iARB = (PFNGLUNIFORM3IARBPROC)glewGetProcAddress((const GLubyte*)"glUniform3iARB")) == NULL) || r; + r = ((glUniform3ivARB = (PFNGLUNIFORM3IVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform3ivARB")) == NULL) || r; + r = ((glUniform4fARB = (PFNGLUNIFORM4FARBPROC)glewGetProcAddress((const GLubyte*)"glUniform4fARB")) == NULL) || r; + r = ((glUniform4fvARB = (PFNGLUNIFORM4FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform4fvARB")) == NULL) || r; + r = ((glUniform4iARB = (PFNGLUNIFORM4IARBPROC)glewGetProcAddress((const GLubyte*)"glUniform4iARB")) == NULL) || r; + r = ((glUniform4ivARB = (PFNGLUNIFORM4IVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform4ivARB")) == NULL) || r; + r = ((glUniformMatrix2fvARB = (PFNGLUNIFORMMATRIX2FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2fvARB")) == NULL) || r; + r = ((glUniformMatrix3fvARB = (PFNGLUNIFORMMATRIX3FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3fvARB")) == NULL) || r; + r = ((glUniformMatrix4fvARB = (PFNGLUNIFORMMATRIX4FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4fvARB")) == NULL) || r; + r = ((glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glUseProgramObjectARB")) == NULL) || r; + r = ((glValidateProgramARB = (PFNGLVALIDATEPROGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glValidateProgramARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_shader_objects */ + +#ifdef GL_ARB_shading_language_100 + +#endif /* GL_ARB_shading_language_100 */ + +#ifdef GL_ARB_shadow + +#endif /* GL_ARB_shadow */ + +#ifdef GL_ARB_shadow_ambient + +#endif /* GL_ARB_shadow_ambient */ + +#ifdef GL_ARB_texture_border_clamp + +#endif /* GL_ARB_texture_border_clamp */ + +#ifdef GL_ARB_texture_compression + +static GLboolean _glewInit_GL_ARB_texture_compression (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glCompressedTexImage1DARB = (PFNGLCOMPRESSEDTEXIMAGE1DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage1DARB")) == NULL) || r; + r = ((glCompressedTexImage2DARB = (PFNGLCOMPRESSEDTEXIMAGE2DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage2DARB")) == NULL) || r; + r = ((glCompressedTexImage3DARB = (PFNGLCOMPRESSEDTEXIMAGE3DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage3DARB")) == NULL) || r; + r = ((glCompressedTexSubImage1DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage1DARB")) == NULL) || r; + r = ((glCompressedTexSubImage2DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage2DARB")) == NULL) || r; + r = ((glCompressedTexSubImage3DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage3DARB")) == NULL) || r; + r = ((glGetCompressedTexImageARB = (PFNGLGETCOMPRESSEDTEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"glGetCompressedTexImageARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_texture_compression */ + +#ifdef GL_ARB_texture_cube_map + +#endif /* GL_ARB_texture_cube_map */ + +#ifdef GL_ARB_texture_env_add + +#endif /* GL_ARB_texture_env_add */ + +#ifdef GL_ARB_texture_env_combine + +#endif /* GL_ARB_texture_env_combine */ + +#ifdef GL_ARB_texture_env_crossbar + +#endif /* GL_ARB_texture_env_crossbar */ + +#ifdef GL_ARB_texture_env_dot3 + +#endif /* GL_ARB_texture_env_dot3 */ + +#ifdef GL_ARB_texture_float + +#endif /* GL_ARB_texture_float */ + +#ifdef GL_ARB_texture_mirrored_repeat + +#endif /* GL_ARB_texture_mirrored_repeat */ + +#ifdef GL_ARB_texture_non_power_of_two + +#endif /* GL_ARB_texture_non_power_of_two */ + +#ifdef GL_ARB_texture_rectangle + +#endif /* GL_ARB_texture_rectangle */ + +#ifdef GL_ARB_transpose_matrix + +static GLboolean _glewInit_GL_ARB_transpose_matrix (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glLoadTransposeMatrixdARB = (PFNGLLOADTRANSPOSEMATRIXDARBPROC)glewGetProcAddress((const GLubyte*)"glLoadTransposeMatrixdARB")) == NULL) || r; + r = ((glLoadTransposeMatrixfARB = (PFNGLLOADTRANSPOSEMATRIXFARBPROC)glewGetProcAddress((const GLubyte*)"glLoadTransposeMatrixfARB")) == NULL) || r; + r = ((glMultTransposeMatrixdARB = (PFNGLMULTTRANSPOSEMATRIXDARBPROC)glewGetProcAddress((const GLubyte*)"glMultTransposeMatrixdARB")) == NULL) || r; + r = ((glMultTransposeMatrixfARB = (PFNGLMULTTRANSPOSEMATRIXFARBPROC)glewGetProcAddress((const GLubyte*)"glMultTransposeMatrixfARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_transpose_matrix */ + +#ifdef GL_ARB_vertex_blend + +static GLboolean _glewInit_GL_ARB_vertex_blend (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glVertexBlendARB = (PFNGLVERTEXBLENDARBPROC)glewGetProcAddress((const GLubyte*)"glVertexBlendARB")) == NULL) || r; + r = ((glWeightPointerARB = (PFNGLWEIGHTPOINTERARBPROC)glewGetProcAddress((const GLubyte*)"glWeightPointerARB")) == NULL) || r; + r = ((glWeightbvARB = (PFNGLWEIGHTBVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightbvARB")) == NULL) || r; + r = ((glWeightdvARB = (PFNGLWEIGHTDVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightdvARB")) == NULL) || r; + r = ((glWeightfvARB = (PFNGLWEIGHTFVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightfvARB")) == NULL) || r; + r = ((glWeightivARB = (PFNGLWEIGHTIVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightivARB")) == NULL) || r; + r = ((glWeightsvARB = (PFNGLWEIGHTSVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightsvARB")) == NULL) || r; + r = ((glWeightubvARB = (PFNGLWEIGHTUBVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightubvARB")) == NULL) || r; + r = ((glWeightuivARB = (PFNGLWEIGHTUIVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightuivARB")) == NULL) || r; + r = ((glWeightusvARB = (PFNGLWEIGHTUSVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightusvARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_vertex_blend */ + +#ifdef GL_ARB_vertex_buffer_object + +static GLboolean _glewInit_GL_ARB_vertex_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBindBufferARB = (PFNGLBINDBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glBindBufferARB")) == NULL) || r; + r = ((glBufferDataARB = (PFNGLBUFFERDATAARBPROC)glewGetProcAddress((const GLubyte*)"glBufferDataARB")) == NULL) || r; + r = ((glBufferSubDataARB = (PFNGLBUFFERSUBDATAARBPROC)glewGetProcAddress((const GLubyte*)"glBufferSubDataARB")) == NULL) || r; + r = ((glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteBuffersARB")) == NULL) || r; + r = ((glGenBuffersARB = (PFNGLGENBUFFERSARBPROC)glewGetProcAddress((const GLubyte*)"glGenBuffersARB")) == NULL) || r; + r = ((glGetBufferParameterivARB = (PFNGLGETBUFFERPARAMETERIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetBufferParameterivARB")) == NULL) || r; + r = ((glGetBufferPointervARB = (PFNGLGETBUFFERPOINTERVARBPROC)glewGetProcAddress((const GLubyte*)"glGetBufferPointervARB")) == NULL) || r; + r = ((glGetBufferSubDataARB = (PFNGLGETBUFFERSUBDATAARBPROC)glewGetProcAddress((const GLubyte*)"glGetBufferSubDataARB")) == NULL) || r; + r = ((glIsBufferARB = (PFNGLISBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glIsBufferARB")) == NULL) || r; + r = ((glMapBufferARB = (PFNGLMAPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glMapBufferARB")) == NULL) || r; + r = ((glUnmapBufferARB = (PFNGLUNMAPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glUnmapBufferARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_vertex_buffer_object */ + +#ifdef GL_ARB_vertex_program + +static GLboolean _glewInit_GL_ARB_vertex_program (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBindProgramARB = (PFNGLBINDPROGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glBindProgramARB")) == NULL) || r; + r = ((glDeleteProgramsARB = (PFNGLDELETEPROGRAMSARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteProgramsARB")) == NULL) || r; + r = ((glDisableVertexAttribArrayARB = (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)glewGetProcAddress((const GLubyte*)"glDisableVertexAttribArrayARB")) == NULL) || r; + r = ((glEnableVertexAttribArrayARB = (PFNGLENABLEVERTEXATTRIBARRAYARBPROC)glewGetProcAddress((const GLubyte*)"glEnableVertexAttribArrayARB")) == NULL) || r; + r = ((glGenProgramsARB = (PFNGLGENPROGRAMSARBPROC)glewGetProcAddress((const GLubyte*)"glGenProgramsARB")) == NULL) || r; + r = ((glGetProgramEnvParameterdvARB = (PFNGLGETPROGRAMENVPARAMETERDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramEnvParameterdvARB")) == NULL) || r; + r = ((glGetProgramEnvParameterfvARB = (PFNGLGETPROGRAMENVPARAMETERFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramEnvParameterfvARB")) == NULL) || r; + r = ((glGetProgramLocalParameterdvARB = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramLocalParameterdvARB")) == NULL) || r; + r = ((glGetProgramLocalParameterfvARB = (PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramLocalParameterfvARB")) == NULL) || r; + r = ((glGetProgramStringARB = (PFNGLGETPROGRAMSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramStringARB")) == NULL) || r; + r = ((glGetProgramivARB = (PFNGLGETPROGRAMIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramivARB")) == NULL) || r; + r = ((glGetVertexAttribPointervARB = (PFNGLGETVERTEXATTRIBPOINTERVARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribPointervARB")) == NULL) || r; + r = ((glGetVertexAttribdvARB = (PFNGLGETVERTEXATTRIBDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribdvARB")) == NULL) || r; + r = ((glGetVertexAttribfvARB = (PFNGLGETVERTEXATTRIBFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribfvARB")) == NULL) || r; + r = ((glGetVertexAttribivARB = (PFNGLGETVERTEXATTRIBIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribivARB")) == NULL) || r; + r = ((glIsProgramARB = (PFNGLISPROGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glIsProgramARB")) == NULL) || r; + r = ((glProgramEnvParameter4dARB = (PFNGLPROGRAMENVPARAMETER4DARBPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameter4dARB")) == NULL) || r; + r = ((glProgramEnvParameter4dvARB = (PFNGLPROGRAMENVPARAMETER4DVARBPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameter4dvARB")) == NULL) || r; + r = ((glProgramEnvParameter4fARB = (PFNGLPROGRAMENVPARAMETER4FARBPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameter4fARB")) == NULL) || r; + r = ((glProgramEnvParameter4fvARB = (PFNGLPROGRAMENVPARAMETER4FVARBPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameter4fvARB")) == NULL) || r; + r = ((glProgramLocalParameter4dARB = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameter4dARB")) == NULL) || r; + r = ((glProgramLocalParameter4dvARB = (PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameter4dvARB")) == NULL) || r; + r = ((glProgramLocalParameter4fARB = (PFNGLPROGRAMLOCALPARAMETER4FARBPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameter4fARB")) == NULL) || r; + r = ((glProgramLocalParameter4fvARB = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameter4fvARB")) == NULL) || r; + r = ((glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glProgramStringARB")) == NULL) || r; + r = ((glVertexAttrib1dARB = (PFNGLVERTEXATTRIB1DARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dARB")) == NULL) || r; + r = ((glVertexAttrib1dvARB = (PFNGLVERTEXATTRIB1DVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dvARB")) == NULL) || r; + r = ((glVertexAttrib1fARB = (PFNGLVERTEXATTRIB1FARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fARB")) == NULL) || r; + r = ((glVertexAttrib1fvARB = (PFNGLVERTEXATTRIB1FVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fvARB")) == NULL) || r; + r = ((glVertexAttrib1sARB = (PFNGLVERTEXATTRIB1SARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1sARB")) == NULL) || r; + r = ((glVertexAttrib1svARB = (PFNGLVERTEXATTRIB1SVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1svARB")) == NULL) || r; + r = ((glVertexAttrib2dARB = (PFNGLVERTEXATTRIB2DARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dARB")) == NULL) || r; + r = ((glVertexAttrib2dvARB = (PFNGLVERTEXATTRIB2DVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dvARB")) == NULL) || r; + r = ((glVertexAttrib2fARB = (PFNGLVERTEXATTRIB2FARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fARB")) == NULL) || r; + r = ((glVertexAttrib2fvARB = (PFNGLVERTEXATTRIB2FVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fvARB")) == NULL) || r; + r = ((glVertexAttrib2sARB = (PFNGLVERTEXATTRIB2SARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2sARB")) == NULL) || r; + r = ((glVertexAttrib2svARB = (PFNGLVERTEXATTRIB2SVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2svARB")) == NULL) || r; + r = ((glVertexAttrib3dARB = (PFNGLVERTEXATTRIB3DARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dARB")) == NULL) || r; + r = ((glVertexAttrib3dvARB = (PFNGLVERTEXATTRIB3DVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dvARB")) == NULL) || r; + r = ((glVertexAttrib3fARB = (PFNGLVERTEXATTRIB3FARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fARB")) == NULL) || r; + r = ((glVertexAttrib3fvARB = (PFNGLVERTEXATTRIB3FVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fvARB")) == NULL) || r; + r = ((glVertexAttrib3sARB = (PFNGLVERTEXATTRIB3SARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3sARB")) == NULL) || r; + r = ((glVertexAttrib3svARB = (PFNGLVERTEXATTRIB3SVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3svARB")) == NULL) || r; + r = ((glVertexAttrib4NbvARB = (PFNGLVERTEXATTRIB4NBVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NbvARB")) == NULL) || r; + r = ((glVertexAttrib4NivARB = (PFNGLVERTEXATTRIB4NIVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NivARB")) == NULL) || r; + r = ((glVertexAttrib4NsvARB = (PFNGLVERTEXATTRIB4NSVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NsvARB")) == NULL) || r; + r = ((glVertexAttrib4NubARB = (PFNGLVERTEXATTRIB4NUBARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NubARB")) == NULL) || r; + r = ((glVertexAttrib4NubvARB = (PFNGLVERTEXATTRIB4NUBVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NubvARB")) == NULL) || r; + r = ((glVertexAttrib4NuivARB = (PFNGLVERTEXATTRIB4NUIVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NuivARB")) == NULL) || r; + r = ((glVertexAttrib4NusvARB = (PFNGLVERTEXATTRIB4NUSVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NusvARB")) == NULL) || r; + r = ((glVertexAttrib4bvARB = (PFNGLVERTEXATTRIB4BVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4bvARB")) == NULL) || r; + r = ((glVertexAttrib4dARB = (PFNGLVERTEXATTRIB4DARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dARB")) == NULL) || r; + r = ((glVertexAttrib4dvARB = (PFNGLVERTEXATTRIB4DVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dvARB")) == NULL) || r; + r = ((glVertexAttrib4fARB = (PFNGLVERTEXATTRIB4FARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fARB")) == NULL) || r; + r = ((glVertexAttrib4fvARB = (PFNGLVERTEXATTRIB4FVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fvARB")) == NULL) || r; + r = ((glVertexAttrib4ivARB = (PFNGLVERTEXATTRIB4IVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ivARB")) == NULL) || r; + r = ((glVertexAttrib4sARB = (PFNGLVERTEXATTRIB4SARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4sARB")) == NULL) || r; + r = ((glVertexAttrib4svARB = (PFNGLVERTEXATTRIB4SVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4svARB")) == NULL) || r; + r = ((glVertexAttrib4ubvARB = (PFNGLVERTEXATTRIB4UBVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ubvARB")) == NULL) || r; + r = ((glVertexAttrib4uivARB = (PFNGLVERTEXATTRIB4UIVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4uivARB")) == NULL) || r; + r = ((glVertexAttrib4usvARB = (PFNGLVERTEXATTRIB4USVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4usvARB")) == NULL) || r; + r = ((glVertexAttribPointerARB = (PFNGLVERTEXATTRIBPOINTERARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribPointerARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_vertex_program */ + +#ifdef GL_ARB_vertex_shader + +static GLboolean _glewInit_GL_ARB_vertex_shader (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBindAttribLocationARB = (PFNGLBINDATTRIBLOCATIONARBPROC)glewGetProcAddress((const GLubyte*)"glBindAttribLocationARB")) == NULL) || r; + r = ((glGetActiveAttribARB = (PFNGLGETACTIVEATTRIBARBPROC)glewGetProcAddress((const GLubyte*)"glGetActiveAttribARB")) == NULL) || r; + r = ((glGetAttribLocationARB = (PFNGLGETATTRIBLOCATIONARBPROC)glewGetProcAddress((const GLubyte*)"glGetAttribLocationARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_vertex_shader */ + +#ifdef GL_ARB_window_pos + +static GLboolean _glewInit_GL_ARB_window_pos (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glWindowPos2dARB = (PFNGLWINDOWPOS2DARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dARB")) == NULL) || r; + r = ((glWindowPos2dvARB = (PFNGLWINDOWPOS2DVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dvARB")) == NULL) || r; + r = ((glWindowPos2fARB = (PFNGLWINDOWPOS2FARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fARB")) == NULL) || r; + r = ((glWindowPos2fvARB = (PFNGLWINDOWPOS2FVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fvARB")) == NULL) || r; + r = ((glWindowPos2iARB = (PFNGLWINDOWPOS2IARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2iARB")) == NULL) || r; + r = ((glWindowPos2ivARB = (PFNGLWINDOWPOS2IVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2ivARB")) == NULL) || r; + r = ((glWindowPos2sARB = (PFNGLWINDOWPOS2SARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2sARB")) == NULL) || r; + r = ((glWindowPos2svARB = (PFNGLWINDOWPOS2SVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2svARB")) == NULL) || r; + r = ((glWindowPos3dARB = (PFNGLWINDOWPOS3DARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dARB")) == NULL) || r; + r = ((glWindowPos3dvARB = (PFNGLWINDOWPOS3DVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dvARB")) == NULL) || r; + r = ((glWindowPos3fARB = (PFNGLWINDOWPOS3FARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fARB")) == NULL) || r; + r = ((glWindowPos3fvARB = (PFNGLWINDOWPOS3FVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fvARB")) == NULL) || r; + r = ((glWindowPos3iARB = (PFNGLWINDOWPOS3IARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3iARB")) == NULL) || r; + r = ((glWindowPos3ivARB = (PFNGLWINDOWPOS3IVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3ivARB")) == NULL) || r; + r = ((glWindowPos3sARB = (PFNGLWINDOWPOS3SARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3sARB")) == NULL) || r; + r = ((glWindowPos3svARB = (PFNGLWINDOWPOS3SVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3svARB")) == NULL) || r; + + return r; +} + +#endif /* GL_ARB_window_pos */ + +#ifdef GL_ATIX_point_sprites + +#endif /* GL_ATIX_point_sprites */ + +#ifdef GL_ATIX_texture_env_combine3 + +#endif /* GL_ATIX_texture_env_combine3 */ + +#ifdef GL_ATIX_texture_env_route + +#endif /* GL_ATIX_texture_env_route */ + +#ifdef GL_ATIX_vertex_shader_output_point_size + +#endif /* GL_ATIX_vertex_shader_output_point_size */ + +#ifdef GL_ATI_draw_buffers + +static GLboolean _glewInit_GL_ATI_draw_buffers (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDrawBuffersATI = (PFNGLDRAWBUFFERSATIPROC)glewGetProcAddress((const GLubyte*)"glDrawBuffersATI")) == NULL) || r; + + return r; +} + +#endif /* GL_ATI_draw_buffers */ + +#ifdef GL_ATI_element_array + +static GLboolean _glewInit_GL_ATI_element_array (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDrawElementArrayATI = (PFNGLDRAWELEMENTARRAYATIPROC)glewGetProcAddress((const GLubyte*)"glDrawElementArrayATI")) == NULL) || r; + r = ((glDrawRangeElementArrayATI = (PFNGLDRAWRANGEELEMENTARRAYATIPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElementArrayATI")) == NULL) || r; + r = ((glElementPointerATI = (PFNGLELEMENTPOINTERATIPROC)glewGetProcAddress((const GLubyte*)"glElementPointerATI")) == NULL) || r; + + return r; +} + +#endif /* GL_ATI_element_array */ + +#ifdef GL_ATI_envmap_bumpmap + +static GLboolean _glewInit_GL_ATI_envmap_bumpmap (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetTexBumpParameterfvATI = (PFNGLGETTEXBUMPPARAMETERFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetTexBumpParameterfvATI")) == NULL) || r; + r = ((glGetTexBumpParameterivATI = (PFNGLGETTEXBUMPPARAMETERIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetTexBumpParameterivATI")) == NULL) || r; + r = ((glTexBumpParameterfvATI = (PFNGLTEXBUMPPARAMETERFVATIPROC)glewGetProcAddress((const GLubyte*)"glTexBumpParameterfvATI")) == NULL) || r; + r = ((glTexBumpParameterivATI = (PFNGLTEXBUMPPARAMETERIVATIPROC)glewGetProcAddress((const GLubyte*)"glTexBumpParameterivATI")) == NULL) || r; + + return r; +} + +#endif /* GL_ATI_envmap_bumpmap */ + +#ifdef GL_ATI_fragment_shader + +static GLboolean _glewInit_GL_ATI_fragment_shader (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glAlphaFragmentOp1ATI = (PFNGLALPHAFRAGMENTOP1ATIPROC)glewGetProcAddress((const GLubyte*)"glAlphaFragmentOp1ATI")) == NULL) || r; + r = ((glAlphaFragmentOp2ATI = (PFNGLALPHAFRAGMENTOP2ATIPROC)glewGetProcAddress((const GLubyte*)"glAlphaFragmentOp2ATI")) == NULL) || r; + r = ((glAlphaFragmentOp3ATI = (PFNGLALPHAFRAGMENTOP3ATIPROC)glewGetProcAddress((const GLubyte*)"glAlphaFragmentOp3ATI")) == NULL) || r; + r = ((glBeginFragmentShaderATI = (PFNGLBEGINFRAGMENTSHADERATIPROC)glewGetProcAddress((const GLubyte*)"glBeginFragmentShaderATI")) == NULL) || r; + r = ((glBindFragmentShaderATI = (PFNGLBINDFRAGMENTSHADERATIPROC)glewGetProcAddress((const GLubyte*)"glBindFragmentShaderATI")) == NULL) || r; + r = ((glColorFragmentOp1ATI = (PFNGLCOLORFRAGMENTOP1ATIPROC)glewGetProcAddress((const GLubyte*)"glColorFragmentOp1ATI")) == NULL) || r; + r = ((glColorFragmentOp2ATI = (PFNGLCOLORFRAGMENTOP2ATIPROC)glewGetProcAddress((const GLubyte*)"glColorFragmentOp2ATI")) == NULL) || r; + r = ((glColorFragmentOp3ATI = (PFNGLCOLORFRAGMENTOP3ATIPROC)glewGetProcAddress((const GLubyte*)"glColorFragmentOp3ATI")) == NULL) || r; + r = ((glDeleteFragmentShaderATI = (PFNGLDELETEFRAGMENTSHADERATIPROC)glewGetProcAddress((const GLubyte*)"glDeleteFragmentShaderATI")) == NULL) || r; + r = ((glEndFragmentShaderATI = (PFNGLENDFRAGMENTSHADERATIPROC)glewGetProcAddress((const GLubyte*)"glEndFragmentShaderATI")) == NULL) || r; + r = ((glGenFragmentShadersATI = (PFNGLGENFRAGMENTSHADERSATIPROC)glewGetProcAddress((const GLubyte*)"glGenFragmentShadersATI")) == NULL) || r; + r = ((glPassTexCoordATI = (PFNGLPASSTEXCOORDATIPROC)glewGetProcAddress((const GLubyte*)"glPassTexCoordATI")) == NULL) || r; + r = ((glSampleMapATI = (PFNGLSAMPLEMAPATIPROC)glewGetProcAddress((const GLubyte*)"glSampleMapATI")) == NULL) || r; + r = ((glSetFragmentShaderConstantATI = (PFNGLSETFRAGMENTSHADERCONSTANTATIPROC)glewGetProcAddress((const GLubyte*)"glSetFragmentShaderConstantATI")) == NULL) || r; + + return r; +} + +#endif /* GL_ATI_fragment_shader */ + +#ifdef GL_ATI_map_object_buffer + +static GLboolean _glewInit_GL_ATI_map_object_buffer (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glMapObjectBufferATI = (PFNGLMAPOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glMapObjectBufferATI")) == NULL) || r; + r = ((glUnmapObjectBufferATI = (PFNGLUNMAPOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glUnmapObjectBufferATI")) == NULL) || r; + + return r; +} + +#endif /* GL_ATI_map_object_buffer */ + +#ifdef GL_ATI_pn_triangles + +static GLboolean _glewInit_GL_ATI_pn_triangles (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glPNTrianglesfATI = (PFNGLPNTRIANGLESFATIPROC)glewGetProcAddress((const GLubyte*)"glPNTrianglesfATI")) == NULL) || r; + r = ((glPNTrianglesiATI = (PFNGLPNTRIANGLESIATIPROC)glewGetProcAddress((const GLubyte*)"glPNTrianglesiATI")) == NULL) || r; + + return r; +} + +#endif /* GL_ATI_pn_triangles */ + +#ifdef GL_ATI_separate_stencil + +static GLboolean _glewInit_GL_ATI_separate_stencil (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glStencilFuncSeparateATI = (PFNGLSTENCILFUNCSEPARATEATIPROC)glewGetProcAddress((const GLubyte*)"glStencilFuncSeparateATI")) == NULL) || r; + r = ((glStencilOpSeparateATI = (PFNGLSTENCILOPSEPARATEATIPROC)glewGetProcAddress((const GLubyte*)"glStencilOpSeparateATI")) == NULL) || r; + + return r; +} + +#endif /* GL_ATI_separate_stencil */ + +#ifdef GL_ATI_shader_texture_lod + +#endif /* GL_ATI_shader_texture_lod */ + +#ifdef GL_ATI_text_fragment_shader + +#endif /* GL_ATI_text_fragment_shader */ + +#ifdef GL_ATI_texture_compression_3dc + +#endif /* GL_ATI_texture_compression_3dc */ + +#ifdef GL_ATI_texture_env_combine3 + +#endif /* GL_ATI_texture_env_combine3 */ + +#ifdef GL_ATI_texture_float + +#endif /* GL_ATI_texture_float */ + +#ifdef GL_ATI_texture_mirror_once + +#endif /* GL_ATI_texture_mirror_once */ + +#ifdef GL_ATI_vertex_array_object + +static GLboolean _glewInit_GL_ATI_vertex_array_object (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glArrayObjectATI = (PFNGLARRAYOBJECTATIPROC)glewGetProcAddress((const GLubyte*)"glArrayObjectATI")) == NULL) || r; + r = ((glFreeObjectBufferATI = (PFNGLFREEOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glFreeObjectBufferATI")) == NULL) || r; + r = ((glGetArrayObjectfvATI = (PFNGLGETARRAYOBJECTFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetArrayObjectfvATI")) == NULL) || r; + r = ((glGetArrayObjectivATI = (PFNGLGETARRAYOBJECTIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetArrayObjectivATI")) == NULL) || r; + r = ((glGetObjectBufferfvATI = (PFNGLGETOBJECTBUFFERFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetObjectBufferfvATI")) == NULL) || r; + r = ((glGetObjectBufferivATI = (PFNGLGETOBJECTBUFFERIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetObjectBufferivATI")) == NULL) || r; + r = ((glGetVariantArrayObjectfvATI = (PFNGLGETVARIANTARRAYOBJECTFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetVariantArrayObjectfvATI")) == NULL) || r; + r = ((glGetVariantArrayObjectivATI = (PFNGLGETVARIANTARRAYOBJECTIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetVariantArrayObjectivATI")) == NULL) || r; + r = ((glIsObjectBufferATI = (PFNGLISOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glIsObjectBufferATI")) == NULL) || r; + r = ((glNewObjectBufferATI = (PFNGLNEWOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glNewObjectBufferATI")) == NULL) || r; + r = ((glUpdateObjectBufferATI = (PFNGLUPDATEOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glUpdateObjectBufferATI")) == NULL) || r; + r = ((glVariantArrayObjectATI = (PFNGLVARIANTARRAYOBJECTATIPROC)glewGetProcAddress((const GLubyte*)"glVariantArrayObjectATI")) == NULL) || r; + + return r; +} + +#endif /* GL_ATI_vertex_array_object */ + +#ifdef GL_ATI_vertex_attrib_array_object + +static GLboolean _glewInit_GL_ATI_vertex_attrib_array_object (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetVertexAttribArrayObjectfvATI = (PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribArrayObjectfvATI")) == NULL) || r; + r = ((glGetVertexAttribArrayObjectivATI = (PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribArrayObjectivATI")) == NULL) || r; + r = ((glVertexAttribArrayObjectATI = (PFNGLVERTEXATTRIBARRAYOBJECTATIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribArrayObjectATI")) == NULL) || r; + + return r; +} + +#endif /* GL_ATI_vertex_attrib_array_object */ + +#ifdef GL_ATI_vertex_streams + +static GLboolean _glewInit_GL_ATI_vertex_streams (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glClientActiveVertexStreamATI = (PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC)glewGetProcAddress((const GLubyte*)"glClientActiveVertexStreamATI")) == NULL) || r; + r = ((glNormalStream3bATI = (PFNGLNORMALSTREAM3BATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3bATI")) == NULL) || r; + r = ((glNormalStream3bvATI = (PFNGLNORMALSTREAM3BVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3bvATI")) == NULL) || r; + r = ((glNormalStream3dATI = (PFNGLNORMALSTREAM3DATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3dATI")) == NULL) || r; + r = ((glNormalStream3dvATI = (PFNGLNORMALSTREAM3DVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3dvATI")) == NULL) || r; + r = ((glNormalStream3fATI = (PFNGLNORMALSTREAM3FATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3fATI")) == NULL) || r; + r = ((glNormalStream3fvATI = (PFNGLNORMALSTREAM3FVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3fvATI")) == NULL) || r; + r = ((glNormalStream3iATI = (PFNGLNORMALSTREAM3IATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3iATI")) == NULL) || r; + r = ((glNormalStream3ivATI = (PFNGLNORMALSTREAM3IVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3ivATI")) == NULL) || r; + r = ((glNormalStream3sATI = (PFNGLNORMALSTREAM3SATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3sATI")) == NULL) || r; + r = ((glNormalStream3svATI = (PFNGLNORMALSTREAM3SVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3svATI")) == NULL) || r; + r = ((glVertexBlendEnvfATI = (PFNGLVERTEXBLENDENVFATIPROC)glewGetProcAddress((const GLubyte*)"glVertexBlendEnvfATI")) == NULL) || r; + r = ((glVertexBlendEnviATI = (PFNGLVERTEXBLENDENVIATIPROC)glewGetProcAddress((const GLubyte*)"glVertexBlendEnviATI")) == NULL) || r; + r = ((glVertexStream2dATI = (PFNGLVERTEXSTREAM2DATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2dATI")) == NULL) || r; + r = ((glVertexStream2dvATI = (PFNGLVERTEXSTREAM2DVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2dvATI")) == NULL) || r; + r = ((glVertexStream2fATI = (PFNGLVERTEXSTREAM2FATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2fATI")) == NULL) || r; + r = ((glVertexStream2fvATI = (PFNGLVERTEXSTREAM2FVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2fvATI")) == NULL) || r; + r = ((glVertexStream2iATI = (PFNGLVERTEXSTREAM2IATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2iATI")) == NULL) || r; + r = ((glVertexStream2ivATI = (PFNGLVERTEXSTREAM2IVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2ivATI")) == NULL) || r; + r = ((glVertexStream2sATI = (PFNGLVERTEXSTREAM2SATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2sATI")) == NULL) || r; + r = ((glVertexStream2svATI = (PFNGLVERTEXSTREAM2SVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2svATI")) == NULL) || r; + r = ((glVertexStream3dATI = (PFNGLVERTEXSTREAM3DATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3dATI")) == NULL) || r; + r = ((glVertexStream3dvATI = (PFNGLVERTEXSTREAM3DVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3dvATI")) == NULL) || r; + r = ((glVertexStream3fATI = (PFNGLVERTEXSTREAM3FATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3fATI")) == NULL) || r; + r = ((glVertexStream3fvATI = (PFNGLVERTEXSTREAM3FVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3fvATI")) == NULL) || r; + r = ((glVertexStream3iATI = (PFNGLVERTEXSTREAM3IATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3iATI")) == NULL) || r; + r = ((glVertexStream3ivATI = (PFNGLVERTEXSTREAM3IVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3ivATI")) == NULL) || r; + r = ((glVertexStream3sATI = (PFNGLVERTEXSTREAM3SATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3sATI")) == NULL) || r; + r = ((glVertexStream3svATI = (PFNGLVERTEXSTREAM3SVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3svATI")) == NULL) || r; + r = ((glVertexStream4dATI = (PFNGLVERTEXSTREAM4DATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4dATI")) == NULL) || r; + r = ((glVertexStream4dvATI = (PFNGLVERTEXSTREAM4DVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4dvATI")) == NULL) || r; + r = ((glVertexStream4fATI = (PFNGLVERTEXSTREAM4FATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4fATI")) == NULL) || r; + r = ((glVertexStream4fvATI = (PFNGLVERTEXSTREAM4FVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4fvATI")) == NULL) || r; + r = ((glVertexStream4iATI = (PFNGLVERTEXSTREAM4IATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4iATI")) == NULL) || r; + r = ((glVertexStream4ivATI = (PFNGLVERTEXSTREAM4IVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4ivATI")) == NULL) || r; + r = ((glVertexStream4sATI = (PFNGLVERTEXSTREAM4SATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4sATI")) == NULL) || r; + r = ((glVertexStream4svATI = (PFNGLVERTEXSTREAM4SVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4svATI")) == NULL) || r; + + return r; +} + +#endif /* GL_ATI_vertex_streams */ + +#ifdef GL_EXT_422_pixels + +#endif /* GL_EXT_422_pixels */ + +#ifdef GL_EXT_Cg_shader + +#endif /* GL_EXT_Cg_shader */ + +#ifdef GL_EXT_abgr + +#endif /* GL_EXT_abgr */ + +#ifdef GL_EXT_bgra + +#endif /* GL_EXT_bgra */ + +#ifdef GL_EXT_bindable_uniform + +static GLboolean _glewInit_GL_EXT_bindable_uniform (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetUniformBufferSizeEXT = (PFNGLGETUNIFORMBUFFERSIZEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetUniformBufferSizeEXT")) == NULL) || r; + r = ((glGetUniformOffsetEXT = (PFNGLGETUNIFORMOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glGetUniformOffsetEXT")) == NULL) || r; + r = ((glUniformBufferEXT = (PFNGLUNIFORMBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glUniformBufferEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_bindable_uniform */ + +#ifdef GL_EXT_blend_color + +static GLboolean _glewInit_GL_EXT_blend_color (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBlendColorEXT = (PFNGLBLENDCOLOREXTPROC)glewGetProcAddress((const GLubyte*)"glBlendColorEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_blend_color */ + +#ifdef GL_EXT_blend_equation_separate + +static GLboolean _glewInit_GL_EXT_blend_equation_separate (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBlendEquationSeparateEXT = (PFNGLBLENDEQUATIONSEPARATEEXTPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationSeparateEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_blend_equation_separate */ + +#ifdef GL_EXT_blend_func_separate + +static GLboolean _glewInit_GL_EXT_blend_func_separate (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBlendFuncSeparateEXT = (PFNGLBLENDFUNCSEPARATEEXTPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncSeparateEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_blend_func_separate */ + +#ifdef GL_EXT_blend_logic_op + +#endif /* GL_EXT_blend_logic_op */ + +#ifdef GL_EXT_blend_minmax + +static GLboolean _glewInit_GL_EXT_blend_minmax (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBlendEquationEXT = (PFNGLBLENDEQUATIONEXTPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_blend_minmax */ + +#ifdef GL_EXT_blend_subtract + +#endif /* GL_EXT_blend_subtract */ + +#ifdef GL_EXT_clip_volume_hint + +#endif /* GL_EXT_clip_volume_hint */ + +#ifdef GL_EXT_cmyka + +#endif /* GL_EXT_cmyka */ + +#ifdef GL_EXT_color_subtable + +static GLboolean _glewInit_GL_EXT_color_subtable (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glColorSubTableEXT = (PFNGLCOLORSUBTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"glColorSubTableEXT")) == NULL) || r; + r = ((glCopyColorSubTableEXT = (PFNGLCOPYCOLORSUBTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyColorSubTableEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_color_subtable */ + +#ifdef GL_EXT_compiled_vertex_array + +static GLboolean _glewInit_GL_EXT_compiled_vertex_array (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glLockArraysEXT = (PFNGLLOCKARRAYSEXTPROC)glewGetProcAddress((const GLubyte*)"glLockArraysEXT")) == NULL) || r; + r = ((glUnlockArraysEXT = (PFNGLUNLOCKARRAYSEXTPROC)glewGetProcAddress((const GLubyte*)"glUnlockArraysEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_compiled_vertex_array */ + +#ifdef GL_EXT_convolution + +static GLboolean _glewInit_GL_EXT_convolution (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glConvolutionFilter1DEXT = (PFNGLCONVOLUTIONFILTER1DEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionFilter1DEXT")) == NULL) || r; + r = ((glConvolutionFilter2DEXT = (PFNGLCONVOLUTIONFILTER2DEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionFilter2DEXT")) == NULL) || r; + r = ((glConvolutionParameterfEXT = (PFNGLCONVOLUTIONPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterfEXT")) == NULL) || r; + r = ((glConvolutionParameterfvEXT = (PFNGLCONVOLUTIONPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterfvEXT")) == NULL) || r; + r = ((glConvolutionParameteriEXT = (PFNGLCONVOLUTIONPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameteriEXT")) == NULL) || r; + r = ((glConvolutionParameterivEXT = (PFNGLCONVOLUTIONPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterivEXT")) == NULL) || r; + r = ((glCopyConvolutionFilter1DEXT = (PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyConvolutionFilter1DEXT")) == NULL) || r; + r = ((glCopyConvolutionFilter2DEXT = (PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyConvolutionFilter2DEXT")) == NULL) || r; + r = ((glGetConvolutionFilterEXT = (PFNGLGETCONVOLUTIONFILTEREXTPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionFilterEXT")) == NULL) || r; + r = ((glGetConvolutionParameterfvEXT = (PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionParameterfvEXT")) == NULL) || r; + r = ((glGetConvolutionParameterivEXT = (PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionParameterivEXT")) == NULL) || r; + r = ((glGetSeparableFilterEXT = (PFNGLGETSEPARABLEFILTEREXTPROC)glewGetProcAddress((const GLubyte*)"glGetSeparableFilterEXT")) == NULL) || r; + r = ((glSeparableFilter2DEXT = (PFNGLSEPARABLEFILTER2DEXTPROC)glewGetProcAddress((const GLubyte*)"glSeparableFilter2DEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_convolution */ + +#ifdef GL_EXT_coordinate_frame + +static GLboolean _glewInit_GL_EXT_coordinate_frame (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBinormalPointerEXT = (PFNGLBINORMALPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glBinormalPointerEXT")) == NULL) || r; + r = ((glTangentPointerEXT = (PFNGLTANGENTPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glTangentPointerEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_coordinate_frame */ + +#ifdef GL_EXT_copy_texture + +static GLboolean _glewInit_GL_EXT_copy_texture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glCopyTexImage1DEXT = (PFNGLCOPYTEXIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexImage1DEXT")) == NULL) || r; + r = ((glCopyTexImage2DEXT = (PFNGLCOPYTEXIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexImage2DEXT")) == NULL) || r; + r = ((glCopyTexSubImage1DEXT = (PFNGLCOPYTEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexSubImage1DEXT")) == NULL) || r; + r = ((glCopyTexSubImage2DEXT = (PFNGLCOPYTEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexSubImage2DEXT")) == NULL) || r; + r = ((glCopyTexSubImage3DEXT = (PFNGLCOPYTEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexSubImage3DEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_copy_texture */ + +#ifdef GL_EXT_cull_vertex + +static GLboolean _glewInit_GL_EXT_cull_vertex (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glCullParameterdvEXT = (PFNGLCULLPARAMETERDVEXTPROC)glewGetProcAddress((const GLubyte*)"glCullParameterdvEXT")) == NULL) || r; + r = ((glCullParameterfvEXT = (PFNGLCULLPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glCullParameterfvEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_cull_vertex */ + +#ifdef GL_EXT_depth_bounds_test + +static GLboolean _glewInit_GL_EXT_depth_bounds_test (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDepthBoundsEXT = (PFNGLDEPTHBOUNDSEXTPROC)glewGetProcAddress((const GLubyte*)"glDepthBoundsEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_depth_bounds_test */ + +#ifdef GL_EXT_draw_buffers2 + +static GLboolean _glewInit_GL_EXT_draw_buffers2 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glColorMaskIndexedEXT = (PFNGLCOLORMASKINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glColorMaskIndexedEXT")) == NULL) || r; + r = ((glDisableIndexedEXT = (PFNGLDISABLEINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableIndexedEXT")) == NULL) || r; + r = ((glEnableIndexedEXT = (PFNGLENABLEINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableIndexedEXT")) == NULL) || r; + r = ((glGetBooleanIndexedvEXT = (PFNGLGETBOOLEANINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetBooleanIndexedvEXT")) == NULL) || r; + r = ((glGetIntegerIndexedvEXT = (PFNGLGETINTEGERINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetIntegerIndexedvEXT")) == NULL) || r; + r = ((glIsEnabledIndexedEXT = (PFNGLISENABLEDINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glIsEnabledIndexedEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_draw_buffers2 */ + +#ifdef GL_EXT_draw_instanced + +static GLboolean _glewInit_GL_EXT_draw_instanced (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDrawArraysInstancedEXT = (PFNGLDRAWARRAYSINSTANCEDEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysInstancedEXT")) == NULL) || r; + r = ((glDrawElementsInstancedEXT = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_draw_instanced */ + +#ifdef GL_EXT_draw_range_elements + +static GLboolean _glewInit_GL_EXT_draw_range_elements (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDrawRangeElementsEXT = (PFNGLDRAWRANGEELEMENTSEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElementsEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_draw_range_elements */ + +#ifdef GL_EXT_fog_coord + +static GLboolean _glewInit_GL_EXT_fog_coord (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFogCoordPointerEXT = (PFNGLFOGCOORDPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoordPointerEXT")) == NULL) || r; + r = ((glFogCoorddEXT = (PFNGLFOGCOORDDEXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoorddEXT")) == NULL) || r; + r = ((glFogCoorddvEXT = (PFNGLFOGCOORDDVEXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoorddvEXT")) == NULL) || r; + r = ((glFogCoordfEXT = (PFNGLFOGCOORDFEXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoordfEXT")) == NULL) || r; + r = ((glFogCoordfvEXT = (PFNGLFOGCOORDFVEXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoordfvEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_fog_coord */ + +#ifdef GL_EXT_fragment_lighting + +static GLboolean _glewInit_GL_EXT_fragment_lighting (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFragmentColorMaterialEXT = (PFNGLFRAGMENTCOLORMATERIALEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentColorMaterialEXT")) == NULL) || r; + r = ((glFragmentLightModelfEXT = (PFNGLFRAGMENTLIGHTMODELFEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelfEXT")) == NULL) || r; + r = ((glFragmentLightModelfvEXT = (PFNGLFRAGMENTLIGHTMODELFVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelfvEXT")) == NULL) || r; + r = ((glFragmentLightModeliEXT = (PFNGLFRAGMENTLIGHTMODELIEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModeliEXT")) == NULL) || r; + r = ((glFragmentLightModelivEXT = (PFNGLFRAGMENTLIGHTMODELIVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelivEXT")) == NULL) || r; + r = ((glFragmentLightfEXT = (PFNGLFRAGMENTLIGHTFEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightfEXT")) == NULL) || r; + r = ((glFragmentLightfvEXT = (PFNGLFRAGMENTLIGHTFVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightfvEXT")) == NULL) || r; + r = ((glFragmentLightiEXT = (PFNGLFRAGMENTLIGHTIEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightiEXT")) == NULL) || r; + r = ((glFragmentLightivEXT = (PFNGLFRAGMENTLIGHTIVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightivEXT")) == NULL) || r; + r = ((glFragmentMaterialfEXT = (PFNGLFRAGMENTMATERIALFEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialfEXT")) == NULL) || r; + r = ((glFragmentMaterialfvEXT = (PFNGLFRAGMENTMATERIALFVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialfvEXT")) == NULL) || r; + r = ((glFragmentMaterialiEXT = (PFNGLFRAGMENTMATERIALIEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialiEXT")) == NULL) || r; + r = ((glFragmentMaterialivEXT = (PFNGLFRAGMENTMATERIALIVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialivEXT")) == NULL) || r; + r = ((glGetFragmentLightfvEXT = (PFNGLGETFRAGMENTLIGHTFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentLightfvEXT")) == NULL) || r; + r = ((glGetFragmentLightivEXT = (PFNGLGETFRAGMENTLIGHTIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentLightivEXT")) == NULL) || r; + r = ((glGetFragmentMaterialfvEXT = (PFNGLGETFRAGMENTMATERIALFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentMaterialfvEXT")) == NULL) || r; + r = ((glGetFragmentMaterialivEXT = (PFNGLGETFRAGMENTMATERIALIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentMaterialivEXT")) == NULL) || r; + r = ((glLightEnviEXT = (PFNGLLIGHTENVIEXTPROC)glewGetProcAddress((const GLubyte*)"glLightEnviEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_fragment_lighting */ + +#ifdef GL_EXT_framebuffer_blit + +static GLboolean _glewInit_GL_EXT_framebuffer_blit (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBlitFramebufferEXT = (PFNGLBLITFRAMEBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glBlitFramebufferEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_framebuffer_blit */ + +#ifdef GL_EXT_framebuffer_multisample + +static GLboolean _glewInit_GL_EXT_framebuffer_multisample (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glRenderbufferStorageMultisampleEXT = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageMultisampleEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_framebuffer_multisample */ + +#ifdef GL_EXT_framebuffer_object + +static GLboolean _glewInit_GL_EXT_framebuffer_object (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindFramebufferEXT")) == NULL) || r; + r = ((glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindRenderbufferEXT")) == NULL) || r; + r = ((glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)glewGetProcAddress((const GLubyte*)"glCheckFramebufferStatusEXT")) == NULL) || r; + r = ((glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteFramebuffersEXT")) == NULL) || r; + r = ((glDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteRenderbuffersEXT")) == NULL) || r; + r = ((glFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferRenderbufferEXT")) == NULL) || r; + r = ((glFramebufferTexture1DEXT = (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture1DEXT")) == NULL) || r; + r = ((glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture2DEXT")) == NULL) || r; + r = ((glFramebufferTexture3DEXT = (PFNGLFRAMEBUFFERTEXTURE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture3DEXT")) == NULL) || r; + r = ((glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glGenFramebuffersEXT")) == NULL) || r; + r = ((glGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glGenRenderbuffersEXT")) == NULL) || r; + r = ((glGenerateMipmapEXT = (PFNGLGENERATEMIPMAPEXTPROC)glewGetProcAddress((const GLubyte*)"glGenerateMipmapEXT")) == NULL) || r; + r = ((glGetFramebufferAttachmentParameterivEXT = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFramebufferAttachmentParameterivEXT")) == NULL) || r; + r = ((glGetRenderbufferParameterivEXT = (PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetRenderbufferParameterivEXT")) == NULL) || r; + r = ((glIsFramebufferEXT = (PFNGLISFRAMEBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glIsFramebufferEXT")) == NULL) || r; + r = ((glIsRenderbufferEXT = (PFNGLISRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glIsRenderbufferEXT")) == NULL) || r; + r = ((glRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_framebuffer_object */ + +#ifdef GL_EXT_framebuffer_sRGB + +#endif /* GL_EXT_framebuffer_sRGB */ + +#ifdef GL_EXT_geometry_shader4 + +static GLboolean _glewInit_GL_EXT_geometry_shader4 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFramebufferTextureEXT = (PFNGLFRAMEBUFFERTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureEXT")) == NULL) || r; + r = ((glFramebufferTextureFaceEXT = (PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureFaceEXT")) == NULL) || r; + r = ((glFramebufferTextureLayerEXT = (PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureLayerEXT")) == NULL) || r; + r = ((glProgramParameteriEXT = (PFNGLPROGRAMPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramParameteriEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_geometry_shader4 */ + +#ifdef GL_EXT_gpu_program_parameters + +static GLboolean _glewInit_GL_EXT_gpu_program_parameters (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glProgramEnvParameters4fvEXT = (PFNGLPROGRAMENVPARAMETERS4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameters4fvEXT")) == NULL) || r; + r = ((glProgramLocalParameters4fvEXT = (PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameters4fvEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_gpu_program_parameters */ + +#ifdef GL_EXT_gpu_shader4 + +static GLboolean _glewInit_GL_EXT_gpu_shader4 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBindFragDataLocationEXT = (PFNGLBINDFRAGDATALOCATIONEXTPROC)glewGetProcAddress((const GLubyte*)"glBindFragDataLocationEXT")) == NULL) || r; + r = ((glGetFragDataLocationEXT = (PFNGLGETFRAGDATALOCATIONEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragDataLocationEXT")) == NULL) || r; + r = ((glGetUniformuivEXT = (PFNGLGETUNIFORMUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetUniformuivEXT")) == NULL) || r; + r = ((glGetVertexAttribIivEXT = (PFNGLGETVERTEXATTRIBIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribIivEXT")) == NULL) || r; + r = ((glGetVertexAttribIuivEXT = (PFNGLGETVERTEXATTRIBIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribIuivEXT")) == NULL) || r; + r = ((glUniform1uiEXT = (PFNGLUNIFORM1UIEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform1uiEXT")) == NULL) || r; + r = ((glUniform1uivEXT = (PFNGLUNIFORM1UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform1uivEXT")) == NULL) || r; + r = ((glUniform2uiEXT = (PFNGLUNIFORM2UIEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform2uiEXT")) == NULL) || r; + r = ((glUniform2uivEXT = (PFNGLUNIFORM2UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform2uivEXT")) == NULL) || r; + r = ((glUniform3uiEXT = (PFNGLUNIFORM3UIEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform3uiEXT")) == NULL) || r; + r = ((glUniform3uivEXT = (PFNGLUNIFORM3UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform3uivEXT")) == NULL) || r; + r = ((glUniform4uiEXT = (PFNGLUNIFORM4UIEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform4uiEXT")) == NULL) || r; + r = ((glUniform4uivEXT = (PFNGLUNIFORM4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform4uivEXT")) == NULL) || r; + r = ((glVertexAttribI1iEXT = (PFNGLVERTEXATTRIBI1IEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1iEXT")) == NULL) || r; + r = ((glVertexAttribI1ivEXT = (PFNGLVERTEXATTRIBI1IVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1ivEXT")) == NULL) || r; + r = ((glVertexAttribI1uiEXT = (PFNGLVERTEXATTRIBI1UIEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1uiEXT")) == NULL) || r; + r = ((glVertexAttribI1uivEXT = (PFNGLVERTEXATTRIBI1UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1uivEXT")) == NULL) || r; + r = ((glVertexAttribI2iEXT = (PFNGLVERTEXATTRIBI2IEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2iEXT")) == NULL) || r; + r = ((glVertexAttribI2ivEXT = (PFNGLVERTEXATTRIBI2IVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2ivEXT")) == NULL) || r; + r = ((glVertexAttribI2uiEXT = (PFNGLVERTEXATTRIBI2UIEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2uiEXT")) == NULL) || r; + r = ((glVertexAttribI2uivEXT = (PFNGLVERTEXATTRIBI2UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2uivEXT")) == NULL) || r; + r = ((glVertexAttribI3iEXT = (PFNGLVERTEXATTRIBI3IEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3iEXT")) == NULL) || r; + r = ((glVertexAttribI3ivEXT = (PFNGLVERTEXATTRIBI3IVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3ivEXT")) == NULL) || r; + r = ((glVertexAttribI3uiEXT = (PFNGLVERTEXATTRIBI3UIEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3uiEXT")) == NULL) || r; + r = ((glVertexAttribI3uivEXT = (PFNGLVERTEXATTRIBI3UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3uivEXT")) == NULL) || r; + r = ((glVertexAttribI4bvEXT = (PFNGLVERTEXATTRIBI4BVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4bvEXT")) == NULL) || r; + r = ((glVertexAttribI4iEXT = (PFNGLVERTEXATTRIBI4IEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4iEXT")) == NULL) || r; + r = ((glVertexAttribI4ivEXT = (PFNGLVERTEXATTRIBI4IVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4ivEXT")) == NULL) || r; + r = ((glVertexAttribI4svEXT = (PFNGLVERTEXATTRIBI4SVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4svEXT")) == NULL) || r; + r = ((glVertexAttribI4ubvEXT = (PFNGLVERTEXATTRIBI4UBVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4ubvEXT")) == NULL) || r; + r = ((glVertexAttribI4uiEXT = (PFNGLVERTEXATTRIBI4UIEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4uiEXT")) == NULL) || r; + r = ((glVertexAttribI4uivEXT = (PFNGLVERTEXATTRIBI4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4uivEXT")) == NULL) || r; + r = ((glVertexAttribI4usvEXT = (PFNGLVERTEXATTRIBI4USVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4usvEXT")) == NULL) || r; + r = ((glVertexAttribIPointerEXT = (PFNGLVERTEXATTRIBIPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribIPointerEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_gpu_shader4 */ + +#ifdef GL_EXT_histogram + +static GLboolean _glewInit_GL_EXT_histogram (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetHistogramEXT = (PFNGLGETHISTOGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramEXT")) == NULL) || r; + r = ((glGetHistogramParameterfvEXT = (PFNGLGETHISTOGRAMPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramParameterfvEXT")) == NULL) || r; + r = ((glGetHistogramParameterivEXT = (PFNGLGETHISTOGRAMPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramParameterivEXT")) == NULL) || r; + r = ((glGetMinmaxEXT = (PFNGLGETMINMAXEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxEXT")) == NULL) || r; + r = ((glGetMinmaxParameterfvEXT = (PFNGLGETMINMAXPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxParameterfvEXT")) == NULL) || r; + r = ((glGetMinmaxParameterivEXT = (PFNGLGETMINMAXPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxParameterivEXT")) == NULL) || r; + r = ((glHistogramEXT = (PFNGLHISTOGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glHistogramEXT")) == NULL) || r; + r = ((glMinmaxEXT = (PFNGLMINMAXEXTPROC)glewGetProcAddress((const GLubyte*)"glMinmaxEXT")) == NULL) || r; + r = ((glResetHistogramEXT = (PFNGLRESETHISTOGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glResetHistogramEXT")) == NULL) || r; + r = ((glResetMinmaxEXT = (PFNGLRESETMINMAXEXTPROC)glewGetProcAddress((const GLubyte*)"glResetMinmaxEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_histogram */ + +#ifdef GL_EXT_index_array_formats + +#endif /* GL_EXT_index_array_formats */ + +#ifdef GL_EXT_index_func + +static GLboolean _glewInit_GL_EXT_index_func (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glIndexFuncEXT = (PFNGLINDEXFUNCEXTPROC)glewGetProcAddress((const GLubyte*)"glIndexFuncEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_index_func */ + +#ifdef GL_EXT_index_material + +static GLboolean _glewInit_GL_EXT_index_material (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glIndexMaterialEXT = (PFNGLINDEXMATERIALEXTPROC)glewGetProcAddress((const GLubyte*)"glIndexMaterialEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_index_material */ + +#ifdef GL_EXT_index_texture + +#endif /* GL_EXT_index_texture */ + +#ifdef GL_EXT_light_texture + +static GLboolean _glewInit_GL_EXT_light_texture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glApplyTextureEXT = (PFNGLAPPLYTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glApplyTextureEXT")) == NULL) || r; + r = ((glTextureLightEXT = (PFNGLTEXTURELIGHTEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureLightEXT")) == NULL) || r; + r = ((glTextureMaterialEXT = (PFNGLTEXTUREMATERIALEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureMaterialEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_light_texture */ + +#ifdef GL_EXT_misc_attribute + +#endif /* GL_EXT_misc_attribute */ + +#ifdef GL_EXT_multi_draw_arrays + +static GLboolean _glewInit_GL_EXT_multi_draw_arrays (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glMultiDrawArraysEXT = (PFNGLMULTIDRAWARRAYSEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArraysEXT")) == NULL) || r; + r = ((glMultiDrawElementsEXT = (PFNGLMULTIDRAWELEMENTSEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementsEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_multi_draw_arrays */ + +#ifdef GL_EXT_multisample + +static GLboolean _glewInit_GL_EXT_multisample (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glSampleMaskEXT = (PFNGLSAMPLEMASKEXTPROC)glewGetProcAddress((const GLubyte*)"glSampleMaskEXT")) == NULL) || r; + r = ((glSamplePatternEXT = (PFNGLSAMPLEPATTERNEXTPROC)glewGetProcAddress((const GLubyte*)"glSamplePatternEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_multisample */ + +#ifdef GL_EXT_packed_depth_stencil + +#endif /* GL_EXT_packed_depth_stencil */ + +#ifdef GL_EXT_packed_float + +#endif /* GL_EXT_packed_float */ + +#ifdef GL_EXT_packed_pixels + +#endif /* GL_EXT_packed_pixels */ + +#ifdef GL_EXT_paletted_texture + +static GLboolean _glewInit_GL_EXT_paletted_texture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glColorTableEXT = (PFNGLCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"glColorTableEXT")) == NULL) || r; + r = ((glGetColorTableEXT = (PFNGLGETCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableEXT")) == NULL) || r; + r = ((glGetColorTableParameterfvEXT = (PFNGLGETCOLORTABLEPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterfvEXT")) == NULL) || r; + r = ((glGetColorTableParameterivEXT = (PFNGLGETCOLORTABLEPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterivEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_paletted_texture */ + +#ifdef GL_EXT_pixel_buffer_object + +#endif /* GL_EXT_pixel_buffer_object */ + +#ifdef GL_EXT_pixel_transform + +static GLboolean _glewInit_GL_EXT_pixel_transform (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetPixelTransformParameterfvEXT = (PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetPixelTransformParameterfvEXT")) == NULL) || r; + r = ((glGetPixelTransformParameterivEXT = (PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetPixelTransformParameterivEXT")) == NULL) || r; + r = ((glPixelTransformParameterfEXT = (PFNGLPIXELTRANSFORMPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glPixelTransformParameterfEXT")) == NULL) || r; + r = ((glPixelTransformParameterfvEXT = (PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glPixelTransformParameterfvEXT")) == NULL) || r; + r = ((glPixelTransformParameteriEXT = (PFNGLPIXELTRANSFORMPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glPixelTransformParameteriEXT")) == NULL) || r; + r = ((glPixelTransformParameterivEXT = (PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glPixelTransformParameterivEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_pixel_transform */ + +#ifdef GL_EXT_pixel_transform_color_table + +#endif /* GL_EXT_pixel_transform_color_table */ + +#ifdef GL_EXT_point_parameters + +static GLboolean _glewInit_GL_EXT_point_parameters (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glPointParameterfEXT = (PFNGLPOINTPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfEXT")) == NULL) || r; + r = ((glPointParameterfvEXT = (PFNGLPOINTPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfvEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_point_parameters */ + +#ifdef GL_EXT_polygon_offset + +static GLboolean _glewInit_GL_EXT_polygon_offset (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glPolygonOffsetEXT = (PFNGLPOLYGONOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glPolygonOffsetEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_polygon_offset */ + +#ifdef GL_EXT_rescale_normal + +#endif /* GL_EXT_rescale_normal */ + +#ifdef GL_EXT_scene_marker + +static GLboolean _glewInit_GL_EXT_scene_marker (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBeginSceneEXT = (PFNGLBEGINSCENEEXTPROC)glewGetProcAddress((const GLubyte*)"glBeginSceneEXT")) == NULL) || r; + r = ((glEndSceneEXT = (PFNGLENDSCENEEXTPROC)glewGetProcAddress((const GLubyte*)"glEndSceneEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_scene_marker */ + +#ifdef GL_EXT_secondary_color + +static GLboolean _glewInit_GL_EXT_secondary_color (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glSecondaryColor3bEXT = (PFNGLSECONDARYCOLOR3BEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3bEXT")) == NULL) || r; + r = ((glSecondaryColor3bvEXT = (PFNGLSECONDARYCOLOR3BVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3bvEXT")) == NULL) || r; + r = ((glSecondaryColor3dEXT = (PFNGLSECONDARYCOLOR3DEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3dEXT")) == NULL) || r; + r = ((glSecondaryColor3dvEXT = (PFNGLSECONDARYCOLOR3DVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3dvEXT")) == NULL) || r; + r = ((glSecondaryColor3fEXT = (PFNGLSECONDARYCOLOR3FEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3fEXT")) == NULL) || r; + r = ((glSecondaryColor3fvEXT = (PFNGLSECONDARYCOLOR3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3fvEXT")) == NULL) || r; + r = ((glSecondaryColor3iEXT = (PFNGLSECONDARYCOLOR3IEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3iEXT")) == NULL) || r; + r = ((glSecondaryColor3ivEXT = (PFNGLSECONDARYCOLOR3IVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ivEXT")) == NULL) || r; + r = ((glSecondaryColor3sEXT = (PFNGLSECONDARYCOLOR3SEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3sEXT")) == NULL) || r; + r = ((glSecondaryColor3svEXT = (PFNGLSECONDARYCOLOR3SVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3svEXT")) == NULL) || r; + r = ((glSecondaryColor3ubEXT = (PFNGLSECONDARYCOLOR3UBEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ubEXT")) == NULL) || r; + r = ((glSecondaryColor3ubvEXT = (PFNGLSECONDARYCOLOR3UBVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ubvEXT")) == NULL) || r; + r = ((glSecondaryColor3uiEXT = (PFNGLSECONDARYCOLOR3UIEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3uiEXT")) == NULL) || r; + r = ((glSecondaryColor3uivEXT = (PFNGLSECONDARYCOLOR3UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3uivEXT")) == NULL) || r; + r = ((glSecondaryColor3usEXT = (PFNGLSECONDARYCOLOR3USEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3usEXT")) == NULL) || r; + r = ((glSecondaryColor3usvEXT = (PFNGLSECONDARYCOLOR3USVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3usvEXT")) == NULL) || r; + r = ((glSecondaryColorPointerEXT = (PFNGLSECONDARYCOLORPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorPointerEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_secondary_color */ + +#ifdef GL_EXT_separate_specular_color + +#endif /* GL_EXT_separate_specular_color */ + +#ifdef GL_EXT_shadow_funcs + +#endif /* GL_EXT_shadow_funcs */ + +#ifdef GL_EXT_shared_texture_palette + +#endif /* GL_EXT_shared_texture_palette */ + +#ifdef GL_EXT_stencil_clear_tag + +#endif /* GL_EXT_stencil_clear_tag */ + +#ifdef GL_EXT_stencil_two_side + +static GLboolean _glewInit_GL_EXT_stencil_two_side (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glActiveStencilFaceEXT = (PFNGLACTIVESTENCILFACEEXTPROC)glewGetProcAddress((const GLubyte*)"glActiveStencilFaceEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_stencil_two_side */ + +#ifdef GL_EXT_stencil_wrap + +#endif /* GL_EXT_stencil_wrap */ + +#ifdef GL_EXT_subtexture + +static GLboolean _glewInit_GL_EXT_subtexture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTexSubImage1DEXT = (PFNGLTEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage1DEXT")) == NULL) || r; + r = ((glTexSubImage2DEXT = (PFNGLTEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage2DEXT")) == NULL) || r; + r = ((glTexSubImage3DEXT = (PFNGLTEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage3DEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_subtexture */ + +#ifdef GL_EXT_texture + +#endif /* GL_EXT_texture */ + +#ifdef GL_EXT_texture3D + +static GLboolean _glewInit_GL_EXT_texture3D (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTexImage3DEXT = (PFNGLTEXIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTexImage3DEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_texture3D */ + +#ifdef GL_EXT_texture_array + +#endif /* GL_EXT_texture_array */ + +#ifdef GL_EXT_texture_buffer_object + +static GLboolean _glewInit_GL_EXT_texture_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTexBufferEXT = (PFNGLTEXBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glTexBufferEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_texture_buffer_object */ + +#ifdef GL_EXT_texture_compression_dxt1 + +#endif /* GL_EXT_texture_compression_dxt1 */ + +#ifdef GL_EXT_texture_compression_latc + +#endif /* GL_EXT_texture_compression_latc */ + +#ifdef GL_EXT_texture_compression_rgtc + +#endif /* GL_EXT_texture_compression_rgtc */ + +#ifdef GL_EXT_texture_compression_s3tc + +#endif /* GL_EXT_texture_compression_s3tc */ + +#ifdef GL_EXT_texture_cube_map + +#endif /* GL_EXT_texture_cube_map */ + +#ifdef GL_EXT_texture_edge_clamp + +#endif /* GL_EXT_texture_edge_clamp */ + +#ifdef GL_EXT_texture_env + +#endif /* GL_EXT_texture_env */ + +#ifdef GL_EXT_texture_env_add + +#endif /* GL_EXT_texture_env_add */ + +#ifdef GL_EXT_texture_env_combine + +#endif /* GL_EXT_texture_env_combine */ + +#ifdef GL_EXT_texture_env_dot3 + +#endif /* GL_EXT_texture_env_dot3 */ + +#ifdef GL_EXT_texture_filter_anisotropic + +#endif /* GL_EXT_texture_filter_anisotropic */ + +#ifdef GL_EXT_texture_integer + +static GLboolean _glewInit_GL_EXT_texture_integer (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glClearColorIiEXT = (PFNGLCLEARCOLORIIEXTPROC)glewGetProcAddress((const GLubyte*)"glClearColorIiEXT")) == NULL) || r; + r = ((glClearColorIuiEXT = (PFNGLCLEARCOLORIUIEXTPROC)glewGetProcAddress((const GLubyte*)"glClearColorIuiEXT")) == NULL) || r; + r = ((glGetTexParameterIivEXT = (PFNGLGETTEXPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterIivEXT")) == NULL) || r; + r = ((glGetTexParameterIuivEXT = (PFNGLGETTEXPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterIuivEXT")) == NULL) || r; + r = ((glTexParameterIivEXT = (PFNGLTEXPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTexParameterIivEXT")) == NULL) || r; + r = ((glTexParameterIuivEXT = (PFNGLTEXPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTexParameterIuivEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_texture_integer */ + +#ifdef GL_EXT_texture_lod_bias + +#endif /* GL_EXT_texture_lod_bias */ + +#ifdef GL_EXT_texture_mirror_clamp + +#endif /* GL_EXT_texture_mirror_clamp */ + +#ifdef GL_EXT_texture_object + +static GLboolean _glewInit_GL_EXT_texture_object (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glAreTexturesResidentEXT = (PFNGLARETEXTURESRESIDENTEXTPROC)glewGetProcAddress((const GLubyte*)"glAreTexturesResidentEXT")) == NULL) || r; + r = ((glBindTextureEXT = (PFNGLBINDTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glBindTextureEXT")) == NULL) || r; + r = ((glDeleteTexturesEXT = (PFNGLDELETETEXTURESEXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteTexturesEXT")) == NULL) || r; + r = ((glGenTexturesEXT = (PFNGLGENTEXTURESEXTPROC)glewGetProcAddress((const GLubyte*)"glGenTexturesEXT")) == NULL) || r; + r = ((glIsTextureEXT = (PFNGLISTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glIsTextureEXT")) == NULL) || r; + r = ((glPrioritizeTexturesEXT = (PFNGLPRIORITIZETEXTURESEXTPROC)glewGetProcAddress((const GLubyte*)"glPrioritizeTexturesEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_texture_object */ + +#ifdef GL_EXT_texture_perturb_normal + +static GLboolean _glewInit_GL_EXT_texture_perturb_normal (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTextureNormalEXT = (PFNGLTEXTURENORMALEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureNormalEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_texture_perturb_normal */ + +#ifdef GL_EXT_texture_rectangle + +#endif /* GL_EXT_texture_rectangle */ + +#ifdef GL_EXT_texture_sRGB + +#endif /* GL_EXT_texture_sRGB */ + +#ifdef GL_EXT_texture_shared_exponent + +#endif /* GL_EXT_texture_shared_exponent */ + +#ifdef GL_EXT_timer_query + +static GLboolean _glewInit_GL_EXT_timer_query (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetQueryObjecti64vEXT = (PFNGLGETQUERYOBJECTI64VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjecti64vEXT")) == NULL) || r; + r = ((glGetQueryObjectui64vEXT = (PFNGLGETQUERYOBJECTUI64VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectui64vEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_timer_query */ + +#ifdef GL_EXT_vertex_array + +static GLboolean _glewInit_GL_EXT_vertex_array (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glArrayElementEXT = (PFNGLARRAYELEMENTEXTPROC)glewGetProcAddress((const GLubyte*)"glArrayElementEXT")) == NULL) || r; + r = ((glColorPointerEXT = (PFNGLCOLORPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glColorPointerEXT")) == NULL) || r; + r = ((glDrawArraysEXT = (PFNGLDRAWARRAYSEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysEXT")) == NULL) || r; + r = ((glEdgeFlagPointerEXT = (PFNGLEDGEFLAGPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glEdgeFlagPointerEXT")) == NULL) || r; + r = ((glGetPointervEXT = (PFNGLGETPOINTERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetPointervEXT")) == NULL) || r; + r = ((glIndexPointerEXT = (PFNGLINDEXPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glIndexPointerEXT")) == NULL) || r; + r = ((glNormalPointerEXT = (PFNGLNORMALPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glNormalPointerEXT")) == NULL) || r; + r = ((glTexCoordPointerEXT = (PFNGLTEXCOORDPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glTexCoordPointerEXT")) == NULL) || r; + r = ((glVertexPointerEXT = (PFNGLVERTEXPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVertexPointerEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_vertex_array */ + +#ifdef GL_EXT_vertex_shader + +static GLboolean _glewInit_GL_EXT_vertex_shader (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBeginVertexShaderEXT = (PFNGLBEGINVERTEXSHADEREXTPROC)glewGetProcAddress((const GLubyte*)"glBeginVertexShaderEXT")) == NULL) || r; + r = ((glBindLightParameterEXT = (PFNGLBINDLIGHTPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindLightParameterEXT")) == NULL) || r; + r = ((glBindMaterialParameterEXT = (PFNGLBINDMATERIALPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindMaterialParameterEXT")) == NULL) || r; + r = ((glBindParameterEXT = (PFNGLBINDPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindParameterEXT")) == NULL) || r; + r = ((glBindTexGenParameterEXT = (PFNGLBINDTEXGENPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindTexGenParameterEXT")) == NULL) || r; + r = ((glBindTextureUnitParameterEXT = (PFNGLBINDTEXTUREUNITPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindTextureUnitParameterEXT")) == NULL) || r; + r = ((glBindVertexShaderEXT = (PFNGLBINDVERTEXSHADEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindVertexShaderEXT")) == NULL) || r; + r = ((glDeleteVertexShaderEXT = (PFNGLDELETEVERTEXSHADEREXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteVertexShaderEXT")) == NULL) || r; + r = ((glDisableVariantClientStateEXT = (PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableVariantClientStateEXT")) == NULL) || r; + r = ((glEnableVariantClientStateEXT = (PFNGLENABLEVARIANTCLIENTSTATEEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableVariantClientStateEXT")) == NULL) || r; + r = ((glEndVertexShaderEXT = (PFNGLENDVERTEXSHADEREXTPROC)glewGetProcAddress((const GLubyte*)"glEndVertexShaderEXT")) == NULL) || r; + r = ((glExtractComponentEXT = (PFNGLEXTRACTCOMPONENTEXTPROC)glewGetProcAddress((const GLubyte*)"glExtractComponentEXT")) == NULL) || r; + r = ((glGenSymbolsEXT = (PFNGLGENSYMBOLSEXTPROC)glewGetProcAddress((const GLubyte*)"glGenSymbolsEXT")) == NULL) || r; + r = ((glGenVertexShadersEXT = (PFNGLGENVERTEXSHADERSEXTPROC)glewGetProcAddress((const GLubyte*)"glGenVertexShadersEXT")) == NULL) || r; + r = ((glGetInvariantBooleanvEXT = (PFNGLGETINVARIANTBOOLEANVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetInvariantBooleanvEXT")) == NULL) || r; + r = ((glGetInvariantFloatvEXT = (PFNGLGETINVARIANTFLOATVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetInvariantFloatvEXT")) == NULL) || r; + r = ((glGetInvariantIntegervEXT = (PFNGLGETINVARIANTINTEGERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetInvariantIntegervEXT")) == NULL) || r; + r = ((glGetLocalConstantBooleanvEXT = (PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetLocalConstantBooleanvEXT")) == NULL) || r; + r = ((glGetLocalConstantFloatvEXT = (PFNGLGETLOCALCONSTANTFLOATVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetLocalConstantFloatvEXT")) == NULL) || r; + r = ((glGetLocalConstantIntegervEXT = (PFNGLGETLOCALCONSTANTINTEGERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetLocalConstantIntegervEXT")) == NULL) || r; + r = ((glGetVariantBooleanvEXT = (PFNGLGETVARIANTBOOLEANVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVariantBooleanvEXT")) == NULL) || r; + r = ((glGetVariantFloatvEXT = (PFNGLGETVARIANTFLOATVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVariantFloatvEXT")) == NULL) || r; + r = ((glGetVariantIntegervEXT = (PFNGLGETVARIANTINTEGERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVariantIntegervEXT")) == NULL) || r; + r = ((glGetVariantPointervEXT = (PFNGLGETVARIANTPOINTERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVariantPointervEXT")) == NULL) || r; + r = ((glInsertComponentEXT = (PFNGLINSERTCOMPONENTEXTPROC)glewGetProcAddress((const GLubyte*)"glInsertComponentEXT")) == NULL) || r; + r = ((glIsVariantEnabledEXT = (PFNGLISVARIANTENABLEDEXTPROC)glewGetProcAddress((const GLubyte*)"glIsVariantEnabledEXT")) == NULL) || r; + r = ((glSetInvariantEXT = (PFNGLSETINVARIANTEXTPROC)glewGetProcAddress((const GLubyte*)"glSetInvariantEXT")) == NULL) || r; + r = ((glSetLocalConstantEXT = (PFNGLSETLOCALCONSTANTEXTPROC)glewGetProcAddress((const GLubyte*)"glSetLocalConstantEXT")) == NULL) || r; + r = ((glShaderOp1EXT = (PFNGLSHADEROP1EXTPROC)glewGetProcAddress((const GLubyte*)"glShaderOp1EXT")) == NULL) || r; + r = ((glShaderOp2EXT = (PFNGLSHADEROP2EXTPROC)glewGetProcAddress((const GLubyte*)"glShaderOp2EXT")) == NULL) || r; + r = ((glShaderOp3EXT = (PFNGLSHADEROP3EXTPROC)glewGetProcAddress((const GLubyte*)"glShaderOp3EXT")) == NULL) || r; + r = ((glSwizzleEXT = (PFNGLSWIZZLEEXTPROC)glewGetProcAddress((const GLubyte*)"glSwizzleEXT")) == NULL) || r; + r = ((glVariantPointerEXT = (PFNGLVARIANTPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVariantPointerEXT")) == NULL) || r; + r = ((glVariantbvEXT = (PFNGLVARIANTBVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantbvEXT")) == NULL) || r; + r = ((glVariantdvEXT = (PFNGLVARIANTDVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantdvEXT")) == NULL) || r; + r = ((glVariantfvEXT = (PFNGLVARIANTFVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantfvEXT")) == NULL) || r; + r = ((glVariantivEXT = (PFNGLVARIANTIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantivEXT")) == NULL) || r; + r = ((glVariantsvEXT = (PFNGLVARIANTSVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantsvEXT")) == NULL) || r; + r = ((glVariantubvEXT = (PFNGLVARIANTUBVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantubvEXT")) == NULL) || r; + r = ((glVariantuivEXT = (PFNGLVARIANTUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantuivEXT")) == NULL) || r; + r = ((glVariantusvEXT = (PFNGLVARIANTUSVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantusvEXT")) == NULL) || r; + r = ((glWriteMaskEXT = (PFNGLWRITEMASKEXTPROC)glewGetProcAddress((const GLubyte*)"glWriteMaskEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_vertex_shader */ + +#ifdef GL_EXT_vertex_weighting + +static GLboolean _glewInit_GL_EXT_vertex_weighting (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glVertexWeightPointerEXT = (PFNGLVERTEXWEIGHTPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVertexWeightPointerEXT")) == NULL) || r; + r = ((glVertexWeightfEXT = (PFNGLVERTEXWEIGHTFEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexWeightfEXT")) == NULL) || r; + r = ((glVertexWeightfvEXT = (PFNGLVERTEXWEIGHTFVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexWeightfvEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_EXT_vertex_weighting */ + +#ifdef GL_GREMEDY_frame_terminator + +static GLboolean _glewInit_GL_GREMEDY_frame_terminator (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFrameTerminatorGREMEDY = (PFNGLFRAMETERMINATORGREMEDYPROC)glewGetProcAddress((const GLubyte*)"glFrameTerminatorGREMEDY")) == NULL) || r; + + return r; +} + +#endif /* GL_GREMEDY_frame_terminator */ + +#ifdef GL_GREMEDY_string_marker + +static GLboolean _glewInit_GL_GREMEDY_string_marker (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glStringMarkerGREMEDY = (PFNGLSTRINGMARKERGREMEDYPROC)glewGetProcAddress((const GLubyte*)"glStringMarkerGREMEDY")) == NULL) || r; + + return r; +} + +#endif /* GL_GREMEDY_string_marker */ + +#ifdef GL_HP_convolution_border_modes + +#endif /* GL_HP_convolution_border_modes */ + +#ifdef GL_HP_image_transform + +static GLboolean _glewInit_GL_HP_image_transform (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetImageTransformParameterfvHP = (PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC)glewGetProcAddress((const GLubyte*)"glGetImageTransformParameterfvHP")) == NULL) || r; + r = ((glGetImageTransformParameterivHP = (PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC)glewGetProcAddress((const GLubyte*)"glGetImageTransformParameterivHP")) == NULL) || r; + r = ((glImageTransformParameterfHP = (PFNGLIMAGETRANSFORMPARAMETERFHPPROC)glewGetProcAddress((const GLubyte*)"glImageTransformParameterfHP")) == NULL) || r; + r = ((glImageTransformParameterfvHP = (PFNGLIMAGETRANSFORMPARAMETERFVHPPROC)glewGetProcAddress((const GLubyte*)"glImageTransformParameterfvHP")) == NULL) || r; + r = ((glImageTransformParameteriHP = (PFNGLIMAGETRANSFORMPARAMETERIHPPROC)glewGetProcAddress((const GLubyte*)"glImageTransformParameteriHP")) == NULL) || r; + r = ((glImageTransformParameterivHP = (PFNGLIMAGETRANSFORMPARAMETERIVHPPROC)glewGetProcAddress((const GLubyte*)"glImageTransformParameterivHP")) == NULL) || r; + + return r; +} + +#endif /* GL_HP_image_transform */ + +#ifdef GL_HP_occlusion_test + +#endif /* GL_HP_occlusion_test */ + +#ifdef GL_HP_texture_lighting + +#endif /* GL_HP_texture_lighting */ + +#ifdef GL_IBM_cull_vertex + +#endif /* GL_IBM_cull_vertex */ + +#ifdef GL_IBM_multimode_draw_arrays + +static GLboolean _glewInit_GL_IBM_multimode_draw_arrays (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glMultiModeDrawArraysIBM = (PFNGLMULTIMODEDRAWARRAYSIBMPROC)glewGetProcAddress((const GLubyte*)"glMultiModeDrawArraysIBM")) == NULL) || r; + r = ((glMultiModeDrawElementsIBM = (PFNGLMULTIMODEDRAWELEMENTSIBMPROC)glewGetProcAddress((const GLubyte*)"glMultiModeDrawElementsIBM")) == NULL) || r; + + return r; +} + +#endif /* GL_IBM_multimode_draw_arrays */ + +#ifdef GL_IBM_rasterpos_clip + +#endif /* GL_IBM_rasterpos_clip */ + +#ifdef GL_IBM_static_data + +#endif /* GL_IBM_static_data */ + +#ifdef GL_IBM_texture_mirrored_repeat + +#endif /* GL_IBM_texture_mirrored_repeat */ + +#ifdef GL_IBM_vertex_array_lists + +static GLboolean _glewInit_GL_IBM_vertex_array_lists (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glColorPointerListIBM = (PFNGLCOLORPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glColorPointerListIBM")) == NULL) || r; + r = ((glEdgeFlagPointerListIBM = (PFNGLEDGEFLAGPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glEdgeFlagPointerListIBM")) == NULL) || r; + r = ((glFogCoordPointerListIBM = (PFNGLFOGCOORDPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glFogCoordPointerListIBM")) == NULL) || r; + r = ((glIndexPointerListIBM = (PFNGLINDEXPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glIndexPointerListIBM")) == NULL) || r; + r = ((glNormalPointerListIBM = (PFNGLNORMALPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glNormalPointerListIBM")) == NULL) || r; + r = ((glSecondaryColorPointerListIBM = (PFNGLSECONDARYCOLORPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorPointerListIBM")) == NULL) || r; + r = ((glTexCoordPointerListIBM = (PFNGLTEXCOORDPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glTexCoordPointerListIBM")) == NULL) || r; + r = ((glVertexPointerListIBM = (PFNGLVERTEXPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glVertexPointerListIBM")) == NULL) || r; + + return r; +} + +#endif /* GL_IBM_vertex_array_lists */ + +#ifdef GL_INGR_color_clamp + +#endif /* GL_INGR_color_clamp */ + +#ifdef GL_INGR_interlace_read + +#endif /* GL_INGR_interlace_read */ + +#ifdef GL_INTEL_parallel_arrays + +static GLboolean _glewInit_GL_INTEL_parallel_arrays (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glColorPointervINTEL = (PFNGLCOLORPOINTERVINTELPROC)glewGetProcAddress((const GLubyte*)"glColorPointervINTEL")) == NULL) || r; + r = ((glNormalPointervINTEL = (PFNGLNORMALPOINTERVINTELPROC)glewGetProcAddress((const GLubyte*)"glNormalPointervINTEL")) == NULL) || r; + r = ((glTexCoordPointervINTEL = (PFNGLTEXCOORDPOINTERVINTELPROC)glewGetProcAddress((const GLubyte*)"glTexCoordPointervINTEL")) == NULL) || r; + r = ((glVertexPointervINTEL = (PFNGLVERTEXPOINTERVINTELPROC)glewGetProcAddress((const GLubyte*)"glVertexPointervINTEL")) == NULL) || r; + + return r; +} + +#endif /* GL_INTEL_parallel_arrays */ + +#ifdef GL_INTEL_texture_scissor + +static GLboolean _glewInit_GL_INTEL_texture_scissor (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTexScissorFuncINTEL = (PFNGLTEXSCISSORFUNCINTELPROC)glewGetProcAddress((const GLubyte*)"glTexScissorFuncINTEL")) == NULL) || r; + r = ((glTexScissorINTEL = (PFNGLTEXSCISSORINTELPROC)glewGetProcAddress((const GLubyte*)"glTexScissorINTEL")) == NULL) || r; + + return r; +} + +#endif /* GL_INTEL_texture_scissor */ + +#ifdef GL_KTX_buffer_region + +static GLboolean _glewInit_GL_KTX_buffer_region (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBufferRegionEnabledEXT = (PFNGLBUFFERREGIONENABLEDEXTPROC)glewGetProcAddress((const GLubyte*)"glBufferRegionEnabledEXT")) == NULL) || r; + r = ((glDeleteBufferRegionEXT = (PFNGLDELETEBUFFERREGIONEXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteBufferRegionEXT")) == NULL) || r; + r = ((glDrawBufferRegionEXT = (PFNGLDRAWBUFFERREGIONEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawBufferRegionEXT")) == NULL) || r; + r = ((glNewBufferRegionEXT = (PFNGLNEWBUFFERREGIONEXTPROC)glewGetProcAddress((const GLubyte*)"glNewBufferRegionEXT")) == NULL) || r; + r = ((glReadBufferRegionEXT = (PFNGLREADBUFFERREGIONEXTPROC)glewGetProcAddress((const GLubyte*)"glReadBufferRegionEXT")) == NULL) || r; + + return r; +} + +#endif /* GL_KTX_buffer_region */ + +#ifdef GL_MESAX_texture_stack + +#endif /* GL_MESAX_texture_stack */ + +#ifdef GL_MESA_pack_invert + +#endif /* GL_MESA_pack_invert */ + +#ifdef GL_MESA_resize_buffers + +static GLboolean _glewInit_GL_MESA_resize_buffers (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glResizeBuffersMESA = (PFNGLRESIZEBUFFERSMESAPROC)glewGetProcAddress((const GLubyte*)"glResizeBuffersMESA")) == NULL) || r; + + return r; +} + +#endif /* GL_MESA_resize_buffers */ + +#ifdef GL_MESA_window_pos + +static GLboolean _glewInit_GL_MESA_window_pos (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glWindowPos2dMESA = (PFNGLWINDOWPOS2DMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dMESA")) == NULL) || r; + r = ((glWindowPos2dvMESA = (PFNGLWINDOWPOS2DVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dvMESA")) == NULL) || r; + r = ((glWindowPos2fMESA = (PFNGLWINDOWPOS2FMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fMESA")) == NULL) || r; + r = ((glWindowPos2fvMESA = (PFNGLWINDOWPOS2FVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fvMESA")) == NULL) || r; + r = ((glWindowPos2iMESA = (PFNGLWINDOWPOS2IMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2iMESA")) == NULL) || r; + r = ((glWindowPos2ivMESA = (PFNGLWINDOWPOS2IVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2ivMESA")) == NULL) || r; + r = ((glWindowPos2sMESA = (PFNGLWINDOWPOS2SMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2sMESA")) == NULL) || r; + r = ((glWindowPos2svMESA = (PFNGLWINDOWPOS2SVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2svMESA")) == NULL) || r; + r = ((glWindowPos3dMESA = (PFNGLWINDOWPOS3DMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dMESA")) == NULL) || r; + r = ((glWindowPos3dvMESA = (PFNGLWINDOWPOS3DVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dvMESA")) == NULL) || r; + r = ((glWindowPos3fMESA = (PFNGLWINDOWPOS3FMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fMESA")) == NULL) || r; + r = ((glWindowPos3fvMESA = (PFNGLWINDOWPOS3FVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fvMESA")) == NULL) || r; + r = ((glWindowPos3iMESA = (PFNGLWINDOWPOS3IMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3iMESA")) == NULL) || r; + r = ((glWindowPos3ivMESA = (PFNGLWINDOWPOS3IVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3ivMESA")) == NULL) || r; + r = ((glWindowPos3sMESA = (PFNGLWINDOWPOS3SMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3sMESA")) == NULL) || r; + r = ((glWindowPos3svMESA = (PFNGLWINDOWPOS3SVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3svMESA")) == NULL) || r; + r = ((glWindowPos4dMESA = (PFNGLWINDOWPOS4DMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4dMESA")) == NULL) || r; + r = ((glWindowPos4dvMESA = (PFNGLWINDOWPOS4DVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4dvMESA")) == NULL) || r; + r = ((glWindowPos4fMESA = (PFNGLWINDOWPOS4FMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4fMESA")) == NULL) || r; + r = ((glWindowPos4fvMESA = (PFNGLWINDOWPOS4FVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4fvMESA")) == NULL) || r; + r = ((glWindowPos4iMESA = (PFNGLWINDOWPOS4IMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4iMESA")) == NULL) || r; + r = ((glWindowPos4ivMESA = (PFNGLWINDOWPOS4IVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4ivMESA")) == NULL) || r; + r = ((glWindowPos4sMESA = (PFNGLWINDOWPOS4SMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4sMESA")) == NULL) || r; + r = ((glWindowPos4svMESA = (PFNGLWINDOWPOS4SVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4svMESA")) == NULL) || r; + + return r; +} + +#endif /* GL_MESA_window_pos */ + +#ifdef GL_MESA_ycbcr_texture + +#endif /* GL_MESA_ycbcr_texture */ + +#ifdef GL_NV_blend_square + +#endif /* GL_NV_blend_square */ + +#ifdef GL_NV_copy_depth_to_color + +#endif /* GL_NV_copy_depth_to_color */ + +#ifdef GL_NV_depth_buffer_float + +static GLboolean _glewInit_GL_NV_depth_buffer_float (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glClearDepthdNV = (PFNGLCLEARDEPTHDNVPROC)glewGetProcAddress((const GLubyte*)"glClearDepthdNV")) == NULL) || r; + r = ((glDepthBoundsdNV = (PFNGLDEPTHBOUNDSDNVPROC)glewGetProcAddress((const GLubyte*)"glDepthBoundsdNV")) == NULL) || r; + r = ((glDepthRangedNV = (PFNGLDEPTHRANGEDNVPROC)glewGetProcAddress((const GLubyte*)"glDepthRangedNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_depth_buffer_float */ + +#ifdef GL_NV_depth_clamp + +#endif /* GL_NV_depth_clamp */ + +#ifdef GL_NV_depth_range_unclamped + +#endif /* GL_NV_depth_range_unclamped */ + +#ifdef GL_NV_evaluators + +static GLboolean _glewInit_GL_NV_evaluators (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glEvalMapsNV = (PFNGLEVALMAPSNVPROC)glewGetProcAddress((const GLubyte*)"glEvalMapsNV")) == NULL) || r; + r = ((glGetMapAttribParameterfvNV = (PFNGLGETMAPATTRIBPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapAttribParameterfvNV")) == NULL) || r; + r = ((glGetMapAttribParameterivNV = (PFNGLGETMAPATTRIBPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapAttribParameterivNV")) == NULL) || r; + r = ((glGetMapControlPointsNV = (PFNGLGETMAPCONTROLPOINTSNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapControlPointsNV")) == NULL) || r; + r = ((glGetMapParameterfvNV = (PFNGLGETMAPPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapParameterfvNV")) == NULL) || r; + r = ((glGetMapParameterivNV = (PFNGLGETMAPPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapParameterivNV")) == NULL) || r; + r = ((glMapControlPointsNV = (PFNGLMAPCONTROLPOINTSNVPROC)glewGetProcAddress((const GLubyte*)"glMapControlPointsNV")) == NULL) || r; + r = ((glMapParameterfvNV = (PFNGLMAPPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glMapParameterfvNV")) == NULL) || r; + r = ((glMapParameterivNV = (PFNGLMAPPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glMapParameterivNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_evaluators */ + +#ifdef GL_NV_fence + +static GLboolean _glewInit_GL_NV_fence (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDeleteFencesNV = (PFNGLDELETEFENCESNVPROC)glewGetProcAddress((const GLubyte*)"glDeleteFencesNV")) == NULL) || r; + r = ((glFinishFenceNV = (PFNGLFINISHFENCENVPROC)glewGetProcAddress((const GLubyte*)"glFinishFenceNV")) == NULL) || r; + r = ((glGenFencesNV = (PFNGLGENFENCESNVPROC)glewGetProcAddress((const GLubyte*)"glGenFencesNV")) == NULL) || r; + r = ((glGetFenceivNV = (PFNGLGETFENCEIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetFenceivNV")) == NULL) || r; + r = ((glIsFenceNV = (PFNGLISFENCENVPROC)glewGetProcAddress((const GLubyte*)"glIsFenceNV")) == NULL) || r; + r = ((glSetFenceNV = (PFNGLSETFENCENVPROC)glewGetProcAddress((const GLubyte*)"glSetFenceNV")) == NULL) || r; + r = ((glTestFenceNV = (PFNGLTESTFENCENVPROC)glewGetProcAddress((const GLubyte*)"glTestFenceNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_fence */ + +#ifdef GL_NV_float_buffer + +#endif /* GL_NV_float_buffer */ + +#ifdef GL_NV_fog_distance + +#endif /* GL_NV_fog_distance */ + +#ifdef GL_NV_fragment_program + +static GLboolean _glewInit_GL_NV_fragment_program (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetProgramNamedParameterdvNV = (PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramNamedParameterdvNV")) == NULL) || r; + r = ((glGetProgramNamedParameterfvNV = (PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramNamedParameterfvNV")) == NULL) || r; + r = ((glProgramNamedParameter4dNV = (PFNGLPROGRAMNAMEDPARAMETER4DNVPROC)glewGetProcAddress((const GLubyte*)"glProgramNamedParameter4dNV")) == NULL) || r; + r = ((glProgramNamedParameter4dvNV = (PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramNamedParameter4dvNV")) == NULL) || r; + r = ((glProgramNamedParameter4fNV = (PFNGLPROGRAMNAMEDPARAMETER4FNVPROC)glewGetProcAddress((const GLubyte*)"glProgramNamedParameter4fNV")) == NULL) || r; + r = ((glProgramNamedParameter4fvNV = (PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramNamedParameter4fvNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_fragment_program */ + +#ifdef GL_NV_fragment_program2 + +#endif /* GL_NV_fragment_program2 */ + +#ifdef GL_NV_fragment_program4 + +#endif /* GL_NV_fragment_program4 */ + +#ifdef GL_NV_fragment_program_option + +#endif /* GL_NV_fragment_program_option */ + +#ifdef GL_NV_framebuffer_multisample_coverage + +static GLboolean _glewInit_GL_NV_framebuffer_multisample_coverage (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glRenderbufferStorageMultisampleCoverageNV = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageMultisampleCoverageNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_framebuffer_multisample_coverage */ + +#ifdef GL_NV_geometry_program4 + +static GLboolean _glewInit_GL_NV_geometry_program4 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glProgramVertexLimitNV = (PFNGLPROGRAMVERTEXLIMITNVPROC)glewGetProcAddress((const GLubyte*)"glProgramVertexLimitNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_geometry_program4 */ + +#ifdef GL_NV_geometry_shader4 + +#endif /* GL_NV_geometry_shader4 */ + +#ifdef GL_NV_gpu_program4 + +static GLboolean _glewInit_GL_NV_gpu_program4 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glProgramEnvParameterI4iNV = (PFNGLPROGRAMENVPARAMETERI4INVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameterI4iNV")) == NULL) || r; + r = ((glProgramEnvParameterI4ivNV = (PFNGLPROGRAMENVPARAMETERI4IVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameterI4ivNV")) == NULL) || r; + r = ((glProgramEnvParameterI4uiNV = (PFNGLPROGRAMENVPARAMETERI4UINVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameterI4uiNV")) == NULL) || r; + r = ((glProgramEnvParameterI4uivNV = (PFNGLPROGRAMENVPARAMETERI4UIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameterI4uivNV")) == NULL) || r; + r = ((glProgramEnvParametersI4ivNV = (PFNGLPROGRAMENVPARAMETERSI4IVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParametersI4ivNV")) == NULL) || r; + r = ((glProgramEnvParametersI4uivNV = (PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParametersI4uivNV")) == NULL) || r; + r = ((glProgramLocalParameterI4iNV = (PFNGLPROGRAMLOCALPARAMETERI4INVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameterI4iNV")) == NULL) || r; + r = ((glProgramLocalParameterI4ivNV = (PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameterI4ivNV")) == NULL) || r; + r = ((glProgramLocalParameterI4uiNV = (PFNGLPROGRAMLOCALPARAMETERI4UINVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameterI4uiNV")) == NULL) || r; + r = ((glProgramLocalParameterI4uivNV = (PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameterI4uivNV")) == NULL) || r; + r = ((glProgramLocalParametersI4ivNV = (PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParametersI4ivNV")) == NULL) || r; + r = ((glProgramLocalParametersI4uivNV = (PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParametersI4uivNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_gpu_program4 */ + +#ifdef GL_NV_half_float + +static GLboolean _glewInit_GL_NV_half_float (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glColor3hNV = (PFNGLCOLOR3HNVPROC)glewGetProcAddress((const GLubyte*)"glColor3hNV")) == NULL) || r; + r = ((glColor3hvNV = (PFNGLCOLOR3HVNVPROC)glewGetProcAddress((const GLubyte*)"glColor3hvNV")) == NULL) || r; + r = ((glColor4hNV = (PFNGLCOLOR4HNVPROC)glewGetProcAddress((const GLubyte*)"glColor4hNV")) == NULL) || r; + r = ((glColor4hvNV = (PFNGLCOLOR4HVNVPROC)glewGetProcAddress((const GLubyte*)"glColor4hvNV")) == NULL) || r; + r = ((glFogCoordhNV = (PFNGLFOGCOORDHNVPROC)glewGetProcAddress((const GLubyte*)"glFogCoordhNV")) == NULL) || r; + r = ((glFogCoordhvNV = (PFNGLFOGCOORDHVNVPROC)glewGetProcAddress((const GLubyte*)"glFogCoordhvNV")) == NULL) || r; + r = ((glMultiTexCoord1hNV = (PFNGLMULTITEXCOORD1HNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1hNV")) == NULL) || r; + r = ((glMultiTexCoord1hvNV = (PFNGLMULTITEXCOORD1HVNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1hvNV")) == NULL) || r; + r = ((glMultiTexCoord2hNV = (PFNGLMULTITEXCOORD2HNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2hNV")) == NULL) || r; + r = ((glMultiTexCoord2hvNV = (PFNGLMULTITEXCOORD2HVNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2hvNV")) == NULL) || r; + r = ((glMultiTexCoord3hNV = (PFNGLMULTITEXCOORD3HNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3hNV")) == NULL) || r; + r = ((glMultiTexCoord3hvNV = (PFNGLMULTITEXCOORD3HVNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3hvNV")) == NULL) || r; + r = ((glMultiTexCoord4hNV = (PFNGLMULTITEXCOORD4HNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4hNV")) == NULL) || r; + r = ((glMultiTexCoord4hvNV = (PFNGLMULTITEXCOORD4HVNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4hvNV")) == NULL) || r; + r = ((glNormal3hNV = (PFNGLNORMAL3HNVPROC)glewGetProcAddress((const GLubyte*)"glNormal3hNV")) == NULL) || r; + r = ((glNormal3hvNV = (PFNGLNORMAL3HVNVPROC)glewGetProcAddress((const GLubyte*)"glNormal3hvNV")) == NULL) || r; + r = ((glSecondaryColor3hNV = (PFNGLSECONDARYCOLOR3HNVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3hNV")) == NULL) || r; + r = ((glSecondaryColor3hvNV = (PFNGLSECONDARYCOLOR3HVNVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3hvNV")) == NULL) || r; + r = ((glTexCoord1hNV = (PFNGLTEXCOORD1HNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord1hNV")) == NULL) || r; + r = ((glTexCoord1hvNV = (PFNGLTEXCOORD1HVNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord1hvNV")) == NULL) || r; + r = ((glTexCoord2hNV = (PFNGLTEXCOORD2HNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2hNV")) == NULL) || r; + r = ((glTexCoord2hvNV = (PFNGLTEXCOORD2HVNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2hvNV")) == NULL) || r; + r = ((glTexCoord3hNV = (PFNGLTEXCOORD3HNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord3hNV")) == NULL) || r; + r = ((glTexCoord3hvNV = (PFNGLTEXCOORD3HVNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord3hvNV")) == NULL) || r; + r = ((glTexCoord4hNV = (PFNGLTEXCOORD4HNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4hNV")) == NULL) || r; + r = ((glTexCoord4hvNV = (PFNGLTEXCOORD4HVNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4hvNV")) == NULL) || r; + r = ((glVertex2hNV = (PFNGLVERTEX2HNVPROC)glewGetProcAddress((const GLubyte*)"glVertex2hNV")) == NULL) || r; + r = ((glVertex2hvNV = (PFNGLVERTEX2HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertex2hvNV")) == NULL) || r; + r = ((glVertex3hNV = (PFNGLVERTEX3HNVPROC)glewGetProcAddress((const GLubyte*)"glVertex3hNV")) == NULL) || r; + r = ((glVertex3hvNV = (PFNGLVERTEX3HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertex3hvNV")) == NULL) || r; + r = ((glVertex4hNV = (PFNGLVERTEX4HNVPROC)glewGetProcAddress((const GLubyte*)"glVertex4hNV")) == NULL) || r; + r = ((glVertex4hvNV = (PFNGLVERTEX4HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertex4hvNV")) == NULL) || r; + r = ((glVertexAttrib1hNV = (PFNGLVERTEXATTRIB1HNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1hNV")) == NULL) || r; + r = ((glVertexAttrib1hvNV = (PFNGLVERTEXATTRIB1HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1hvNV")) == NULL) || r; + r = ((glVertexAttrib2hNV = (PFNGLVERTEXATTRIB2HNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2hNV")) == NULL) || r; + r = ((glVertexAttrib2hvNV = (PFNGLVERTEXATTRIB2HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2hvNV")) == NULL) || r; + r = ((glVertexAttrib3hNV = (PFNGLVERTEXATTRIB3HNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3hNV")) == NULL) || r; + r = ((glVertexAttrib3hvNV = (PFNGLVERTEXATTRIB3HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3hvNV")) == NULL) || r; + r = ((glVertexAttrib4hNV = (PFNGLVERTEXATTRIB4HNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4hNV")) == NULL) || r; + r = ((glVertexAttrib4hvNV = (PFNGLVERTEXATTRIB4HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4hvNV")) == NULL) || r; + r = ((glVertexAttribs1hvNV = (PFNGLVERTEXATTRIBS1HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs1hvNV")) == NULL) || r; + r = ((glVertexAttribs2hvNV = (PFNGLVERTEXATTRIBS2HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs2hvNV")) == NULL) || r; + r = ((glVertexAttribs3hvNV = (PFNGLVERTEXATTRIBS3HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs3hvNV")) == NULL) || r; + r = ((glVertexAttribs4hvNV = (PFNGLVERTEXATTRIBS4HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4hvNV")) == NULL) || r; + r = ((glVertexWeighthNV = (PFNGLVERTEXWEIGHTHNVPROC)glewGetProcAddress((const GLubyte*)"glVertexWeighthNV")) == NULL) || r; + r = ((glVertexWeighthvNV = (PFNGLVERTEXWEIGHTHVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexWeighthvNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_half_float */ + +#ifdef GL_NV_light_max_exponent + +#endif /* GL_NV_light_max_exponent */ + +#ifdef GL_NV_multisample_filter_hint + +#endif /* GL_NV_multisample_filter_hint */ + +#ifdef GL_NV_occlusion_query + +static GLboolean _glewInit_GL_NV_occlusion_query (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glBeginOcclusionQueryNV = (PFNGLBEGINOCCLUSIONQUERYNVPROC)glewGetProcAddress((const GLubyte*)"glBeginOcclusionQueryNV")) == NULL) || r; + r = ((glDeleteOcclusionQueriesNV = (PFNGLDELETEOCCLUSIONQUERIESNVPROC)glewGetProcAddress((const GLubyte*)"glDeleteOcclusionQueriesNV")) == NULL) || r; + r = ((glEndOcclusionQueryNV = (PFNGLENDOCCLUSIONQUERYNVPROC)glewGetProcAddress((const GLubyte*)"glEndOcclusionQueryNV")) == NULL) || r; + r = ((glGenOcclusionQueriesNV = (PFNGLGENOCCLUSIONQUERIESNVPROC)glewGetProcAddress((const GLubyte*)"glGenOcclusionQueriesNV")) == NULL) || r; + r = ((glGetOcclusionQueryivNV = (PFNGLGETOCCLUSIONQUERYIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetOcclusionQueryivNV")) == NULL) || r; + r = ((glGetOcclusionQueryuivNV = (PFNGLGETOCCLUSIONQUERYUIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetOcclusionQueryuivNV")) == NULL) || r; + r = ((glIsOcclusionQueryNV = (PFNGLISOCCLUSIONQUERYNVPROC)glewGetProcAddress((const GLubyte*)"glIsOcclusionQueryNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_occlusion_query */ + +#ifdef GL_NV_packed_depth_stencil + +#endif /* GL_NV_packed_depth_stencil */ + +#ifdef GL_NV_parameter_buffer_object + +static GLboolean _glewInit_GL_NV_parameter_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glProgramBufferParametersIivNV = (PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramBufferParametersIivNV")) == NULL) || r; + r = ((glProgramBufferParametersIuivNV = (PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramBufferParametersIuivNV")) == NULL) || r; + r = ((glProgramBufferParametersfvNV = (PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramBufferParametersfvNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_parameter_buffer_object */ + +#ifdef GL_NV_pixel_data_range + +static GLboolean _glewInit_GL_NV_pixel_data_range (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFlushPixelDataRangeNV = (PFNGLFLUSHPIXELDATARANGENVPROC)glewGetProcAddress((const GLubyte*)"glFlushPixelDataRangeNV")) == NULL) || r; + r = ((glPixelDataRangeNV = (PFNGLPIXELDATARANGENVPROC)glewGetProcAddress((const GLubyte*)"glPixelDataRangeNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_pixel_data_range */ + +#ifdef GL_NV_point_sprite + +static GLboolean _glewInit_GL_NV_point_sprite (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glPointParameteriNV = (PFNGLPOINTPARAMETERINVPROC)glewGetProcAddress((const GLubyte*)"glPointParameteriNV")) == NULL) || r; + r = ((glPointParameterivNV = (PFNGLPOINTPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glPointParameterivNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_point_sprite */ + +#ifdef GL_NV_primitive_restart + +static GLboolean _glewInit_GL_NV_primitive_restart (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glPrimitiveRestartIndexNV = (PFNGLPRIMITIVERESTARTINDEXNVPROC)glewGetProcAddress((const GLubyte*)"glPrimitiveRestartIndexNV")) == NULL) || r; + r = ((glPrimitiveRestartNV = (PFNGLPRIMITIVERESTARTNVPROC)glewGetProcAddress((const GLubyte*)"glPrimitiveRestartNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_primitive_restart */ + +#ifdef GL_NV_register_combiners + +static GLboolean _glewInit_GL_NV_register_combiners (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glCombinerInputNV = (PFNGLCOMBINERINPUTNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerInputNV")) == NULL) || r; + r = ((glCombinerOutputNV = (PFNGLCOMBINEROUTPUTNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerOutputNV")) == NULL) || r; + r = ((glCombinerParameterfNV = (PFNGLCOMBINERPARAMETERFNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerParameterfNV")) == NULL) || r; + r = ((glCombinerParameterfvNV = (PFNGLCOMBINERPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerParameterfvNV")) == NULL) || r; + r = ((glCombinerParameteriNV = (PFNGLCOMBINERPARAMETERINVPROC)glewGetProcAddress((const GLubyte*)"glCombinerParameteriNV")) == NULL) || r; + r = ((glCombinerParameterivNV = (PFNGLCOMBINERPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerParameterivNV")) == NULL) || r; + r = ((glFinalCombinerInputNV = (PFNGLFINALCOMBINERINPUTNVPROC)glewGetProcAddress((const GLubyte*)"glFinalCombinerInputNV")) == NULL) || r; + r = ((glGetCombinerInputParameterfvNV = (PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerInputParameterfvNV")) == NULL) || r; + r = ((glGetCombinerInputParameterivNV = (PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerInputParameterivNV")) == NULL) || r; + r = ((glGetCombinerOutputParameterfvNV = (PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerOutputParameterfvNV")) == NULL) || r; + r = ((glGetCombinerOutputParameterivNV = (PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerOutputParameterivNV")) == NULL) || r; + r = ((glGetFinalCombinerInputParameterfvNV = (PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetFinalCombinerInputParameterfvNV")) == NULL) || r; + r = ((glGetFinalCombinerInputParameterivNV = (PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetFinalCombinerInputParameterivNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_register_combiners */ + +#ifdef GL_NV_register_combiners2 + +static GLboolean _glewInit_GL_NV_register_combiners2 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glCombinerStageParameterfvNV = (PFNGLCOMBINERSTAGEPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerStageParameterfvNV")) == NULL) || r; + r = ((glGetCombinerStageParameterfvNV = (PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerStageParameterfvNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_register_combiners2 */ + +#ifdef GL_NV_texgen_emboss + +#endif /* GL_NV_texgen_emboss */ + +#ifdef GL_NV_texgen_reflection + +#endif /* GL_NV_texgen_reflection */ + +#ifdef GL_NV_texture_compression_vtc + +#endif /* GL_NV_texture_compression_vtc */ + +#ifdef GL_NV_texture_env_combine4 + +#endif /* GL_NV_texture_env_combine4 */ + +#ifdef GL_NV_texture_expand_normal + +#endif /* GL_NV_texture_expand_normal */ + +#ifdef GL_NV_texture_rectangle + +#endif /* GL_NV_texture_rectangle */ + +#ifdef GL_NV_texture_shader + +#endif /* GL_NV_texture_shader */ + +#ifdef GL_NV_texture_shader2 + +#endif /* GL_NV_texture_shader2 */ + +#ifdef GL_NV_texture_shader3 + +#endif /* GL_NV_texture_shader3 */ + +#ifdef GL_NV_transform_feedback + +static GLboolean _glewInit_GL_NV_transform_feedback (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glActiveVaryingNV = (PFNGLACTIVEVARYINGNVPROC)glewGetProcAddress((const GLubyte*)"glActiveVaryingNV")) == NULL) || r; + r = ((glBeginTransformFeedbackNV = (PFNGLBEGINTRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glBeginTransformFeedbackNV")) == NULL) || r; + r = ((glBindBufferBaseNV = (PFNGLBINDBUFFERBASENVPROC)glewGetProcAddress((const GLubyte*)"glBindBufferBaseNV")) == NULL) || r; + r = ((glBindBufferOffsetNV = (PFNGLBINDBUFFEROFFSETNVPROC)glewGetProcAddress((const GLubyte*)"glBindBufferOffsetNV")) == NULL) || r; + r = ((glBindBufferRangeNV = (PFNGLBINDBUFFERRANGENVPROC)glewGetProcAddress((const GLubyte*)"glBindBufferRangeNV")) == NULL) || r; + r = ((glEndTransformFeedbackNV = (PFNGLENDTRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glEndTransformFeedbackNV")) == NULL) || r; + r = ((glGetActiveVaryingNV = (PFNGLGETACTIVEVARYINGNVPROC)glewGetProcAddress((const GLubyte*)"glGetActiveVaryingNV")) == NULL) || r; + r = ((glGetTransformFeedbackVaryingNV = (PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC)glewGetProcAddress((const GLubyte*)"glGetTransformFeedbackVaryingNV")) == NULL) || r; + r = ((glGetVaryingLocationNV = (PFNGLGETVARYINGLOCATIONNVPROC)glewGetProcAddress((const GLubyte*)"glGetVaryingLocationNV")) == NULL) || r; + r = ((glTransformFeedbackAttribsNV = (PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC)glewGetProcAddress((const GLubyte*)"glTransformFeedbackAttribsNV")) == NULL) || r; + r = ((glTransformFeedbackVaryingsNV = (PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC)glewGetProcAddress((const GLubyte*)"glTransformFeedbackVaryingsNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_transform_feedback */ + +#ifdef GL_NV_vertex_array_range + +static GLboolean _glewInit_GL_NV_vertex_array_range (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFlushVertexArrayRangeNV = (PFNGLFLUSHVERTEXARRAYRANGENVPROC)glewGetProcAddress((const GLubyte*)"glFlushVertexArrayRangeNV")) == NULL) || r; + r = ((glVertexArrayRangeNV = (PFNGLVERTEXARRAYRANGENVPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayRangeNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_vertex_array_range */ + +#ifdef GL_NV_vertex_array_range2 + +#endif /* GL_NV_vertex_array_range2 */ + +#ifdef GL_NV_vertex_program + +static GLboolean _glewInit_GL_NV_vertex_program (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glAreProgramsResidentNV = (PFNGLAREPROGRAMSRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glAreProgramsResidentNV")) == NULL) || r; + r = ((glBindProgramNV = (PFNGLBINDPROGRAMNVPROC)glewGetProcAddress((const GLubyte*)"glBindProgramNV")) == NULL) || r; + r = ((glDeleteProgramsNV = (PFNGLDELETEPROGRAMSNVPROC)glewGetProcAddress((const GLubyte*)"glDeleteProgramsNV")) == NULL) || r; + r = ((glExecuteProgramNV = (PFNGLEXECUTEPROGRAMNVPROC)glewGetProcAddress((const GLubyte*)"glExecuteProgramNV")) == NULL) || r; + r = ((glGenProgramsNV = (PFNGLGENPROGRAMSNVPROC)glewGetProcAddress((const GLubyte*)"glGenProgramsNV")) == NULL) || r; + r = ((glGetProgramParameterdvNV = (PFNGLGETPROGRAMPARAMETERDVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramParameterdvNV")) == NULL) || r; + r = ((glGetProgramParameterfvNV = (PFNGLGETPROGRAMPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramParameterfvNV")) == NULL) || r; + r = ((glGetProgramStringNV = (PFNGLGETPROGRAMSTRINGNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramStringNV")) == NULL) || r; + r = ((glGetProgramivNV = (PFNGLGETPROGRAMIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramivNV")) == NULL) || r; + r = ((glGetTrackMatrixivNV = (PFNGLGETTRACKMATRIXIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetTrackMatrixivNV")) == NULL) || r; + r = ((glGetVertexAttribPointervNV = (PFNGLGETVERTEXATTRIBPOINTERVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribPointervNV")) == NULL) || r; + r = ((glGetVertexAttribdvNV = (PFNGLGETVERTEXATTRIBDVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribdvNV")) == NULL) || r; + r = ((glGetVertexAttribfvNV = (PFNGLGETVERTEXATTRIBFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribfvNV")) == NULL) || r; + r = ((glGetVertexAttribivNV = (PFNGLGETVERTEXATTRIBIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribivNV")) == NULL) || r; + r = ((glIsProgramNV = (PFNGLISPROGRAMNVPROC)glewGetProcAddress((const GLubyte*)"glIsProgramNV")) == NULL) || r; + r = ((glLoadProgramNV = (PFNGLLOADPROGRAMNVPROC)glewGetProcAddress((const GLubyte*)"glLoadProgramNV")) == NULL) || r; + r = ((glProgramParameter4dNV = (PFNGLPROGRAMPARAMETER4DNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameter4dNV")) == NULL) || r; + r = ((glProgramParameter4dvNV = (PFNGLPROGRAMPARAMETER4DVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameter4dvNV")) == NULL) || r; + r = ((glProgramParameter4fNV = (PFNGLPROGRAMPARAMETER4FNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameter4fNV")) == NULL) || r; + r = ((glProgramParameter4fvNV = (PFNGLPROGRAMPARAMETER4FVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameter4fvNV")) == NULL) || r; + r = ((glProgramParameters4dvNV = (PFNGLPROGRAMPARAMETERS4DVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameters4dvNV")) == NULL) || r; + r = ((glProgramParameters4fvNV = (PFNGLPROGRAMPARAMETERS4FVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameters4fvNV")) == NULL) || r; + r = ((glRequestResidentProgramsNV = (PFNGLREQUESTRESIDENTPROGRAMSNVPROC)glewGetProcAddress((const GLubyte*)"glRequestResidentProgramsNV")) == NULL) || r; + r = ((glTrackMatrixNV = (PFNGLTRACKMATRIXNVPROC)glewGetProcAddress((const GLubyte*)"glTrackMatrixNV")) == NULL) || r; + r = ((glVertexAttrib1dNV = (PFNGLVERTEXATTRIB1DNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dNV")) == NULL) || r; + r = ((glVertexAttrib1dvNV = (PFNGLVERTEXATTRIB1DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dvNV")) == NULL) || r; + r = ((glVertexAttrib1fNV = (PFNGLVERTEXATTRIB1FNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fNV")) == NULL) || r; + r = ((glVertexAttrib1fvNV = (PFNGLVERTEXATTRIB1FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fvNV")) == NULL) || r; + r = ((glVertexAttrib1sNV = (PFNGLVERTEXATTRIB1SNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1sNV")) == NULL) || r; + r = ((glVertexAttrib1svNV = (PFNGLVERTEXATTRIB1SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1svNV")) == NULL) || r; + r = ((glVertexAttrib2dNV = (PFNGLVERTEXATTRIB2DNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dNV")) == NULL) || r; + r = ((glVertexAttrib2dvNV = (PFNGLVERTEXATTRIB2DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dvNV")) == NULL) || r; + r = ((glVertexAttrib2fNV = (PFNGLVERTEXATTRIB2FNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fNV")) == NULL) || r; + r = ((glVertexAttrib2fvNV = (PFNGLVERTEXATTRIB2FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fvNV")) == NULL) || r; + r = ((glVertexAttrib2sNV = (PFNGLVERTEXATTRIB2SNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2sNV")) == NULL) || r; + r = ((glVertexAttrib2svNV = (PFNGLVERTEXATTRIB2SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2svNV")) == NULL) || r; + r = ((glVertexAttrib3dNV = (PFNGLVERTEXATTRIB3DNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dNV")) == NULL) || r; + r = ((glVertexAttrib3dvNV = (PFNGLVERTEXATTRIB3DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dvNV")) == NULL) || r; + r = ((glVertexAttrib3fNV = (PFNGLVERTEXATTRIB3FNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fNV")) == NULL) || r; + r = ((glVertexAttrib3fvNV = (PFNGLVERTEXATTRIB3FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fvNV")) == NULL) || r; + r = ((glVertexAttrib3sNV = (PFNGLVERTEXATTRIB3SNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3sNV")) == NULL) || r; + r = ((glVertexAttrib3svNV = (PFNGLVERTEXATTRIB3SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3svNV")) == NULL) || r; + r = ((glVertexAttrib4dNV = (PFNGLVERTEXATTRIB4DNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dNV")) == NULL) || r; + r = ((glVertexAttrib4dvNV = (PFNGLVERTEXATTRIB4DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dvNV")) == NULL) || r; + r = ((glVertexAttrib4fNV = (PFNGLVERTEXATTRIB4FNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fNV")) == NULL) || r; + r = ((glVertexAttrib4fvNV = (PFNGLVERTEXATTRIB4FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fvNV")) == NULL) || r; + r = ((glVertexAttrib4sNV = (PFNGLVERTEXATTRIB4SNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4sNV")) == NULL) || r; + r = ((glVertexAttrib4svNV = (PFNGLVERTEXATTRIB4SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4svNV")) == NULL) || r; + r = ((glVertexAttrib4ubNV = (PFNGLVERTEXATTRIB4UBNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ubNV")) == NULL) || r; + r = ((glVertexAttrib4ubvNV = (PFNGLVERTEXATTRIB4UBVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ubvNV")) == NULL) || r; + r = ((glVertexAttribPointerNV = (PFNGLVERTEXATTRIBPOINTERNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribPointerNV")) == NULL) || r; + r = ((glVertexAttribs1dvNV = (PFNGLVERTEXATTRIBS1DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs1dvNV")) == NULL) || r; + r = ((glVertexAttribs1fvNV = (PFNGLVERTEXATTRIBS1FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs1fvNV")) == NULL) || r; + r = ((glVertexAttribs1svNV = (PFNGLVERTEXATTRIBS1SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs1svNV")) == NULL) || r; + r = ((glVertexAttribs2dvNV = (PFNGLVERTEXATTRIBS2DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs2dvNV")) == NULL) || r; + r = ((glVertexAttribs2fvNV = (PFNGLVERTEXATTRIBS2FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs2fvNV")) == NULL) || r; + r = ((glVertexAttribs2svNV = (PFNGLVERTEXATTRIBS2SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs2svNV")) == NULL) || r; + r = ((glVertexAttribs3dvNV = (PFNGLVERTEXATTRIBS3DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs3dvNV")) == NULL) || r; + r = ((glVertexAttribs3fvNV = (PFNGLVERTEXATTRIBS3FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs3fvNV")) == NULL) || r; + r = ((glVertexAttribs3svNV = (PFNGLVERTEXATTRIBS3SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs3svNV")) == NULL) || r; + r = ((glVertexAttribs4dvNV = (PFNGLVERTEXATTRIBS4DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4dvNV")) == NULL) || r; + r = ((glVertexAttribs4fvNV = (PFNGLVERTEXATTRIBS4FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4fvNV")) == NULL) || r; + r = ((glVertexAttribs4svNV = (PFNGLVERTEXATTRIBS4SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4svNV")) == NULL) || r; + r = ((glVertexAttribs4ubvNV = (PFNGLVERTEXATTRIBS4UBVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4ubvNV")) == NULL) || r; + + return r; +} + +#endif /* GL_NV_vertex_program */ + +#ifdef GL_NV_vertex_program1_1 + +#endif /* GL_NV_vertex_program1_1 */ + +#ifdef GL_NV_vertex_program2 + +#endif /* GL_NV_vertex_program2 */ + +#ifdef GL_NV_vertex_program2_option + +#endif /* GL_NV_vertex_program2_option */ + +#ifdef GL_NV_vertex_program3 + +#endif /* GL_NV_vertex_program3 */ + +#ifdef GL_NV_vertex_program4 + +#endif /* GL_NV_vertex_program4 */ + +#ifdef GL_OES_byte_coordinates + +#endif /* GL_OES_byte_coordinates */ + +#ifdef GL_OES_compressed_paletted_texture + +#endif /* GL_OES_compressed_paletted_texture */ + +#ifdef GL_OES_read_format + +#endif /* GL_OES_read_format */ + +#ifdef GL_OES_single_precision + +static GLboolean _glewInit_GL_OES_single_precision (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glClearDepthfOES = (PFNGLCLEARDEPTHFOESPROC)glewGetProcAddress((const GLubyte*)"glClearDepthfOES")) == NULL) || r; + r = ((glClipPlanefOES = (PFNGLCLIPPLANEFOESPROC)glewGetProcAddress((const GLubyte*)"glClipPlanefOES")) == NULL) || r; + r = ((glDepthRangefOES = (PFNGLDEPTHRANGEFOESPROC)glewGetProcAddress((const GLubyte*)"glDepthRangefOES")) == NULL) || r; + r = ((glFrustumfOES = (PFNGLFRUSTUMFOESPROC)glewGetProcAddress((const GLubyte*)"glFrustumfOES")) == NULL) || r; + r = ((glGetClipPlanefOES = (PFNGLGETCLIPPLANEFOESPROC)glewGetProcAddress((const GLubyte*)"glGetClipPlanefOES")) == NULL) || r; + r = ((glOrthofOES = (PFNGLORTHOFOESPROC)glewGetProcAddress((const GLubyte*)"glOrthofOES")) == NULL) || r; + + return r; +} + +#endif /* GL_OES_single_precision */ + +#ifdef GL_OML_interlace + +#endif /* GL_OML_interlace */ + +#ifdef GL_OML_resample + +#endif /* GL_OML_resample */ + +#ifdef GL_OML_subsample + +#endif /* GL_OML_subsample */ + +#ifdef GL_PGI_misc_hints + +#endif /* GL_PGI_misc_hints */ + +#ifdef GL_PGI_vertex_hints + +#endif /* GL_PGI_vertex_hints */ + +#ifdef GL_REND_screen_coordinates + +#endif /* GL_REND_screen_coordinates */ + +#ifdef GL_S3_s3tc + +#endif /* GL_S3_s3tc */ + +#ifdef GL_SGIS_color_range + +#endif /* GL_SGIS_color_range */ + +#ifdef GL_SGIS_detail_texture + +static GLboolean _glewInit_GL_SGIS_detail_texture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glDetailTexFuncSGIS = (PFNGLDETAILTEXFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glDetailTexFuncSGIS")) == NULL) || r; + r = ((glGetDetailTexFuncSGIS = (PFNGLGETDETAILTEXFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glGetDetailTexFuncSGIS")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIS_detail_texture */ + +#ifdef GL_SGIS_fog_function + +static GLboolean _glewInit_GL_SGIS_fog_function (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFogFuncSGIS = (PFNGLFOGFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glFogFuncSGIS")) == NULL) || r; + r = ((glGetFogFuncSGIS = (PFNGLGETFOGFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glGetFogFuncSGIS")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIS_fog_function */ + +#ifdef GL_SGIS_generate_mipmap + +#endif /* GL_SGIS_generate_mipmap */ + +#ifdef GL_SGIS_multisample + +static GLboolean _glewInit_GL_SGIS_multisample (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glSampleMaskSGIS = (PFNGLSAMPLEMASKSGISPROC)glewGetProcAddress((const GLubyte*)"glSampleMaskSGIS")) == NULL) || r; + r = ((glSamplePatternSGIS = (PFNGLSAMPLEPATTERNSGISPROC)glewGetProcAddress((const GLubyte*)"glSamplePatternSGIS")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIS_multisample */ + +#ifdef GL_SGIS_pixel_texture + +#endif /* GL_SGIS_pixel_texture */ + +#ifdef GL_SGIS_sharpen_texture + +static GLboolean _glewInit_GL_SGIS_sharpen_texture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetSharpenTexFuncSGIS = (PFNGLGETSHARPENTEXFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glGetSharpenTexFuncSGIS")) == NULL) || r; + r = ((glSharpenTexFuncSGIS = (PFNGLSHARPENTEXFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glSharpenTexFuncSGIS")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIS_sharpen_texture */ + +#ifdef GL_SGIS_texture4D + +static GLboolean _glewInit_GL_SGIS_texture4D (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTexImage4DSGIS = (PFNGLTEXIMAGE4DSGISPROC)glewGetProcAddress((const GLubyte*)"glTexImage4DSGIS")) == NULL) || r; + r = ((glTexSubImage4DSGIS = (PFNGLTEXSUBIMAGE4DSGISPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage4DSGIS")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIS_texture4D */ + +#ifdef GL_SGIS_texture_border_clamp + +#endif /* GL_SGIS_texture_border_clamp */ + +#ifdef GL_SGIS_texture_edge_clamp + +#endif /* GL_SGIS_texture_edge_clamp */ + +#ifdef GL_SGIS_texture_filter4 + +static GLboolean _glewInit_GL_SGIS_texture_filter4 (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGetTexFilterFuncSGIS = (PFNGLGETTEXFILTERFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glGetTexFilterFuncSGIS")) == NULL) || r; + r = ((glTexFilterFuncSGIS = (PFNGLTEXFILTERFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glTexFilterFuncSGIS")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIS_texture_filter4 */ + +#ifdef GL_SGIS_texture_lod + +#endif /* GL_SGIS_texture_lod */ + +#ifdef GL_SGIS_texture_select + +#endif /* GL_SGIS_texture_select */ + +#ifdef GL_SGIX_async + +static GLboolean _glewInit_GL_SGIX_async (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glAsyncMarkerSGIX = (PFNGLASYNCMARKERSGIXPROC)glewGetProcAddress((const GLubyte*)"glAsyncMarkerSGIX")) == NULL) || r; + r = ((glDeleteAsyncMarkersSGIX = (PFNGLDELETEASYNCMARKERSSGIXPROC)glewGetProcAddress((const GLubyte*)"glDeleteAsyncMarkersSGIX")) == NULL) || r; + r = ((glFinishAsyncSGIX = (PFNGLFINISHASYNCSGIXPROC)glewGetProcAddress((const GLubyte*)"glFinishAsyncSGIX")) == NULL) || r; + r = ((glGenAsyncMarkersSGIX = (PFNGLGENASYNCMARKERSSGIXPROC)glewGetProcAddress((const GLubyte*)"glGenAsyncMarkersSGIX")) == NULL) || r; + r = ((glIsAsyncMarkerSGIX = (PFNGLISASYNCMARKERSGIXPROC)glewGetProcAddress((const GLubyte*)"glIsAsyncMarkerSGIX")) == NULL) || r; + r = ((glPollAsyncSGIX = (PFNGLPOLLASYNCSGIXPROC)glewGetProcAddress((const GLubyte*)"glPollAsyncSGIX")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIX_async */ + +#ifdef GL_SGIX_async_histogram + +#endif /* GL_SGIX_async_histogram */ + +#ifdef GL_SGIX_async_pixel + +#endif /* GL_SGIX_async_pixel */ + +#ifdef GL_SGIX_blend_alpha_minmax + +#endif /* GL_SGIX_blend_alpha_minmax */ + +#ifdef GL_SGIX_clipmap + +#endif /* GL_SGIX_clipmap */ + +#ifdef GL_SGIX_depth_texture + +#endif /* GL_SGIX_depth_texture */ + +#ifdef GL_SGIX_flush_raster + +static GLboolean _glewInit_GL_SGIX_flush_raster (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFlushRasterSGIX = (PFNGLFLUSHRASTERSGIXPROC)glewGetProcAddress((const GLubyte*)"glFlushRasterSGIX")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIX_flush_raster */ + +#ifdef GL_SGIX_fog_offset + +#endif /* GL_SGIX_fog_offset */ + +#ifdef GL_SGIX_fog_texture + +static GLboolean _glewInit_GL_SGIX_fog_texture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTextureFogSGIX = (PFNGLTEXTUREFOGSGIXPROC)glewGetProcAddress((const GLubyte*)"glTextureFogSGIX")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIX_fog_texture */ + +#ifdef GL_SGIX_fragment_specular_lighting + +static GLboolean _glewInit_GL_SGIX_fragment_specular_lighting (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFragmentColorMaterialSGIX = (PFNGLFRAGMENTCOLORMATERIALSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentColorMaterialSGIX")) == NULL) || r; + r = ((glFragmentLightModelfSGIX = (PFNGLFRAGMENTLIGHTMODELFSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelfSGIX")) == NULL) || r; + r = ((glFragmentLightModelfvSGIX = (PFNGLFRAGMENTLIGHTMODELFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelfvSGIX")) == NULL) || r; + r = ((glFragmentLightModeliSGIX = (PFNGLFRAGMENTLIGHTMODELISGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModeliSGIX")) == NULL) || r; + r = ((glFragmentLightModelivSGIX = (PFNGLFRAGMENTLIGHTMODELIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelivSGIX")) == NULL) || r; + r = ((glFragmentLightfSGIX = (PFNGLFRAGMENTLIGHTFSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightfSGIX")) == NULL) || r; + r = ((glFragmentLightfvSGIX = (PFNGLFRAGMENTLIGHTFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightfvSGIX")) == NULL) || r; + r = ((glFragmentLightiSGIX = (PFNGLFRAGMENTLIGHTISGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightiSGIX")) == NULL) || r; + r = ((glFragmentLightivSGIX = (PFNGLFRAGMENTLIGHTIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightivSGIX")) == NULL) || r; + r = ((glFragmentMaterialfSGIX = (PFNGLFRAGMENTMATERIALFSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialfSGIX")) == NULL) || r; + r = ((glFragmentMaterialfvSGIX = (PFNGLFRAGMENTMATERIALFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialfvSGIX")) == NULL) || r; + r = ((glFragmentMaterialiSGIX = (PFNGLFRAGMENTMATERIALISGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialiSGIX")) == NULL) || r; + r = ((glFragmentMaterialivSGIX = (PFNGLFRAGMENTMATERIALIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialivSGIX")) == NULL) || r; + r = ((glGetFragmentLightfvSGIX = (PFNGLGETFRAGMENTLIGHTFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentLightfvSGIX")) == NULL) || r; + r = ((glGetFragmentLightivSGIX = (PFNGLGETFRAGMENTLIGHTIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentLightivSGIX")) == NULL) || r; + r = ((glGetFragmentMaterialfvSGIX = (PFNGLGETFRAGMENTMATERIALFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentMaterialfvSGIX")) == NULL) || r; + r = ((glGetFragmentMaterialivSGIX = (PFNGLGETFRAGMENTMATERIALIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentMaterialivSGIX")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIX_fragment_specular_lighting */ + +#ifdef GL_SGIX_framezoom + +static GLboolean _glewInit_GL_SGIX_framezoom (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFrameZoomSGIX = (PFNGLFRAMEZOOMSGIXPROC)glewGetProcAddress((const GLubyte*)"glFrameZoomSGIX")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIX_framezoom */ + +#ifdef GL_SGIX_interlace + +#endif /* GL_SGIX_interlace */ + +#ifdef GL_SGIX_ir_instrument1 + +#endif /* GL_SGIX_ir_instrument1 */ + +#ifdef GL_SGIX_list_priority + +#endif /* GL_SGIX_list_priority */ + +#ifdef GL_SGIX_pixel_texture + +static GLboolean _glewInit_GL_SGIX_pixel_texture (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glPixelTexGenSGIX = (PFNGLPIXELTEXGENSGIXPROC)glewGetProcAddress((const GLubyte*)"glPixelTexGenSGIX")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIX_pixel_texture */ + +#ifdef GL_SGIX_pixel_texture_bits + +#endif /* GL_SGIX_pixel_texture_bits */ + +#ifdef GL_SGIX_reference_plane + +static GLboolean _glewInit_GL_SGIX_reference_plane (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glReferencePlaneSGIX = (PFNGLREFERENCEPLANESGIXPROC)glewGetProcAddress((const GLubyte*)"glReferencePlaneSGIX")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIX_reference_plane */ + +#ifdef GL_SGIX_resample + +#endif /* GL_SGIX_resample */ + +#ifdef GL_SGIX_shadow + +#endif /* GL_SGIX_shadow */ + +#ifdef GL_SGIX_shadow_ambient + +#endif /* GL_SGIX_shadow_ambient */ + +#ifdef GL_SGIX_sprite + +static GLboolean _glewInit_GL_SGIX_sprite (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glSpriteParameterfSGIX = (PFNGLSPRITEPARAMETERFSGIXPROC)glewGetProcAddress((const GLubyte*)"glSpriteParameterfSGIX")) == NULL) || r; + r = ((glSpriteParameterfvSGIX = (PFNGLSPRITEPARAMETERFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glSpriteParameterfvSGIX")) == NULL) || r; + r = ((glSpriteParameteriSGIX = (PFNGLSPRITEPARAMETERISGIXPROC)glewGetProcAddress((const GLubyte*)"glSpriteParameteriSGIX")) == NULL) || r; + r = ((glSpriteParameterivSGIX = (PFNGLSPRITEPARAMETERIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glSpriteParameterivSGIX")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIX_sprite */ + +#ifdef GL_SGIX_tag_sample_buffer + +static GLboolean _glewInit_GL_SGIX_tag_sample_buffer (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glTagSampleBufferSGIX = (PFNGLTAGSAMPLEBUFFERSGIXPROC)glewGetProcAddress((const GLubyte*)"glTagSampleBufferSGIX")) == NULL) || r; + + return r; +} + +#endif /* GL_SGIX_tag_sample_buffer */ + +#ifdef GL_SGIX_texture_add_env + +#endif /* GL_SGIX_texture_add_env */ + +#ifdef GL_SGIX_texture_coordinate_clamp + +#endif /* GL_SGIX_texture_coordinate_clamp */ + +#ifdef GL_SGIX_texture_lod_bias + +#endif /* GL_SGIX_texture_lod_bias */ + +#ifdef GL_SGIX_texture_multi_buffer + +#endif /* GL_SGIX_texture_multi_buffer */ + +#ifdef GL_SGIX_texture_range + +#endif /* GL_SGIX_texture_range */ + +#ifdef GL_SGIX_texture_scale_bias + +#endif /* GL_SGIX_texture_scale_bias */ + +#ifdef GL_SGIX_vertex_preclip + +#endif /* GL_SGIX_vertex_preclip */ + +#ifdef GL_SGIX_vertex_preclip_hint + +#endif /* GL_SGIX_vertex_preclip_hint */ + +#ifdef GL_SGIX_ycrcb + +#endif /* GL_SGIX_ycrcb */ + +#ifdef GL_SGI_color_matrix + +#endif /* GL_SGI_color_matrix */ + +#ifdef GL_SGI_color_table + +static GLboolean _glewInit_GL_SGI_color_table (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glColorTableParameterfvSGI = (PFNGLCOLORTABLEPARAMETERFVSGIPROC)glewGetProcAddress((const GLubyte*)"glColorTableParameterfvSGI")) == NULL) || r; + r = ((glColorTableParameterivSGI = (PFNGLCOLORTABLEPARAMETERIVSGIPROC)glewGetProcAddress((const GLubyte*)"glColorTableParameterivSGI")) == NULL) || r; + r = ((glColorTableSGI = (PFNGLCOLORTABLESGIPROC)glewGetProcAddress((const GLubyte*)"glColorTableSGI")) == NULL) || r; + r = ((glCopyColorTableSGI = (PFNGLCOPYCOLORTABLESGIPROC)glewGetProcAddress((const GLubyte*)"glCopyColorTableSGI")) == NULL) || r; + r = ((glGetColorTableParameterfvSGI = (PFNGLGETCOLORTABLEPARAMETERFVSGIPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterfvSGI")) == NULL) || r; + r = ((glGetColorTableParameterivSGI = (PFNGLGETCOLORTABLEPARAMETERIVSGIPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterivSGI")) == NULL) || r; + r = ((glGetColorTableSGI = (PFNGLGETCOLORTABLESGIPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableSGI")) == NULL) || r; + + return r; +} + +#endif /* GL_SGI_color_table */ + +#ifdef GL_SGI_texture_color_table + +#endif /* GL_SGI_texture_color_table */ + +#ifdef GL_SUNX_constant_data + +static GLboolean _glewInit_GL_SUNX_constant_data (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glFinishTextureSUNX = (PFNGLFINISHTEXTURESUNXPROC)glewGetProcAddress((const GLubyte*)"glFinishTextureSUNX")) == NULL) || r; + + return r; +} + +#endif /* GL_SUNX_constant_data */ + +#ifdef GL_SUN_convolution_border_modes + +#endif /* GL_SUN_convolution_border_modes */ + +#ifdef GL_SUN_global_alpha + +static GLboolean _glewInit_GL_SUN_global_alpha (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glGlobalAlphaFactorbSUN = (PFNGLGLOBALALPHAFACTORBSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorbSUN")) == NULL) || r; + r = ((glGlobalAlphaFactordSUN = (PFNGLGLOBALALPHAFACTORDSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactordSUN")) == NULL) || r; + r = ((glGlobalAlphaFactorfSUN = (PFNGLGLOBALALPHAFACTORFSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorfSUN")) == NULL) || r; + r = ((glGlobalAlphaFactoriSUN = (PFNGLGLOBALALPHAFACTORISUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactoriSUN")) == NULL) || r; + r = ((glGlobalAlphaFactorsSUN = (PFNGLGLOBALALPHAFACTORSSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorsSUN")) == NULL) || r; + r = ((glGlobalAlphaFactorubSUN = (PFNGLGLOBALALPHAFACTORUBSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorubSUN")) == NULL) || r; + r = ((glGlobalAlphaFactoruiSUN = (PFNGLGLOBALALPHAFACTORUISUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactoruiSUN")) == NULL) || r; + r = ((glGlobalAlphaFactorusSUN = (PFNGLGLOBALALPHAFACTORUSSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorusSUN")) == NULL) || r; + + return r; +} + +#endif /* GL_SUN_global_alpha */ + +#ifdef GL_SUN_mesh_array + +#endif /* GL_SUN_mesh_array */ + +#ifdef GL_SUN_read_video_pixels + +static GLboolean _glewInit_GL_SUN_read_video_pixels (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glReadVideoPixelsSUN = (PFNGLREADVIDEOPIXELSSUNPROC)glewGetProcAddress((const GLubyte*)"glReadVideoPixelsSUN")) == NULL) || r; + + return r; +} + +#endif /* GL_SUN_read_video_pixels */ + +#ifdef GL_SUN_slice_accum + +#endif /* GL_SUN_slice_accum */ + +#ifdef GL_SUN_triangle_list + +static GLboolean _glewInit_GL_SUN_triangle_list (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glReplacementCodePointerSUN = (PFNGLREPLACEMENTCODEPOINTERSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodePointerSUN")) == NULL) || r; + r = ((glReplacementCodeubSUN = (PFNGLREPLACEMENTCODEUBSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeubSUN")) == NULL) || r; + r = ((glReplacementCodeubvSUN = (PFNGLREPLACEMENTCODEUBVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeubvSUN")) == NULL) || r; + r = ((glReplacementCodeuiSUN = (PFNGLREPLACEMENTCODEUISUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiSUN")) == NULL) || r; + r = ((glReplacementCodeuivSUN = (PFNGLREPLACEMENTCODEUIVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuivSUN")) == NULL) || r; + r = ((glReplacementCodeusSUN = (PFNGLREPLACEMENTCODEUSSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeusSUN")) == NULL) || r; + r = ((glReplacementCodeusvSUN = (PFNGLREPLACEMENTCODEUSVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeusvSUN")) == NULL) || r; + + return r; +} + +#endif /* GL_SUN_triangle_list */ + +#ifdef GL_SUN_vertex + +static GLboolean _glewInit_GL_SUN_vertex (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glColor3fVertex3fSUN = (PFNGLCOLOR3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glColor3fVertex3fSUN")) == NULL) || r; + r = ((glColor3fVertex3fvSUN = (PFNGLCOLOR3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glColor3fVertex3fvSUN")) == NULL) || r; + r = ((glColor4fNormal3fVertex3fSUN = (PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4fNormal3fVertex3fSUN")) == NULL) || r; + r = ((glColor4fNormal3fVertex3fvSUN = (PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4fNormal3fVertex3fvSUN")) == NULL) || r; + r = ((glColor4ubVertex2fSUN = (PFNGLCOLOR4UBVERTEX2FSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4ubVertex2fSUN")) == NULL) || r; + r = ((glColor4ubVertex2fvSUN = (PFNGLCOLOR4UBVERTEX2FVSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4ubVertex2fvSUN")) == NULL) || r; + r = ((glColor4ubVertex3fSUN = (PFNGLCOLOR4UBVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4ubVertex3fSUN")) == NULL) || r; + r = ((glColor4ubVertex3fvSUN = (PFNGLCOLOR4UBVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4ubVertex3fvSUN")) == NULL) || r; + r = ((glNormal3fVertex3fSUN = (PFNGLNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glNormal3fVertex3fSUN")) == NULL) || r; + r = ((glNormal3fVertex3fvSUN = (PFNGLNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glNormal3fVertex3fvSUN")) == NULL) || r; + r = ((glReplacementCodeuiColor3fVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor3fVertex3fSUN")) == NULL) || r; + r = ((glReplacementCodeuiColor3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor3fVertex3fvSUN")) == NULL) || r; + r = ((glReplacementCodeuiColor4fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor4fNormal3fVertex3fSUN")) == NULL) || r; + r = ((glReplacementCodeuiColor4fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor4fNormal3fVertex3fvSUN")) == NULL) || r; + r = ((glReplacementCodeuiColor4ubVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor4ubVertex3fSUN")) == NULL) || r; + r = ((glReplacementCodeuiColor4ubVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor4ubVertex3fvSUN")) == NULL) || r; + r = ((glReplacementCodeuiNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiNormal3fVertex3fSUN")) == NULL) || r; + r = ((glReplacementCodeuiNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiNormal3fVertex3fvSUN")) == NULL) || r; + r = ((glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN")) == NULL) || r; + r = ((glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN")) == NULL) || r; + r = ((glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN")) == NULL) || r; + r = ((glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN")) == NULL) || r; + r = ((glReplacementCodeuiTexCoord2fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fVertex3fSUN")) == NULL) || r; + r = ((glReplacementCodeuiTexCoord2fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fVertex3fvSUN")) == NULL) || r; + r = ((glReplacementCodeuiVertex3fSUN = (PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiVertex3fSUN")) == NULL) || r; + r = ((glReplacementCodeuiVertex3fvSUN = (PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiVertex3fvSUN")) == NULL) || r; + r = ((glTexCoord2fColor3fVertex3fSUN = (PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor3fVertex3fSUN")) == NULL) || r; + r = ((glTexCoord2fColor3fVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor3fVertex3fvSUN")) == NULL) || r; + r = ((glTexCoord2fColor4fNormal3fVertex3fSUN = (PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor4fNormal3fVertex3fSUN")) == NULL) || r; + r = ((glTexCoord2fColor4fNormal3fVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor4fNormal3fVertex3fvSUN")) == NULL) || r; + r = ((glTexCoord2fColor4ubVertex3fSUN = (PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor4ubVertex3fSUN")) == NULL) || r; + r = ((glTexCoord2fColor4ubVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor4ubVertex3fvSUN")) == NULL) || r; + r = ((glTexCoord2fNormal3fVertex3fSUN = (PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fNormal3fVertex3fSUN")) == NULL) || r; + r = ((glTexCoord2fNormal3fVertex3fvSUN = (PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fNormal3fVertex3fvSUN")) == NULL) || r; + r = ((glTexCoord2fVertex3fSUN = (PFNGLTEXCOORD2FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fVertex3fSUN")) == NULL) || r; + r = ((glTexCoord2fVertex3fvSUN = (PFNGLTEXCOORD2FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fVertex3fvSUN")) == NULL) || r; + r = ((glTexCoord4fColor4fNormal3fVertex4fSUN = (PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4fColor4fNormal3fVertex4fSUN")) == NULL) || r; + r = ((glTexCoord4fColor4fNormal3fVertex4fvSUN = (PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4fColor4fNormal3fVertex4fvSUN")) == NULL) || r; + r = ((glTexCoord4fVertex4fSUN = (PFNGLTEXCOORD4FVERTEX4FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4fVertex4fSUN")) == NULL) || r; + r = ((glTexCoord4fVertex4fvSUN = (PFNGLTEXCOORD4FVERTEX4FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4fVertex4fvSUN")) == NULL) || r; + + return r; +} + +#endif /* GL_SUN_vertex */ + +#ifdef GL_WIN_phong_shading + +#endif /* GL_WIN_phong_shading */ + +#ifdef GL_WIN_specular_fog + +#endif /* GL_WIN_specular_fog */ + +#ifdef GL_WIN_swap_hint + +static GLboolean _glewInit_GL_WIN_swap_hint (GLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glAddSwapHintRectWIN = (PFNGLADDSWAPHINTRECTWINPROC)glewGetProcAddress((const GLubyte*)"glAddSwapHintRectWIN")) == NULL) || r; + + return r; +} + +#endif /* GL_WIN_swap_hint */ + +/* ------------------------------------------------------------------------- */ + +/* + * Search for name in the extensions string. Use of strstr() + * is not sufficient because extension names can be prefixes of + * other extension names. Could use strtok() but the constant + * string returned by glGetString might be in read-only memory. + */ +GLboolean glewGetExtension (const char* name) +{ + GLubyte* p; + GLubyte* end; + GLuint len = _glewStrLen((const GLubyte*)name); + p = (GLubyte*)glGetString(GL_EXTENSIONS); + if (0 == p) return GL_FALSE; + end = p + _glewStrLen(p); + while (p < end) + { + GLuint n = _glewStrCLen(p, ' '); + if (len == n && _glewStrSame((const GLubyte*)name, p, n)) return GL_TRUE; + p += n+1; + } + return GL_FALSE; +} + +/* ------------------------------------------------------------------------- */ + +#ifndef GLEW_MX +static +#endif +GLenum glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) +{ + const GLubyte* s; + GLuint dot, major, minor; + /* query opengl version */ + s = glGetString(GL_VERSION); + dot = _glewStrCLen(s, '.'); + major = dot-1; + minor = dot+1; + if (dot == 0 || s[minor] == '\0') + return GLEW_ERROR_NO_GL_VERSION; + if (s[major] == '1' && s[minor] == '0') + { + return GLEW_ERROR_GL_VERSION_10_ONLY; + } + else + { + CONST_CAST(GLEW_VERSION_1_1) = GL_TRUE; + if (s[major] >= '2') + { + CONST_CAST(GLEW_VERSION_1_2) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_3) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_4) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_5) = GL_TRUE; + CONST_CAST(GLEW_VERSION_2_0) = GL_TRUE; + if (s[minor] >= '1') + { + CONST_CAST(GLEW_VERSION_2_1) = GL_TRUE; + } + } + else + { + if (s[minor] >= '5') + { + CONST_CAST(GLEW_VERSION_1_2) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_3) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_4) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_5) = GL_TRUE; + CONST_CAST(GLEW_VERSION_2_0) = GL_FALSE; + CONST_CAST(GLEW_VERSION_2_1) = GL_FALSE; + } + if (s[minor] == '4') + { + CONST_CAST(GLEW_VERSION_1_2) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_3) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_4) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_5) = GL_FALSE; + CONST_CAST(GLEW_VERSION_2_0) = GL_FALSE; + CONST_CAST(GLEW_VERSION_2_1) = GL_FALSE; + } + if (s[minor] == '3') + { + CONST_CAST(GLEW_VERSION_1_2) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_3) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_4) = GL_FALSE; + CONST_CAST(GLEW_VERSION_1_5) = GL_FALSE; + CONST_CAST(GLEW_VERSION_2_0) = GL_FALSE; + CONST_CAST(GLEW_VERSION_2_1) = GL_FALSE; + } + if (s[minor] == '2') + { + CONST_CAST(GLEW_VERSION_1_2) = GL_TRUE; + CONST_CAST(GLEW_VERSION_1_3) = GL_FALSE; + CONST_CAST(GLEW_VERSION_1_4) = GL_FALSE; + CONST_CAST(GLEW_VERSION_1_5) = GL_FALSE; + CONST_CAST(GLEW_VERSION_2_0) = GL_FALSE; + CONST_CAST(GLEW_VERSION_2_1) = GL_FALSE; + } + if (s[minor] < '2') + { + CONST_CAST(GLEW_VERSION_1_2) = GL_FALSE; + CONST_CAST(GLEW_VERSION_1_3) = GL_FALSE; + CONST_CAST(GLEW_VERSION_1_4) = GL_FALSE; + CONST_CAST(GLEW_VERSION_1_5) = GL_FALSE; + CONST_CAST(GLEW_VERSION_2_0) = GL_FALSE; + CONST_CAST(GLEW_VERSION_2_1) = GL_FALSE; + } + } + } + /* initialize extensions */ +#ifdef GL_VERSION_1_2 + if (glewExperimental || GLEW_VERSION_1_2) CONST_CAST(GLEW_VERSION_1_2) = !_glewInit_GL_VERSION_1_2(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_VERSION_1_2 */ +#ifdef GL_VERSION_1_3 + if (glewExperimental || GLEW_VERSION_1_3) CONST_CAST(GLEW_VERSION_1_3) = !_glewInit_GL_VERSION_1_3(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_VERSION_1_3 */ +#ifdef GL_VERSION_1_4 + if (glewExperimental || GLEW_VERSION_1_4) CONST_CAST(GLEW_VERSION_1_4) = !_glewInit_GL_VERSION_1_4(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_VERSION_1_4 */ +#ifdef GL_VERSION_1_5 + if (glewExperimental || GLEW_VERSION_1_5) CONST_CAST(GLEW_VERSION_1_5) = !_glewInit_GL_VERSION_1_5(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_VERSION_1_5 */ +#ifdef GL_VERSION_2_0 + if (glewExperimental || GLEW_VERSION_2_0) CONST_CAST(GLEW_VERSION_2_0) = !_glewInit_GL_VERSION_2_0(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_VERSION_2_0 */ +#ifdef GL_VERSION_2_1 + if (glewExperimental || GLEW_VERSION_2_1) CONST_CAST(GLEW_VERSION_2_1) = !_glewInit_GL_VERSION_2_1(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_VERSION_2_1 */ +#ifdef GL_3DFX_multisample + CONST_CAST(GLEW_3DFX_multisample) = glewGetExtension("GL_3DFX_multisample"); +#endif /* GL_3DFX_multisample */ +#ifdef GL_3DFX_tbuffer + CONST_CAST(GLEW_3DFX_tbuffer) = glewGetExtension("GL_3DFX_tbuffer"); + if (glewExperimental || GLEW_3DFX_tbuffer) CONST_CAST(GLEW_3DFX_tbuffer) = !_glewInit_GL_3DFX_tbuffer(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_3DFX_tbuffer */ +#ifdef GL_3DFX_texture_compression_FXT1 + CONST_CAST(GLEW_3DFX_texture_compression_FXT1) = glewGetExtension("GL_3DFX_texture_compression_FXT1"); +#endif /* GL_3DFX_texture_compression_FXT1 */ +#ifdef GL_APPLE_client_storage + CONST_CAST(GLEW_APPLE_client_storage) = glewGetExtension("GL_APPLE_client_storage"); +#endif /* GL_APPLE_client_storage */ +#ifdef GL_APPLE_element_array + CONST_CAST(GLEW_APPLE_element_array) = glewGetExtension("GL_APPLE_element_array"); + if (glewExperimental || GLEW_APPLE_element_array) CONST_CAST(GLEW_APPLE_element_array) = !_glewInit_GL_APPLE_element_array(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_APPLE_element_array */ +#ifdef GL_APPLE_fence + CONST_CAST(GLEW_APPLE_fence) = glewGetExtension("GL_APPLE_fence"); + if (glewExperimental || GLEW_APPLE_fence) CONST_CAST(GLEW_APPLE_fence) = !_glewInit_GL_APPLE_fence(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_APPLE_fence */ +#ifdef GL_APPLE_float_pixels + CONST_CAST(GLEW_APPLE_float_pixels) = glewGetExtension("GL_APPLE_float_pixels"); +#endif /* GL_APPLE_float_pixels */ +#ifdef GL_APPLE_flush_buffer_range + CONST_CAST(GLEW_APPLE_flush_buffer_range) = glewGetExtension("GL_APPLE_flush_buffer_range"); + if (glewExperimental || GLEW_APPLE_flush_buffer_range) CONST_CAST(GLEW_APPLE_flush_buffer_range) = !_glewInit_GL_APPLE_flush_buffer_range(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_APPLE_flush_buffer_range */ +#ifdef GL_APPLE_pixel_buffer + CONST_CAST(GLEW_APPLE_pixel_buffer) = glewGetExtension("GL_APPLE_pixel_buffer"); +#endif /* GL_APPLE_pixel_buffer */ +#ifdef GL_APPLE_specular_vector + CONST_CAST(GLEW_APPLE_specular_vector) = glewGetExtension("GL_APPLE_specular_vector"); +#endif /* GL_APPLE_specular_vector */ +#ifdef GL_APPLE_texture_range + CONST_CAST(GLEW_APPLE_texture_range) = glewGetExtension("GL_APPLE_texture_range"); + if (glewExperimental || GLEW_APPLE_texture_range) CONST_CAST(GLEW_APPLE_texture_range) = !_glewInit_GL_APPLE_texture_range(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_APPLE_texture_range */ +#ifdef GL_APPLE_transform_hint + CONST_CAST(GLEW_APPLE_transform_hint) = glewGetExtension("GL_APPLE_transform_hint"); +#endif /* GL_APPLE_transform_hint */ +#ifdef GL_APPLE_vertex_array_object + CONST_CAST(GLEW_APPLE_vertex_array_object) = glewGetExtension("GL_APPLE_vertex_array_object"); + if (glewExperimental || GLEW_APPLE_vertex_array_object) CONST_CAST(GLEW_APPLE_vertex_array_object) = !_glewInit_GL_APPLE_vertex_array_object(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_APPLE_vertex_array_object */ +#ifdef GL_APPLE_vertex_array_range + CONST_CAST(GLEW_APPLE_vertex_array_range) = glewGetExtension("GL_APPLE_vertex_array_range"); + if (glewExperimental || GLEW_APPLE_vertex_array_range) CONST_CAST(GLEW_APPLE_vertex_array_range) = !_glewInit_GL_APPLE_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_APPLE_vertex_array_range */ +#ifdef GL_APPLE_ycbcr_422 + CONST_CAST(GLEW_APPLE_ycbcr_422) = glewGetExtension("GL_APPLE_ycbcr_422"); +#endif /* GL_APPLE_ycbcr_422 */ +#ifdef GL_ARB_color_buffer_float + CONST_CAST(GLEW_ARB_color_buffer_float) = glewGetExtension("GL_ARB_color_buffer_float"); + if (glewExperimental || GLEW_ARB_color_buffer_float) CONST_CAST(GLEW_ARB_color_buffer_float) = !_glewInit_GL_ARB_color_buffer_float(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_color_buffer_float */ +#ifdef GL_ARB_depth_texture + CONST_CAST(GLEW_ARB_depth_texture) = glewGetExtension("GL_ARB_depth_texture"); +#endif /* GL_ARB_depth_texture */ +#ifdef GL_ARB_draw_buffers + CONST_CAST(GLEW_ARB_draw_buffers) = glewGetExtension("GL_ARB_draw_buffers"); + if (glewExperimental || GLEW_ARB_draw_buffers) CONST_CAST(GLEW_ARB_draw_buffers) = !_glewInit_GL_ARB_draw_buffers(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_draw_buffers */ +#ifdef GL_ARB_fragment_program + CONST_CAST(GLEW_ARB_fragment_program) = glewGetExtension("GL_ARB_fragment_program"); +#endif /* GL_ARB_fragment_program */ +#ifdef GL_ARB_fragment_program_shadow + CONST_CAST(GLEW_ARB_fragment_program_shadow) = glewGetExtension("GL_ARB_fragment_program_shadow"); +#endif /* GL_ARB_fragment_program_shadow */ +#ifdef GL_ARB_fragment_shader + CONST_CAST(GLEW_ARB_fragment_shader) = glewGetExtension("GL_ARB_fragment_shader"); +#endif /* GL_ARB_fragment_shader */ +#ifdef GL_ARB_half_float_pixel + CONST_CAST(GLEW_ARB_half_float_pixel) = glewGetExtension("GL_ARB_half_float_pixel"); +#endif /* GL_ARB_half_float_pixel */ +#ifdef GL_ARB_imaging + CONST_CAST(GLEW_ARB_imaging) = glewGetExtension("GL_ARB_imaging"); + if (glewExperimental || GLEW_ARB_imaging) CONST_CAST(GLEW_ARB_imaging) = !_glewInit_GL_ARB_imaging(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_imaging */ +#ifdef GL_ARB_matrix_palette + CONST_CAST(GLEW_ARB_matrix_palette) = glewGetExtension("GL_ARB_matrix_palette"); + if (glewExperimental || GLEW_ARB_matrix_palette) CONST_CAST(GLEW_ARB_matrix_palette) = !_glewInit_GL_ARB_matrix_palette(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_matrix_palette */ +#ifdef GL_ARB_multisample + CONST_CAST(GLEW_ARB_multisample) = glewGetExtension("GL_ARB_multisample"); + if (glewExperimental || GLEW_ARB_multisample) CONST_CAST(GLEW_ARB_multisample) = !_glewInit_GL_ARB_multisample(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_multisample */ +#ifdef GL_ARB_multitexture + CONST_CAST(GLEW_ARB_multitexture) = glewGetExtension("GL_ARB_multitexture"); + if (glewExperimental || GLEW_ARB_multitexture) CONST_CAST(GLEW_ARB_multitexture) = !_glewInit_GL_ARB_multitexture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_multitexture */ +#ifdef GL_ARB_occlusion_query + CONST_CAST(GLEW_ARB_occlusion_query) = glewGetExtension("GL_ARB_occlusion_query"); + if (glewExperimental || GLEW_ARB_occlusion_query) CONST_CAST(GLEW_ARB_occlusion_query) = !_glewInit_GL_ARB_occlusion_query(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_occlusion_query */ +#ifdef GL_ARB_pixel_buffer_object + CONST_CAST(GLEW_ARB_pixel_buffer_object) = glewGetExtension("GL_ARB_pixel_buffer_object"); +#endif /* GL_ARB_pixel_buffer_object */ +#ifdef GL_ARB_point_parameters + CONST_CAST(GLEW_ARB_point_parameters) = glewGetExtension("GL_ARB_point_parameters"); + if (glewExperimental || GLEW_ARB_point_parameters) CONST_CAST(GLEW_ARB_point_parameters) = !_glewInit_GL_ARB_point_parameters(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_point_parameters */ +#ifdef GL_ARB_point_sprite + CONST_CAST(GLEW_ARB_point_sprite) = glewGetExtension("GL_ARB_point_sprite"); +#endif /* GL_ARB_point_sprite */ +#ifdef GL_ARB_shader_objects + CONST_CAST(GLEW_ARB_shader_objects) = glewGetExtension("GL_ARB_shader_objects"); + if (glewExperimental || GLEW_ARB_shader_objects) CONST_CAST(GLEW_ARB_shader_objects) = !_glewInit_GL_ARB_shader_objects(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_shader_objects */ +#ifdef GL_ARB_shading_language_100 + CONST_CAST(GLEW_ARB_shading_language_100) = glewGetExtension("GL_ARB_shading_language_100"); +#endif /* GL_ARB_shading_language_100 */ +#ifdef GL_ARB_shadow + CONST_CAST(GLEW_ARB_shadow) = glewGetExtension("GL_ARB_shadow"); +#endif /* GL_ARB_shadow */ +#ifdef GL_ARB_shadow_ambient + CONST_CAST(GLEW_ARB_shadow_ambient) = glewGetExtension("GL_ARB_shadow_ambient"); +#endif /* GL_ARB_shadow_ambient */ +#ifdef GL_ARB_texture_border_clamp + CONST_CAST(GLEW_ARB_texture_border_clamp) = glewGetExtension("GL_ARB_texture_border_clamp"); +#endif /* GL_ARB_texture_border_clamp */ +#ifdef GL_ARB_texture_compression + CONST_CAST(GLEW_ARB_texture_compression) = glewGetExtension("GL_ARB_texture_compression"); + if (glewExperimental || GLEW_ARB_texture_compression) CONST_CAST(GLEW_ARB_texture_compression) = !_glewInit_GL_ARB_texture_compression(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_texture_compression */ +#ifdef GL_ARB_texture_cube_map + CONST_CAST(GLEW_ARB_texture_cube_map) = glewGetExtension("GL_ARB_texture_cube_map"); +#endif /* GL_ARB_texture_cube_map */ +#ifdef GL_ARB_texture_env_add + CONST_CAST(GLEW_ARB_texture_env_add) = glewGetExtension("GL_ARB_texture_env_add"); +#endif /* GL_ARB_texture_env_add */ +#ifdef GL_ARB_texture_env_combine + CONST_CAST(GLEW_ARB_texture_env_combine) = glewGetExtension("GL_ARB_texture_env_combine"); +#endif /* GL_ARB_texture_env_combine */ +#ifdef GL_ARB_texture_env_crossbar + CONST_CAST(GLEW_ARB_texture_env_crossbar) = glewGetExtension("GL_ARB_texture_env_crossbar"); +#endif /* GL_ARB_texture_env_crossbar */ +#ifdef GL_ARB_texture_env_dot3 + CONST_CAST(GLEW_ARB_texture_env_dot3) = glewGetExtension("GL_ARB_texture_env_dot3"); +#endif /* GL_ARB_texture_env_dot3 */ +#ifdef GL_ARB_texture_float + CONST_CAST(GLEW_ARB_texture_float) = glewGetExtension("GL_ARB_texture_float"); +#endif /* GL_ARB_texture_float */ +#ifdef GL_ARB_texture_mirrored_repeat + CONST_CAST(GLEW_ARB_texture_mirrored_repeat) = glewGetExtension("GL_ARB_texture_mirrored_repeat"); +#endif /* GL_ARB_texture_mirrored_repeat */ +#ifdef GL_ARB_texture_non_power_of_two + CONST_CAST(GLEW_ARB_texture_non_power_of_two) = glewGetExtension("GL_ARB_texture_non_power_of_two"); +#endif /* GL_ARB_texture_non_power_of_two */ +#ifdef GL_ARB_texture_rectangle + CONST_CAST(GLEW_ARB_texture_rectangle) = glewGetExtension("GL_ARB_texture_rectangle"); +#endif /* GL_ARB_texture_rectangle */ +#ifdef GL_ARB_transpose_matrix + CONST_CAST(GLEW_ARB_transpose_matrix) = glewGetExtension("GL_ARB_transpose_matrix"); + if (glewExperimental || GLEW_ARB_transpose_matrix) CONST_CAST(GLEW_ARB_transpose_matrix) = !_glewInit_GL_ARB_transpose_matrix(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_transpose_matrix */ +#ifdef GL_ARB_vertex_blend + CONST_CAST(GLEW_ARB_vertex_blend) = glewGetExtension("GL_ARB_vertex_blend"); + if (glewExperimental || GLEW_ARB_vertex_blend) CONST_CAST(GLEW_ARB_vertex_blend) = !_glewInit_GL_ARB_vertex_blend(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_vertex_blend */ +#ifdef GL_ARB_vertex_buffer_object + CONST_CAST(GLEW_ARB_vertex_buffer_object) = glewGetExtension("GL_ARB_vertex_buffer_object"); + if (glewExperimental || GLEW_ARB_vertex_buffer_object) CONST_CAST(GLEW_ARB_vertex_buffer_object) = !_glewInit_GL_ARB_vertex_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_vertex_buffer_object */ +#ifdef GL_ARB_vertex_program + CONST_CAST(GLEW_ARB_vertex_program) = glewGetExtension("GL_ARB_vertex_program"); + if (glewExperimental || GLEW_ARB_vertex_program) CONST_CAST(GLEW_ARB_vertex_program) = !_glewInit_GL_ARB_vertex_program(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_vertex_program */ +#ifdef GL_ARB_vertex_shader + CONST_CAST(GLEW_ARB_vertex_shader) = glewGetExtension("GL_ARB_vertex_shader"); + if (glewExperimental || GLEW_ARB_vertex_shader) CONST_CAST(GLEW_ARB_vertex_shader) = !_glewInit_GL_ARB_vertex_shader(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_vertex_shader */ +#ifdef GL_ARB_window_pos + CONST_CAST(GLEW_ARB_window_pos) = glewGetExtension("GL_ARB_window_pos"); + if (glewExperimental || GLEW_ARB_window_pos) CONST_CAST(GLEW_ARB_window_pos) = !_glewInit_GL_ARB_window_pos(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ARB_window_pos */ +#ifdef GL_ATIX_point_sprites + CONST_CAST(GLEW_ATIX_point_sprites) = glewGetExtension("GL_ATIX_point_sprites"); +#endif /* GL_ATIX_point_sprites */ +#ifdef GL_ATIX_texture_env_combine3 + CONST_CAST(GLEW_ATIX_texture_env_combine3) = glewGetExtension("GL_ATIX_texture_env_combine3"); +#endif /* GL_ATIX_texture_env_combine3 */ +#ifdef GL_ATIX_texture_env_route + CONST_CAST(GLEW_ATIX_texture_env_route) = glewGetExtension("GL_ATIX_texture_env_route"); +#endif /* GL_ATIX_texture_env_route */ +#ifdef GL_ATIX_vertex_shader_output_point_size + CONST_CAST(GLEW_ATIX_vertex_shader_output_point_size) = glewGetExtension("GL_ATIX_vertex_shader_output_point_size"); +#endif /* GL_ATIX_vertex_shader_output_point_size */ +#ifdef GL_ATI_draw_buffers + CONST_CAST(GLEW_ATI_draw_buffers) = glewGetExtension("GL_ATI_draw_buffers"); + if (glewExperimental || GLEW_ATI_draw_buffers) CONST_CAST(GLEW_ATI_draw_buffers) = !_glewInit_GL_ATI_draw_buffers(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ATI_draw_buffers */ +#ifdef GL_ATI_element_array + CONST_CAST(GLEW_ATI_element_array) = glewGetExtension("GL_ATI_element_array"); + if (glewExperimental || GLEW_ATI_element_array) CONST_CAST(GLEW_ATI_element_array) = !_glewInit_GL_ATI_element_array(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ATI_element_array */ +#ifdef GL_ATI_envmap_bumpmap + CONST_CAST(GLEW_ATI_envmap_bumpmap) = glewGetExtension("GL_ATI_envmap_bumpmap"); + if (glewExperimental || GLEW_ATI_envmap_bumpmap) CONST_CAST(GLEW_ATI_envmap_bumpmap) = !_glewInit_GL_ATI_envmap_bumpmap(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ATI_envmap_bumpmap */ +#ifdef GL_ATI_fragment_shader + CONST_CAST(GLEW_ATI_fragment_shader) = glewGetExtension("GL_ATI_fragment_shader"); + if (glewExperimental || GLEW_ATI_fragment_shader) CONST_CAST(GLEW_ATI_fragment_shader) = !_glewInit_GL_ATI_fragment_shader(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ATI_fragment_shader */ +#ifdef GL_ATI_map_object_buffer + CONST_CAST(GLEW_ATI_map_object_buffer) = glewGetExtension("GL_ATI_map_object_buffer"); + if (glewExperimental || GLEW_ATI_map_object_buffer) CONST_CAST(GLEW_ATI_map_object_buffer) = !_glewInit_GL_ATI_map_object_buffer(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ATI_map_object_buffer */ +#ifdef GL_ATI_pn_triangles + CONST_CAST(GLEW_ATI_pn_triangles) = glewGetExtension("GL_ATI_pn_triangles"); + if (glewExperimental || GLEW_ATI_pn_triangles) CONST_CAST(GLEW_ATI_pn_triangles) = !_glewInit_GL_ATI_pn_triangles(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ATI_pn_triangles */ +#ifdef GL_ATI_separate_stencil + CONST_CAST(GLEW_ATI_separate_stencil) = glewGetExtension("GL_ATI_separate_stencil"); + if (glewExperimental || GLEW_ATI_separate_stencil) CONST_CAST(GLEW_ATI_separate_stencil) = !_glewInit_GL_ATI_separate_stencil(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ATI_separate_stencil */ +#ifdef GL_ATI_shader_texture_lod + CONST_CAST(GLEW_ATI_shader_texture_lod) = glewGetExtension("GL_ATI_shader_texture_lod"); +#endif /* GL_ATI_shader_texture_lod */ +#ifdef GL_ATI_text_fragment_shader + CONST_CAST(GLEW_ATI_text_fragment_shader) = glewGetExtension("GL_ATI_text_fragment_shader"); +#endif /* GL_ATI_text_fragment_shader */ +#ifdef GL_ATI_texture_compression_3dc + CONST_CAST(GLEW_ATI_texture_compression_3dc) = glewGetExtension("GL_ATI_texture_compression_3dc"); +#endif /* GL_ATI_texture_compression_3dc */ +#ifdef GL_ATI_texture_env_combine3 + CONST_CAST(GLEW_ATI_texture_env_combine3) = glewGetExtension("GL_ATI_texture_env_combine3"); +#endif /* GL_ATI_texture_env_combine3 */ +#ifdef GL_ATI_texture_float + CONST_CAST(GLEW_ATI_texture_float) = glewGetExtension("GL_ATI_texture_float"); +#endif /* GL_ATI_texture_float */ +#ifdef GL_ATI_texture_mirror_once + CONST_CAST(GLEW_ATI_texture_mirror_once) = glewGetExtension("GL_ATI_texture_mirror_once"); +#endif /* GL_ATI_texture_mirror_once */ +#ifdef GL_ATI_vertex_array_object + CONST_CAST(GLEW_ATI_vertex_array_object) = glewGetExtension("GL_ATI_vertex_array_object"); + if (glewExperimental || GLEW_ATI_vertex_array_object) CONST_CAST(GLEW_ATI_vertex_array_object) = !_glewInit_GL_ATI_vertex_array_object(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ATI_vertex_array_object */ +#ifdef GL_ATI_vertex_attrib_array_object + CONST_CAST(GLEW_ATI_vertex_attrib_array_object) = glewGetExtension("GL_ATI_vertex_attrib_array_object"); + if (glewExperimental || GLEW_ATI_vertex_attrib_array_object) CONST_CAST(GLEW_ATI_vertex_attrib_array_object) = !_glewInit_GL_ATI_vertex_attrib_array_object(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ATI_vertex_attrib_array_object */ +#ifdef GL_ATI_vertex_streams + CONST_CAST(GLEW_ATI_vertex_streams) = glewGetExtension("GL_ATI_vertex_streams"); + if (glewExperimental || GLEW_ATI_vertex_streams) CONST_CAST(GLEW_ATI_vertex_streams) = !_glewInit_GL_ATI_vertex_streams(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_ATI_vertex_streams */ +#ifdef GL_EXT_422_pixels + CONST_CAST(GLEW_EXT_422_pixels) = glewGetExtension("GL_EXT_422_pixels"); +#endif /* GL_EXT_422_pixels */ +#ifdef GL_EXT_Cg_shader + CONST_CAST(GLEW_EXT_Cg_shader) = glewGetExtension("GL_EXT_Cg_shader"); +#endif /* GL_EXT_Cg_shader */ +#ifdef GL_EXT_abgr + CONST_CAST(GLEW_EXT_abgr) = glewGetExtension("GL_EXT_abgr"); +#endif /* GL_EXT_abgr */ +#ifdef GL_EXT_bgra + CONST_CAST(GLEW_EXT_bgra) = glewGetExtension("GL_EXT_bgra"); +#endif /* GL_EXT_bgra */ +#ifdef GL_EXT_bindable_uniform + CONST_CAST(GLEW_EXT_bindable_uniform) = glewGetExtension("GL_EXT_bindable_uniform"); + if (glewExperimental || GLEW_EXT_bindable_uniform) CONST_CAST(GLEW_EXT_bindable_uniform) = !_glewInit_GL_EXT_bindable_uniform(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_bindable_uniform */ +#ifdef GL_EXT_blend_color + CONST_CAST(GLEW_EXT_blend_color) = glewGetExtension("GL_EXT_blend_color"); + if (glewExperimental || GLEW_EXT_blend_color) CONST_CAST(GLEW_EXT_blend_color) = !_glewInit_GL_EXT_blend_color(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_blend_color */ +#ifdef GL_EXT_blend_equation_separate + CONST_CAST(GLEW_EXT_blend_equation_separate) = glewGetExtension("GL_EXT_blend_equation_separate"); + if (glewExperimental || GLEW_EXT_blend_equation_separate) CONST_CAST(GLEW_EXT_blend_equation_separate) = !_glewInit_GL_EXT_blend_equation_separate(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_blend_equation_separate */ +#ifdef GL_EXT_blend_func_separate + CONST_CAST(GLEW_EXT_blend_func_separate) = glewGetExtension("GL_EXT_blend_func_separate"); + if (glewExperimental || GLEW_EXT_blend_func_separate) CONST_CAST(GLEW_EXT_blend_func_separate) = !_glewInit_GL_EXT_blend_func_separate(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_blend_func_separate */ +#ifdef GL_EXT_blend_logic_op + CONST_CAST(GLEW_EXT_blend_logic_op) = glewGetExtension("GL_EXT_blend_logic_op"); +#endif /* GL_EXT_blend_logic_op */ +#ifdef GL_EXT_blend_minmax + CONST_CAST(GLEW_EXT_blend_minmax) = glewGetExtension("GL_EXT_blend_minmax"); + if (glewExperimental || GLEW_EXT_blend_minmax) CONST_CAST(GLEW_EXT_blend_minmax) = !_glewInit_GL_EXT_blend_minmax(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_blend_minmax */ +#ifdef GL_EXT_blend_subtract + CONST_CAST(GLEW_EXT_blend_subtract) = glewGetExtension("GL_EXT_blend_subtract"); +#endif /* GL_EXT_blend_subtract */ +#ifdef GL_EXT_clip_volume_hint + CONST_CAST(GLEW_EXT_clip_volume_hint) = glewGetExtension("GL_EXT_clip_volume_hint"); +#endif /* GL_EXT_clip_volume_hint */ +#ifdef GL_EXT_cmyka + CONST_CAST(GLEW_EXT_cmyka) = glewGetExtension("GL_EXT_cmyka"); +#endif /* GL_EXT_cmyka */ +#ifdef GL_EXT_color_subtable + CONST_CAST(GLEW_EXT_color_subtable) = glewGetExtension("GL_EXT_color_subtable"); + if (glewExperimental || GLEW_EXT_color_subtable) CONST_CAST(GLEW_EXT_color_subtable) = !_glewInit_GL_EXT_color_subtable(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_color_subtable */ +#ifdef GL_EXT_compiled_vertex_array + CONST_CAST(GLEW_EXT_compiled_vertex_array) = glewGetExtension("GL_EXT_compiled_vertex_array"); + if (glewExperimental || GLEW_EXT_compiled_vertex_array) CONST_CAST(GLEW_EXT_compiled_vertex_array) = !_glewInit_GL_EXT_compiled_vertex_array(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_compiled_vertex_array */ +#ifdef GL_EXT_convolution + CONST_CAST(GLEW_EXT_convolution) = glewGetExtension("GL_EXT_convolution"); + if (glewExperimental || GLEW_EXT_convolution) CONST_CAST(GLEW_EXT_convolution) = !_glewInit_GL_EXT_convolution(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_convolution */ +#ifdef GL_EXT_coordinate_frame + CONST_CAST(GLEW_EXT_coordinate_frame) = glewGetExtension("GL_EXT_coordinate_frame"); + if (glewExperimental || GLEW_EXT_coordinate_frame) CONST_CAST(GLEW_EXT_coordinate_frame) = !_glewInit_GL_EXT_coordinate_frame(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_coordinate_frame */ +#ifdef GL_EXT_copy_texture + CONST_CAST(GLEW_EXT_copy_texture) = glewGetExtension("GL_EXT_copy_texture"); + if (glewExperimental || GLEW_EXT_copy_texture) CONST_CAST(GLEW_EXT_copy_texture) = !_glewInit_GL_EXT_copy_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_copy_texture */ +#ifdef GL_EXT_cull_vertex + CONST_CAST(GLEW_EXT_cull_vertex) = glewGetExtension("GL_EXT_cull_vertex"); + if (glewExperimental || GLEW_EXT_cull_vertex) CONST_CAST(GLEW_EXT_cull_vertex) = !_glewInit_GL_EXT_cull_vertex(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_cull_vertex */ +#ifdef GL_EXT_depth_bounds_test + CONST_CAST(GLEW_EXT_depth_bounds_test) = glewGetExtension("GL_EXT_depth_bounds_test"); + if (glewExperimental || GLEW_EXT_depth_bounds_test) CONST_CAST(GLEW_EXT_depth_bounds_test) = !_glewInit_GL_EXT_depth_bounds_test(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_depth_bounds_test */ +#ifdef GL_EXT_draw_buffers2 + CONST_CAST(GLEW_EXT_draw_buffers2) = glewGetExtension("GL_EXT_draw_buffers2"); + if (glewExperimental || GLEW_EXT_draw_buffers2) CONST_CAST(GLEW_EXT_draw_buffers2) = !_glewInit_GL_EXT_draw_buffers2(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_draw_buffers2 */ +#ifdef GL_EXT_draw_instanced + CONST_CAST(GLEW_EXT_draw_instanced) = glewGetExtension("GL_EXT_draw_instanced"); + if (glewExperimental || GLEW_EXT_draw_instanced) CONST_CAST(GLEW_EXT_draw_instanced) = !_glewInit_GL_EXT_draw_instanced(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_draw_instanced */ +#ifdef GL_EXT_draw_range_elements + CONST_CAST(GLEW_EXT_draw_range_elements) = glewGetExtension("GL_EXT_draw_range_elements"); + if (glewExperimental || GLEW_EXT_draw_range_elements) CONST_CAST(GLEW_EXT_draw_range_elements) = !_glewInit_GL_EXT_draw_range_elements(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_draw_range_elements */ +#ifdef GL_EXT_fog_coord + CONST_CAST(GLEW_EXT_fog_coord) = glewGetExtension("GL_EXT_fog_coord"); + if (glewExperimental || GLEW_EXT_fog_coord) CONST_CAST(GLEW_EXT_fog_coord) = !_glewInit_GL_EXT_fog_coord(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_fog_coord */ +#ifdef GL_EXT_fragment_lighting + CONST_CAST(GLEW_EXT_fragment_lighting) = glewGetExtension("GL_EXT_fragment_lighting"); + if (glewExperimental || GLEW_EXT_fragment_lighting) CONST_CAST(GLEW_EXT_fragment_lighting) = !_glewInit_GL_EXT_fragment_lighting(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_fragment_lighting */ +#ifdef GL_EXT_framebuffer_blit + CONST_CAST(GLEW_EXT_framebuffer_blit) = glewGetExtension("GL_EXT_framebuffer_blit"); + if (glewExperimental || GLEW_EXT_framebuffer_blit) CONST_CAST(GLEW_EXT_framebuffer_blit) = !_glewInit_GL_EXT_framebuffer_blit(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_framebuffer_blit */ +#ifdef GL_EXT_framebuffer_multisample + CONST_CAST(GLEW_EXT_framebuffer_multisample) = glewGetExtension("GL_EXT_framebuffer_multisample"); + if (glewExperimental || GLEW_EXT_framebuffer_multisample) CONST_CAST(GLEW_EXT_framebuffer_multisample) = !_glewInit_GL_EXT_framebuffer_multisample(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_framebuffer_multisample */ +#ifdef GL_EXT_framebuffer_object + CONST_CAST(GLEW_EXT_framebuffer_object) = glewGetExtension("GL_EXT_framebuffer_object"); + if (glewExperimental || GLEW_EXT_framebuffer_object) CONST_CAST(GLEW_EXT_framebuffer_object) = !_glewInit_GL_EXT_framebuffer_object(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_framebuffer_object */ +#ifdef GL_EXT_framebuffer_sRGB + CONST_CAST(GLEW_EXT_framebuffer_sRGB) = glewGetExtension("GL_EXT_framebuffer_sRGB"); +#endif /* GL_EXT_framebuffer_sRGB */ +#ifdef GL_EXT_geometry_shader4 + CONST_CAST(GLEW_EXT_geometry_shader4) = glewGetExtension("GL_EXT_geometry_shader4"); + if (glewExperimental || GLEW_EXT_geometry_shader4) CONST_CAST(GLEW_EXT_geometry_shader4) = !_glewInit_GL_EXT_geometry_shader4(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_geometry_shader4 */ +#ifdef GL_EXT_gpu_program_parameters + CONST_CAST(GLEW_EXT_gpu_program_parameters) = glewGetExtension("GL_EXT_gpu_program_parameters"); + if (glewExperimental || GLEW_EXT_gpu_program_parameters) CONST_CAST(GLEW_EXT_gpu_program_parameters) = !_glewInit_GL_EXT_gpu_program_parameters(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_gpu_program_parameters */ +#ifdef GL_EXT_gpu_shader4 + CONST_CAST(GLEW_EXT_gpu_shader4) = glewGetExtension("GL_EXT_gpu_shader4"); + if (glewExperimental || GLEW_EXT_gpu_shader4) CONST_CAST(GLEW_EXT_gpu_shader4) = !_glewInit_GL_EXT_gpu_shader4(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_gpu_shader4 */ +#ifdef GL_EXT_histogram + CONST_CAST(GLEW_EXT_histogram) = glewGetExtension("GL_EXT_histogram"); + if (glewExperimental || GLEW_EXT_histogram) CONST_CAST(GLEW_EXT_histogram) = !_glewInit_GL_EXT_histogram(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_histogram */ +#ifdef GL_EXT_index_array_formats + CONST_CAST(GLEW_EXT_index_array_formats) = glewGetExtension("GL_EXT_index_array_formats"); +#endif /* GL_EXT_index_array_formats */ +#ifdef GL_EXT_index_func + CONST_CAST(GLEW_EXT_index_func) = glewGetExtension("GL_EXT_index_func"); + if (glewExperimental || GLEW_EXT_index_func) CONST_CAST(GLEW_EXT_index_func) = !_glewInit_GL_EXT_index_func(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_index_func */ +#ifdef GL_EXT_index_material + CONST_CAST(GLEW_EXT_index_material) = glewGetExtension("GL_EXT_index_material"); + if (glewExperimental || GLEW_EXT_index_material) CONST_CAST(GLEW_EXT_index_material) = !_glewInit_GL_EXT_index_material(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_index_material */ +#ifdef GL_EXT_index_texture + CONST_CAST(GLEW_EXT_index_texture) = glewGetExtension("GL_EXT_index_texture"); +#endif /* GL_EXT_index_texture */ +#ifdef GL_EXT_light_texture + CONST_CAST(GLEW_EXT_light_texture) = glewGetExtension("GL_EXT_light_texture"); + if (glewExperimental || GLEW_EXT_light_texture) CONST_CAST(GLEW_EXT_light_texture) = !_glewInit_GL_EXT_light_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_light_texture */ +#ifdef GL_EXT_misc_attribute + CONST_CAST(GLEW_EXT_misc_attribute) = glewGetExtension("GL_EXT_misc_attribute"); +#endif /* GL_EXT_misc_attribute */ +#ifdef GL_EXT_multi_draw_arrays + CONST_CAST(GLEW_EXT_multi_draw_arrays) = glewGetExtension("GL_EXT_multi_draw_arrays"); + if (glewExperimental || GLEW_EXT_multi_draw_arrays) CONST_CAST(GLEW_EXT_multi_draw_arrays) = !_glewInit_GL_EXT_multi_draw_arrays(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_multi_draw_arrays */ +#ifdef GL_EXT_multisample + CONST_CAST(GLEW_EXT_multisample) = glewGetExtension("GL_EXT_multisample"); + if (glewExperimental || GLEW_EXT_multisample) CONST_CAST(GLEW_EXT_multisample) = !_glewInit_GL_EXT_multisample(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_multisample */ +#ifdef GL_EXT_packed_depth_stencil + CONST_CAST(GLEW_EXT_packed_depth_stencil) = glewGetExtension("GL_EXT_packed_depth_stencil"); +#endif /* GL_EXT_packed_depth_stencil */ +#ifdef GL_EXT_packed_float + CONST_CAST(GLEW_EXT_packed_float) = glewGetExtension("GL_EXT_packed_float"); +#endif /* GL_EXT_packed_float */ +#ifdef GL_EXT_packed_pixels + CONST_CAST(GLEW_EXT_packed_pixels) = glewGetExtension("GL_EXT_packed_pixels"); +#endif /* GL_EXT_packed_pixels */ +#ifdef GL_EXT_paletted_texture + CONST_CAST(GLEW_EXT_paletted_texture) = glewGetExtension("GL_EXT_paletted_texture"); + if (glewExperimental || GLEW_EXT_paletted_texture) CONST_CAST(GLEW_EXT_paletted_texture) = !_glewInit_GL_EXT_paletted_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_paletted_texture */ +#ifdef GL_EXT_pixel_buffer_object + CONST_CAST(GLEW_EXT_pixel_buffer_object) = glewGetExtension("GL_EXT_pixel_buffer_object"); +#endif /* GL_EXT_pixel_buffer_object */ +#ifdef GL_EXT_pixel_transform + CONST_CAST(GLEW_EXT_pixel_transform) = glewGetExtension("GL_EXT_pixel_transform"); + if (glewExperimental || GLEW_EXT_pixel_transform) CONST_CAST(GLEW_EXT_pixel_transform) = !_glewInit_GL_EXT_pixel_transform(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_pixel_transform */ +#ifdef GL_EXT_pixel_transform_color_table + CONST_CAST(GLEW_EXT_pixel_transform_color_table) = glewGetExtension("GL_EXT_pixel_transform_color_table"); +#endif /* GL_EXT_pixel_transform_color_table */ +#ifdef GL_EXT_point_parameters + CONST_CAST(GLEW_EXT_point_parameters) = glewGetExtension("GL_EXT_point_parameters"); + if (glewExperimental || GLEW_EXT_point_parameters) CONST_CAST(GLEW_EXT_point_parameters) = !_glewInit_GL_EXT_point_parameters(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_point_parameters */ +#ifdef GL_EXT_polygon_offset + CONST_CAST(GLEW_EXT_polygon_offset) = glewGetExtension("GL_EXT_polygon_offset"); + if (glewExperimental || GLEW_EXT_polygon_offset) CONST_CAST(GLEW_EXT_polygon_offset) = !_glewInit_GL_EXT_polygon_offset(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_polygon_offset */ +#ifdef GL_EXT_rescale_normal + CONST_CAST(GLEW_EXT_rescale_normal) = glewGetExtension("GL_EXT_rescale_normal"); +#endif /* GL_EXT_rescale_normal */ +#ifdef GL_EXT_scene_marker + CONST_CAST(GLEW_EXT_scene_marker) = glewGetExtension("GL_EXT_scene_marker"); + if (glewExperimental || GLEW_EXT_scene_marker) CONST_CAST(GLEW_EXT_scene_marker) = !_glewInit_GL_EXT_scene_marker(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_scene_marker */ +#ifdef GL_EXT_secondary_color + CONST_CAST(GLEW_EXT_secondary_color) = glewGetExtension("GL_EXT_secondary_color"); + if (glewExperimental || GLEW_EXT_secondary_color) CONST_CAST(GLEW_EXT_secondary_color) = !_glewInit_GL_EXT_secondary_color(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_secondary_color */ +#ifdef GL_EXT_separate_specular_color + CONST_CAST(GLEW_EXT_separate_specular_color) = glewGetExtension("GL_EXT_separate_specular_color"); +#endif /* GL_EXT_separate_specular_color */ +#ifdef GL_EXT_shadow_funcs + CONST_CAST(GLEW_EXT_shadow_funcs) = glewGetExtension("GL_EXT_shadow_funcs"); +#endif /* GL_EXT_shadow_funcs */ +#ifdef GL_EXT_shared_texture_palette + CONST_CAST(GLEW_EXT_shared_texture_palette) = glewGetExtension("GL_EXT_shared_texture_palette"); +#endif /* GL_EXT_shared_texture_palette */ +#ifdef GL_EXT_stencil_clear_tag + CONST_CAST(GLEW_EXT_stencil_clear_tag) = glewGetExtension("GL_EXT_stencil_clear_tag"); +#endif /* GL_EXT_stencil_clear_tag */ +#ifdef GL_EXT_stencil_two_side + CONST_CAST(GLEW_EXT_stencil_two_side) = glewGetExtension("GL_EXT_stencil_two_side"); + if (glewExperimental || GLEW_EXT_stencil_two_side) CONST_CAST(GLEW_EXT_stencil_two_side) = !_glewInit_GL_EXT_stencil_two_side(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_stencil_two_side */ +#ifdef GL_EXT_stencil_wrap + CONST_CAST(GLEW_EXT_stencil_wrap) = glewGetExtension("GL_EXT_stencil_wrap"); +#endif /* GL_EXT_stencil_wrap */ +#ifdef GL_EXT_subtexture + CONST_CAST(GLEW_EXT_subtexture) = glewGetExtension("GL_EXT_subtexture"); + if (glewExperimental || GLEW_EXT_subtexture) CONST_CAST(GLEW_EXT_subtexture) = !_glewInit_GL_EXT_subtexture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_subtexture */ +#ifdef GL_EXT_texture + CONST_CAST(GLEW_EXT_texture) = glewGetExtension("GL_EXT_texture"); +#endif /* GL_EXT_texture */ +#ifdef GL_EXT_texture3D + CONST_CAST(GLEW_EXT_texture3D) = glewGetExtension("GL_EXT_texture3D"); + if (glewExperimental || GLEW_EXT_texture3D) CONST_CAST(GLEW_EXT_texture3D) = !_glewInit_GL_EXT_texture3D(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_texture3D */ +#ifdef GL_EXT_texture_array + CONST_CAST(GLEW_EXT_texture_array) = glewGetExtension("GL_EXT_texture_array"); +#endif /* GL_EXT_texture_array */ +#ifdef GL_EXT_texture_buffer_object + CONST_CAST(GLEW_EXT_texture_buffer_object) = glewGetExtension("GL_EXT_texture_buffer_object"); + if (glewExperimental || GLEW_EXT_texture_buffer_object) CONST_CAST(GLEW_EXT_texture_buffer_object) = !_glewInit_GL_EXT_texture_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_texture_buffer_object */ +#ifdef GL_EXT_texture_compression_dxt1 + CONST_CAST(GLEW_EXT_texture_compression_dxt1) = glewGetExtension("GL_EXT_texture_compression_dxt1"); +#endif /* GL_EXT_texture_compression_dxt1 */ +#ifdef GL_EXT_texture_compression_latc + CONST_CAST(GLEW_EXT_texture_compression_latc) = glewGetExtension("GL_EXT_texture_compression_latc"); +#endif /* GL_EXT_texture_compression_latc */ +#ifdef GL_EXT_texture_compression_rgtc + CONST_CAST(GLEW_EXT_texture_compression_rgtc) = glewGetExtension("GL_EXT_texture_compression_rgtc"); +#endif /* GL_EXT_texture_compression_rgtc */ +#ifdef GL_EXT_texture_compression_s3tc + CONST_CAST(GLEW_EXT_texture_compression_s3tc) = glewGetExtension("GL_EXT_texture_compression_s3tc"); +#endif /* GL_EXT_texture_compression_s3tc */ +#ifdef GL_EXT_texture_cube_map + CONST_CAST(GLEW_EXT_texture_cube_map) = glewGetExtension("GL_EXT_texture_cube_map"); +#endif /* GL_EXT_texture_cube_map */ +#ifdef GL_EXT_texture_edge_clamp + CONST_CAST(GLEW_EXT_texture_edge_clamp) = glewGetExtension("GL_EXT_texture_edge_clamp"); +#endif /* GL_EXT_texture_edge_clamp */ +#ifdef GL_EXT_texture_env + CONST_CAST(GLEW_EXT_texture_env) = glewGetExtension("GL_EXT_texture_env"); +#endif /* GL_EXT_texture_env */ +#ifdef GL_EXT_texture_env_add + CONST_CAST(GLEW_EXT_texture_env_add) = glewGetExtension("GL_EXT_texture_env_add"); +#endif /* GL_EXT_texture_env_add */ +#ifdef GL_EXT_texture_env_combine + CONST_CAST(GLEW_EXT_texture_env_combine) = glewGetExtension("GL_EXT_texture_env_combine"); +#endif /* GL_EXT_texture_env_combine */ +#ifdef GL_EXT_texture_env_dot3 + CONST_CAST(GLEW_EXT_texture_env_dot3) = glewGetExtension("GL_EXT_texture_env_dot3"); +#endif /* GL_EXT_texture_env_dot3 */ +#ifdef GL_EXT_texture_filter_anisotropic + CONST_CAST(GLEW_EXT_texture_filter_anisotropic) = glewGetExtension("GL_EXT_texture_filter_anisotropic"); +#endif /* GL_EXT_texture_filter_anisotropic */ +#ifdef GL_EXT_texture_integer + CONST_CAST(GLEW_EXT_texture_integer) = glewGetExtension("GL_EXT_texture_integer"); + if (glewExperimental || GLEW_EXT_texture_integer) CONST_CAST(GLEW_EXT_texture_integer) = !_glewInit_GL_EXT_texture_integer(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_texture_integer */ +#ifdef GL_EXT_texture_lod_bias + CONST_CAST(GLEW_EXT_texture_lod_bias) = glewGetExtension("GL_EXT_texture_lod_bias"); +#endif /* GL_EXT_texture_lod_bias */ +#ifdef GL_EXT_texture_mirror_clamp + CONST_CAST(GLEW_EXT_texture_mirror_clamp) = glewGetExtension("GL_EXT_texture_mirror_clamp"); +#endif /* GL_EXT_texture_mirror_clamp */ +#ifdef GL_EXT_texture_object + CONST_CAST(GLEW_EXT_texture_object) = glewGetExtension("GL_EXT_texture_object"); + if (glewExperimental || GLEW_EXT_texture_object) CONST_CAST(GLEW_EXT_texture_object) = !_glewInit_GL_EXT_texture_object(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_texture_object */ +#ifdef GL_EXT_texture_perturb_normal + CONST_CAST(GLEW_EXT_texture_perturb_normal) = glewGetExtension("GL_EXT_texture_perturb_normal"); + if (glewExperimental || GLEW_EXT_texture_perturb_normal) CONST_CAST(GLEW_EXT_texture_perturb_normal) = !_glewInit_GL_EXT_texture_perturb_normal(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_texture_perturb_normal */ +#ifdef GL_EXT_texture_rectangle + CONST_CAST(GLEW_EXT_texture_rectangle) = glewGetExtension("GL_EXT_texture_rectangle"); +#endif /* GL_EXT_texture_rectangle */ +#ifdef GL_EXT_texture_sRGB + CONST_CAST(GLEW_EXT_texture_sRGB) = glewGetExtension("GL_EXT_texture_sRGB"); +#endif /* GL_EXT_texture_sRGB */ +#ifdef GL_EXT_texture_shared_exponent + CONST_CAST(GLEW_EXT_texture_shared_exponent) = glewGetExtension("GL_EXT_texture_shared_exponent"); +#endif /* GL_EXT_texture_shared_exponent */ +#ifdef GL_EXT_timer_query + CONST_CAST(GLEW_EXT_timer_query) = glewGetExtension("GL_EXT_timer_query"); + if (glewExperimental || GLEW_EXT_timer_query) CONST_CAST(GLEW_EXT_timer_query) = !_glewInit_GL_EXT_timer_query(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_timer_query */ +#ifdef GL_EXT_vertex_array + CONST_CAST(GLEW_EXT_vertex_array) = glewGetExtension("GL_EXT_vertex_array"); + if (glewExperimental || GLEW_EXT_vertex_array) CONST_CAST(GLEW_EXT_vertex_array) = !_glewInit_GL_EXT_vertex_array(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_vertex_array */ +#ifdef GL_EXT_vertex_shader + CONST_CAST(GLEW_EXT_vertex_shader) = glewGetExtension("GL_EXT_vertex_shader"); + if (glewExperimental || GLEW_EXT_vertex_shader) CONST_CAST(GLEW_EXT_vertex_shader) = !_glewInit_GL_EXT_vertex_shader(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_vertex_shader */ +#ifdef GL_EXT_vertex_weighting + CONST_CAST(GLEW_EXT_vertex_weighting) = glewGetExtension("GL_EXT_vertex_weighting"); + if (glewExperimental || GLEW_EXT_vertex_weighting) CONST_CAST(GLEW_EXT_vertex_weighting) = !_glewInit_GL_EXT_vertex_weighting(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_EXT_vertex_weighting */ +#ifdef GL_GREMEDY_frame_terminator + CONST_CAST(GLEW_GREMEDY_frame_terminator) = glewGetExtension("GL_GREMEDY_frame_terminator"); + if (glewExperimental || GLEW_GREMEDY_frame_terminator) CONST_CAST(GLEW_GREMEDY_frame_terminator) = !_glewInit_GL_GREMEDY_frame_terminator(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_GREMEDY_frame_terminator */ +#ifdef GL_GREMEDY_string_marker + CONST_CAST(GLEW_GREMEDY_string_marker) = glewGetExtension("GL_GREMEDY_string_marker"); + if (glewExperimental || GLEW_GREMEDY_string_marker) CONST_CAST(GLEW_GREMEDY_string_marker) = !_glewInit_GL_GREMEDY_string_marker(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_GREMEDY_string_marker */ +#ifdef GL_HP_convolution_border_modes + CONST_CAST(GLEW_HP_convolution_border_modes) = glewGetExtension("GL_HP_convolution_border_modes"); +#endif /* GL_HP_convolution_border_modes */ +#ifdef GL_HP_image_transform + CONST_CAST(GLEW_HP_image_transform) = glewGetExtension("GL_HP_image_transform"); + if (glewExperimental || GLEW_HP_image_transform) CONST_CAST(GLEW_HP_image_transform) = !_glewInit_GL_HP_image_transform(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_HP_image_transform */ +#ifdef GL_HP_occlusion_test + CONST_CAST(GLEW_HP_occlusion_test) = glewGetExtension("GL_HP_occlusion_test"); +#endif /* GL_HP_occlusion_test */ +#ifdef GL_HP_texture_lighting + CONST_CAST(GLEW_HP_texture_lighting) = glewGetExtension("GL_HP_texture_lighting"); +#endif /* GL_HP_texture_lighting */ +#ifdef GL_IBM_cull_vertex + CONST_CAST(GLEW_IBM_cull_vertex) = glewGetExtension("GL_IBM_cull_vertex"); +#endif /* GL_IBM_cull_vertex */ +#ifdef GL_IBM_multimode_draw_arrays + CONST_CAST(GLEW_IBM_multimode_draw_arrays) = glewGetExtension("GL_IBM_multimode_draw_arrays"); + if (glewExperimental || GLEW_IBM_multimode_draw_arrays) CONST_CAST(GLEW_IBM_multimode_draw_arrays) = !_glewInit_GL_IBM_multimode_draw_arrays(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_IBM_multimode_draw_arrays */ +#ifdef GL_IBM_rasterpos_clip + CONST_CAST(GLEW_IBM_rasterpos_clip) = glewGetExtension("GL_IBM_rasterpos_clip"); +#endif /* GL_IBM_rasterpos_clip */ +#ifdef GL_IBM_static_data + CONST_CAST(GLEW_IBM_static_data) = glewGetExtension("GL_IBM_static_data"); +#endif /* GL_IBM_static_data */ +#ifdef GL_IBM_texture_mirrored_repeat + CONST_CAST(GLEW_IBM_texture_mirrored_repeat) = glewGetExtension("GL_IBM_texture_mirrored_repeat"); +#endif /* GL_IBM_texture_mirrored_repeat */ +#ifdef GL_IBM_vertex_array_lists + CONST_CAST(GLEW_IBM_vertex_array_lists) = glewGetExtension("GL_IBM_vertex_array_lists"); + if (glewExperimental || GLEW_IBM_vertex_array_lists) CONST_CAST(GLEW_IBM_vertex_array_lists) = !_glewInit_GL_IBM_vertex_array_lists(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_IBM_vertex_array_lists */ +#ifdef GL_INGR_color_clamp + CONST_CAST(GLEW_INGR_color_clamp) = glewGetExtension("GL_INGR_color_clamp"); +#endif /* GL_INGR_color_clamp */ +#ifdef GL_INGR_interlace_read + CONST_CAST(GLEW_INGR_interlace_read) = glewGetExtension("GL_INGR_interlace_read"); +#endif /* GL_INGR_interlace_read */ +#ifdef GL_INTEL_parallel_arrays + CONST_CAST(GLEW_INTEL_parallel_arrays) = glewGetExtension("GL_INTEL_parallel_arrays"); + if (glewExperimental || GLEW_INTEL_parallel_arrays) CONST_CAST(GLEW_INTEL_parallel_arrays) = !_glewInit_GL_INTEL_parallel_arrays(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_INTEL_parallel_arrays */ +#ifdef GL_INTEL_texture_scissor + CONST_CAST(GLEW_INTEL_texture_scissor) = glewGetExtension("GL_INTEL_texture_scissor"); + if (glewExperimental || GLEW_INTEL_texture_scissor) CONST_CAST(GLEW_INTEL_texture_scissor) = !_glewInit_GL_INTEL_texture_scissor(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_INTEL_texture_scissor */ +#ifdef GL_KTX_buffer_region + CONST_CAST(GLEW_KTX_buffer_region) = glewGetExtension("GL_KTX_buffer_region"); + if (glewExperimental || GLEW_KTX_buffer_region) CONST_CAST(GLEW_KTX_buffer_region) = !_glewInit_GL_KTX_buffer_region(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_KTX_buffer_region */ +#ifdef GL_MESAX_texture_stack + CONST_CAST(GLEW_MESAX_texture_stack) = glewGetExtension("GL_MESAX_texture_stack"); +#endif /* GL_MESAX_texture_stack */ +#ifdef GL_MESA_pack_invert + CONST_CAST(GLEW_MESA_pack_invert) = glewGetExtension("GL_MESA_pack_invert"); +#endif /* GL_MESA_pack_invert */ +#ifdef GL_MESA_resize_buffers + CONST_CAST(GLEW_MESA_resize_buffers) = glewGetExtension("GL_MESA_resize_buffers"); + if (glewExperimental || GLEW_MESA_resize_buffers) CONST_CAST(GLEW_MESA_resize_buffers) = !_glewInit_GL_MESA_resize_buffers(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_MESA_resize_buffers */ +#ifdef GL_MESA_window_pos + CONST_CAST(GLEW_MESA_window_pos) = glewGetExtension("GL_MESA_window_pos"); + if (glewExperimental || GLEW_MESA_window_pos) CONST_CAST(GLEW_MESA_window_pos) = !_glewInit_GL_MESA_window_pos(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_MESA_window_pos */ +#ifdef GL_MESA_ycbcr_texture + CONST_CAST(GLEW_MESA_ycbcr_texture) = glewGetExtension("GL_MESA_ycbcr_texture"); +#endif /* GL_MESA_ycbcr_texture */ +#ifdef GL_NV_blend_square + CONST_CAST(GLEW_NV_blend_square) = glewGetExtension("GL_NV_blend_square"); +#endif /* GL_NV_blend_square */ +#ifdef GL_NV_copy_depth_to_color + CONST_CAST(GLEW_NV_copy_depth_to_color) = glewGetExtension("GL_NV_copy_depth_to_color"); +#endif /* GL_NV_copy_depth_to_color */ +#ifdef GL_NV_depth_buffer_float + CONST_CAST(GLEW_NV_depth_buffer_float) = glewGetExtension("GL_NV_depth_buffer_float"); + if (glewExperimental || GLEW_NV_depth_buffer_float) CONST_CAST(GLEW_NV_depth_buffer_float) = !_glewInit_GL_NV_depth_buffer_float(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_depth_buffer_float */ +#ifdef GL_NV_depth_clamp + CONST_CAST(GLEW_NV_depth_clamp) = glewGetExtension("GL_NV_depth_clamp"); +#endif /* GL_NV_depth_clamp */ +#ifdef GL_NV_depth_range_unclamped + CONST_CAST(GLEW_NV_depth_range_unclamped) = glewGetExtension("GL_NV_depth_range_unclamped"); +#endif /* GL_NV_depth_range_unclamped */ +#ifdef GL_NV_evaluators + CONST_CAST(GLEW_NV_evaluators) = glewGetExtension("GL_NV_evaluators"); + if (glewExperimental || GLEW_NV_evaluators) CONST_CAST(GLEW_NV_evaluators) = !_glewInit_GL_NV_evaluators(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_evaluators */ +#ifdef GL_NV_fence + CONST_CAST(GLEW_NV_fence) = glewGetExtension("GL_NV_fence"); + if (glewExperimental || GLEW_NV_fence) CONST_CAST(GLEW_NV_fence) = !_glewInit_GL_NV_fence(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_fence */ +#ifdef GL_NV_float_buffer + CONST_CAST(GLEW_NV_float_buffer) = glewGetExtension("GL_NV_float_buffer"); +#endif /* GL_NV_float_buffer */ +#ifdef GL_NV_fog_distance + CONST_CAST(GLEW_NV_fog_distance) = glewGetExtension("GL_NV_fog_distance"); +#endif /* GL_NV_fog_distance */ +#ifdef GL_NV_fragment_program + CONST_CAST(GLEW_NV_fragment_program) = glewGetExtension("GL_NV_fragment_program"); + if (glewExperimental || GLEW_NV_fragment_program) CONST_CAST(GLEW_NV_fragment_program) = !_glewInit_GL_NV_fragment_program(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_fragment_program */ +#ifdef GL_NV_fragment_program2 + CONST_CAST(GLEW_NV_fragment_program2) = glewGetExtension("GL_NV_fragment_program2"); +#endif /* GL_NV_fragment_program2 */ +#ifdef GL_NV_fragment_program4 + CONST_CAST(GLEW_NV_fragment_program4) = glewGetExtension("GL_NV_fragment_program4"); +#endif /* GL_NV_fragment_program4 */ +#ifdef GL_NV_fragment_program_option + CONST_CAST(GLEW_NV_fragment_program_option) = glewGetExtension("GL_NV_fragment_program_option"); +#endif /* GL_NV_fragment_program_option */ +#ifdef GL_NV_framebuffer_multisample_coverage + CONST_CAST(GLEW_NV_framebuffer_multisample_coverage) = glewGetExtension("GL_NV_framebuffer_multisample_coverage"); + if (glewExperimental || GLEW_NV_framebuffer_multisample_coverage) CONST_CAST(GLEW_NV_framebuffer_multisample_coverage) = !_glewInit_GL_NV_framebuffer_multisample_coverage(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_framebuffer_multisample_coverage */ +#ifdef GL_NV_geometry_program4 + CONST_CAST(GLEW_NV_geometry_program4) = glewGetExtension("GL_NV_geometry_program4"); + if (glewExperimental || GLEW_NV_geometry_program4) CONST_CAST(GLEW_NV_geometry_program4) = !_glewInit_GL_NV_geometry_program4(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_geometry_program4 */ +#ifdef GL_NV_geometry_shader4 + CONST_CAST(GLEW_NV_geometry_shader4) = glewGetExtension("GL_NV_geometry_shader4"); +#endif /* GL_NV_geometry_shader4 */ +#ifdef GL_NV_gpu_program4 + CONST_CAST(GLEW_NV_gpu_program4) = glewGetExtension("GL_NV_gpu_program4"); + if (glewExperimental || GLEW_NV_gpu_program4) CONST_CAST(GLEW_NV_gpu_program4) = !_glewInit_GL_NV_gpu_program4(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_gpu_program4 */ +#ifdef GL_NV_half_float + CONST_CAST(GLEW_NV_half_float) = glewGetExtension("GL_NV_half_float"); + if (glewExperimental || GLEW_NV_half_float) CONST_CAST(GLEW_NV_half_float) = !_glewInit_GL_NV_half_float(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_half_float */ +#ifdef GL_NV_light_max_exponent + CONST_CAST(GLEW_NV_light_max_exponent) = glewGetExtension("GL_NV_light_max_exponent"); +#endif /* GL_NV_light_max_exponent */ +#ifdef GL_NV_multisample_filter_hint + CONST_CAST(GLEW_NV_multisample_filter_hint) = glewGetExtension("GL_NV_multisample_filter_hint"); +#endif /* GL_NV_multisample_filter_hint */ +#ifdef GL_NV_occlusion_query + CONST_CAST(GLEW_NV_occlusion_query) = glewGetExtension("GL_NV_occlusion_query"); + if (glewExperimental || GLEW_NV_occlusion_query) CONST_CAST(GLEW_NV_occlusion_query) = !_glewInit_GL_NV_occlusion_query(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_occlusion_query */ +#ifdef GL_NV_packed_depth_stencil + CONST_CAST(GLEW_NV_packed_depth_stencil) = glewGetExtension("GL_NV_packed_depth_stencil"); +#endif /* GL_NV_packed_depth_stencil */ +#ifdef GL_NV_parameter_buffer_object + CONST_CAST(GLEW_NV_parameter_buffer_object) = glewGetExtension("GL_NV_parameter_buffer_object"); + if (glewExperimental || GLEW_NV_parameter_buffer_object) CONST_CAST(GLEW_NV_parameter_buffer_object) = !_glewInit_GL_NV_parameter_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_parameter_buffer_object */ +#ifdef GL_NV_pixel_data_range + CONST_CAST(GLEW_NV_pixel_data_range) = glewGetExtension("GL_NV_pixel_data_range"); + if (glewExperimental || GLEW_NV_pixel_data_range) CONST_CAST(GLEW_NV_pixel_data_range) = !_glewInit_GL_NV_pixel_data_range(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_pixel_data_range */ +#ifdef GL_NV_point_sprite + CONST_CAST(GLEW_NV_point_sprite) = glewGetExtension("GL_NV_point_sprite"); + if (glewExperimental || GLEW_NV_point_sprite) CONST_CAST(GLEW_NV_point_sprite) = !_glewInit_GL_NV_point_sprite(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_point_sprite */ +#ifdef GL_NV_primitive_restart + CONST_CAST(GLEW_NV_primitive_restart) = glewGetExtension("GL_NV_primitive_restart"); + if (glewExperimental || GLEW_NV_primitive_restart) CONST_CAST(GLEW_NV_primitive_restart) = !_glewInit_GL_NV_primitive_restart(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_primitive_restart */ +#ifdef GL_NV_register_combiners + CONST_CAST(GLEW_NV_register_combiners) = glewGetExtension("GL_NV_register_combiners"); + if (glewExperimental || GLEW_NV_register_combiners) CONST_CAST(GLEW_NV_register_combiners) = !_glewInit_GL_NV_register_combiners(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_register_combiners */ +#ifdef GL_NV_register_combiners2 + CONST_CAST(GLEW_NV_register_combiners2) = glewGetExtension("GL_NV_register_combiners2"); + if (glewExperimental || GLEW_NV_register_combiners2) CONST_CAST(GLEW_NV_register_combiners2) = !_glewInit_GL_NV_register_combiners2(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_register_combiners2 */ +#ifdef GL_NV_texgen_emboss + CONST_CAST(GLEW_NV_texgen_emboss) = glewGetExtension("GL_NV_texgen_emboss"); +#endif /* GL_NV_texgen_emboss */ +#ifdef GL_NV_texgen_reflection + CONST_CAST(GLEW_NV_texgen_reflection) = glewGetExtension("GL_NV_texgen_reflection"); +#endif /* GL_NV_texgen_reflection */ +#ifdef GL_NV_texture_compression_vtc + CONST_CAST(GLEW_NV_texture_compression_vtc) = glewGetExtension("GL_NV_texture_compression_vtc"); +#endif /* GL_NV_texture_compression_vtc */ +#ifdef GL_NV_texture_env_combine4 + CONST_CAST(GLEW_NV_texture_env_combine4) = glewGetExtension("GL_NV_texture_env_combine4"); +#endif /* GL_NV_texture_env_combine4 */ +#ifdef GL_NV_texture_expand_normal + CONST_CAST(GLEW_NV_texture_expand_normal) = glewGetExtension("GL_NV_texture_expand_normal"); +#endif /* GL_NV_texture_expand_normal */ +#ifdef GL_NV_texture_rectangle + CONST_CAST(GLEW_NV_texture_rectangle) = glewGetExtension("GL_NV_texture_rectangle"); +#endif /* GL_NV_texture_rectangle */ +#ifdef GL_NV_texture_shader + CONST_CAST(GLEW_NV_texture_shader) = glewGetExtension("GL_NV_texture_shader"); +#endif /* GL_NV_texture_shader */ +#ifdef GL_NV_texture_shader2 + CONST_CAST(GLEW_NV_texture_shader2) = glewGetExtension("GL_NV_texture_shader2"); +#endif /* GL_NV_texture_shader2 */ +#ifdef GL_NV_texture_shader3 + CONST_CAST(GLEW_NV_texture_shader3) = glewGetExtension("GL_NV_texture_shader3"); +#endif /* GL_NV_texture_shader3 */ +#ifdef GL_NV_transform_feedback + CONST_CAST(GLEW_NV_transform_feedback) = glewGetExtension("GL_NV_transform_feedback"); + if (glewExperimental || GLEW_NV_transform_feedback) CONST_CAST(GLEW_NV_transform_feedback) = !_glewInit_GL_NV_transform_feedback(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_transform_feedback */ +#ifdef GL_NV_vertex_array_range + CONST_CAST(GLEW_NV_vertex_array_range) = glewGetExtension("GL_NV_vertex_array_range"); + if (glewExperimental || GLEW_NV_vertex_array_range) CONST_CAST(GLEW_NV_vertex_array_range) = !_glewInit_GL_NV_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_vertex_array_range */ +#ifdef GL_NV_vertex_array_range2 + CONST_CAST(GLEW_NV_vertex_array_range2) = glewGetExtension("GL_NV_vertex_array_range2"); +#endif /* GL_NV_vertex_array_range2 */ +#ifdef GL_NV_vertex_program + CONST_CAST(GLEW_NV_vertex_program) = glewGetExtension("GL_NV_vertex_program"); + if (glewExperimental || GLEW_NV_vertex_program) CONST_CAST(GLEW_NV_vertex_program) = !_glewInit_GL_NV_vertex_program(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_NV_vertex_program */ +#ifdef GL_NV_vertex_program1_1 + CONST_CAST(GLEW_NV_vertex_program1_1) = glewGetExtension("GL_NV_vertex_program1_1"); +#endif /* GL_NV_vertex_program1_1 */ +#ifdef GL_NV_vertex_program2 + CONST_CAST(GLEW_NV_vertex_program2) = glewGetExtension("GL_NV_vertex_program2"); +#endif /* GL_NV_vertex_program2 */ +#ifdef GL_NV_vertex_program2_option + CONST_CAST(GLEW_NV_vertex_program2_option) = glewGetExtension("GL_NV_vertex_program2_option"); +#endif /* GL_NV_vertex_program2_option */ +#ifdef GL_NV_vertex_program3 + CONST_CAST(GLEW_NV_vertex_program3) = glewGetExtension("GL_NV_vertex_program3"); +#endif /* GL_NV_vertex_program3 */ +#ifdef GL_NV_vertex_program4 + CONST_CAST(GLEW_NV_vertex_program4) = glewGetExtension("GL_NV_vertex_program4"); +#endif /* GL_NV_vertex_program4 */ +#ifdef GL_OES_byte_coordinates + CONST_CAST(GLEW_OES_byte_coordinates) = glewGetExtension("GL_OES_byte_coordinates"); +#endif /* GL_OES_byte_coordinates */ +#ifdef GL_OES_compressed_paletted_texture + CONST_CAST(GLEW_OES_compressed_paletted_texture) = glewGetExtension("GL_OES_compressed_paletted_texture"); +#endif /* GL_OES_compressed_paletted_texture */ +#ifdef GL_OES_read_format + CONST_CAST(GLEW_OES_read_format) = glewGetExtension("GL_OES_read_format"); +#endif /* GL_OES_read_format */ +#ifdef GL_OES_single_precision + CONST_CAST(GLEW_OES_single_precision) = glewGetExtension("GL_OES_single_precision"); + if (glewExperimental || GLEW_OES_single_precision) CONST_CAST(GLEW_OES_single_precision) = !_glewInit_GL_OES_single_precision(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_OES_single_precision */ +#ifdef GL_OML_interlace + CONST_CAST(GLEW_OML_interlace) = glewGetExtension("GL_OML_interlace"); +#endif /* GL_OML_interlace */ +#ifdef GL_OML_resample + CONST_CAST(GLEW_OML_resample) = glewGetExtension("GL_OML_resample"); +#endif /* GL_OML_resample */ +#ifdef GL_OML_subsample + CONST_CAST(GLEW_OML_subsample) = glewGetExtension("GL_OML_subsample"); +#endif /* GL_OML_subsample */ +#ifdef GL_PGI_misc_hints + CONST_CAST(GLEW_PGI_misc_hints) = glewGetExtension("GL_PGI_misc_hints"); +#endif /* GL_PGI_misc_hints */ +#ifdef GL_PGI_vertex_hints + CONST_CAST(GLEW_PGI_vertex_hints) = glewGetExtension("GL_PGI_vertex_hints"); +#endif /* GL_PGI_vertex_hints */ +#ifdef GL_REND_screen_coordinates + CONST_CAST(GLEW_REND_screen_coordinates) = glewGetExtension("GL_REND_screen_coordinates"); +#endif /* GL_REND_screen_coordinates */ +#ifdef GL_S3_s3tc + CONST_CAST(GLEW_S3_s3tc) = glewGetExtension("GL_S3_s3tc"); +#endif /* GL_S3_s3tc */ +#ifdef GL_SGIS_color_range + CONST_CAST(GLEW_SGIS_color_range) = glewGetExtension("GL_SGIS_color_range"); +#endif /* GL_SGIS_color_range */ +#ifdef GL_SGIS_detail_texture + CONST_CAST(GLEW_SGIS_detail_texture) = glewGetExtension("GL_SGIS_detail_texture"); + if (glewExperimental || GLEW_SGIS_detail_texture) CONST_CAST(GLEW_SGIS_detail_texture) = !_glewInit_GL_SGIS_detail_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIS_detail_texture */ +#ifdef GL_SGIS_fog_function + CONST_CAST(GLEW_SGIS_fog_function) = glewGetExtension("GL_SGIS_fog_function"); + if (glewExperimental || GLEW_SGIS_fog_function) CONST_CAST(GLEW_SGIS_fog_function) = !_glewInit_GL_SGIS_fog_function(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIS_fog_function */ +#ifdef GL_SGIS_generate_mipmap + CONST_CAST(GLEW_SGIS_generate_mipmap) = glewGetExtension("GL_SGIS_generate_mipmap"); +#endif /* GL_SGIS_generate_mipmap */ +#ifdef GL_SGIS_multisample + CONST_CAST(GLEW_SGIS_multisample) = glewGetExtension("GL_SGIS_multisample"); + if (glewExperimental || GLEW_SGIS_multisample) CONST_CAST(GLEW_SGIS_multisample) = !_glewInit_GL_SGIS_multisample(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIS_multisample */ +#ifdef GL_SGIS_pixel_texture + CONST_CAST(GLEW_SGIS_pixel_texture) = glewGetExtension("GL_SGIS_pixel_texture"); +#endif /* GL_SGIS_pixel_texture */ +#ifdef GL_SGIS_sharpen_texture + CONST_CAST(GLEW_SGIS_sharpen_texture) = glewGetExtension("GL_SGIS_sharpen_texture"); + if (glewExperimental || GLEW_SGIS_sharpen_texture) CONST_CAST(GLEW_SGIS_sharpen_texture) = !_glewInit_GL_SGIS_sharpen_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIS_sharpen_texture */ +#ifdef GL_SGIS_texture4D + CONST_CAST(GLEW_SGIS_texture4D) = glewGetExtension("GL_SGIS_texture4D"); + if (glewExperimental || GLEW_SGIS_texture4D) CONST_CAST(GLEW_SGIS_texture4D) = !_glewInit_GL_SGIS_texture4D(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIS_texture4D */ +#ifdef GL_SGIS_texture_border_clamp + CONST_CAST(GLEW_SGIS_texture_border_clamp) = glewGetExtension("GL_SGIS_texture_border_clamp"); +#endif /* GL_SGIS_texture_border_clamp */ +#ifdef GL_SGIS_texture_edge_clamp + CONST_CAST(GLEW_SGIS_texture_edge_clamp) = glewGetExtension("GL_SGIS_texture_edge_clamp"); +#endif /* GL_SGIS_texture_edge_clamp */ +#ifdef GL_SGIS_texture_filter4 + CONST_CAST(GLEW_SGIS_texture_filter4) = glewGetExtension("GL_SGIS_texture_filter4"); + if (glewExperimental || GLEW_SGIS_texture_filter4) CONST_CAST(GLEW_SGIS_texture_filter4) = !_glewInit_GL_SGIS_texture_filter4(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIS_texture_filter4 */ +#ifdef GL_SGIS_texture_lod + CONST_CAST(GLEW_SGIS_texture_lod) = glewGetExtension("GL_SGIS_texture_lod"); +#endif /* GL_SGIS_texture_lod */ +#ifdef GL_SGIS_texture_select + CONST_CAST(GLEW_SGIS_texture_select) = glewGetExtension("GL_SGIS_texture_select"); +#endif /* GL_SGIS_texture_select */ +#ifdef GL_SGIX_async + CONST_CAST(GLEW_SGIX_async) = glewGetExtension("GL_SGIX_async"); + if (glewExperimental || GLEW_SGIX_async) CONST_CAST(GLEW_SGIX_async) = !_glewInit_GL_SGIX_async(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIX_async */ +#ifdef GL_SGIX_async_histogram + CONST_CAST(GLEW_SGIX_async_histogram) = glewGetExtension("GL_SGIX_async_histogram"); +#endif /* GL_SGIX_async_histogram */ +#ifdef GL_SGIX_async_pixel + CONST_CAST(GLEW_SGIX_async_pixel) = glewGetExtension("GL_SGIX_async_pixel"); +#endif /* GL_SGIX_async_pixel */ +#ifdef GL_SGIX_blend_alpha_minmax + CONST_CAST(GLEW_SGIX_blend_alpha_minmax) = glewGetExtension("GL_SGIX_blend_alpha_minmax"); +#endif /* GL_SGIX_blend_alpha_minmax */ +#ifdef GL_SGIX_clipmap + CONST_CAST(GLEW_SGIX_clipmap) = glewGetExtension("GL_SGIX_clipmap"); +#endif /* GL_SGIX_clipmap */ +#ifdef GL_SGIX_depth_texture + CONST_CAST(GLEW_SGIX_depth_texture) = glewGetExtension("GL_SGIX_depth_texture"); +#endif /* GL_SGIX_depth_texture */ +#ifdef GL_SGIX_flush_raster + CONST_CAST(GLEW_SGIX_flush_raster) = glewGetExtension("GL_SGIX_flush_raster"); + if (glewExperimental || GLEW_SGIX_flush_raster) CONST_CAST(GLEW_SGIX_flush_raster) = !_glewInit_GL_SGIX_flush_raster(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIX_flush_raster */ +#ifdef GL_SGIX_fog_offset + CONST_CAST(GLEW_SGIX_fog_offset) = glewGetExtension("GL_SGIX_fog_offset"); +#endif /* GL_SGIX_fog_offset */ +#ifdef GL_SGIX_fog_texture + CONST_CAST(GLEW_SGIX_fog_texture) = glewGetExtension("GL_SGIX_fog_texture"); + if (glewExperimental || GLEW_SGIX_fog_texture) CONST_CAST(GLEW_SGIX_fog_texture) = !_glewInit_GL_SGIX_fog_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIX_fog_texture */ +#ifdef GL_SGIX_fragment_specular_lighting + CONST_CAST(GLEW_SGIX_fragment_specular_lighting) = glewGetExtension("GL_SGIX_fragment_specular_lighting"); + if (glewExperimental || GLEW_SGIX_fragment_specular_lighting) CONST_CAST(GLEW_SGIX_fragment_specular_lighting) = !_glewInit_GL_SGIX_fragment_specular_lighting(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIX_fragment_specular_lighting */ +#ifdef GL_SGIX_framezoom + CONST_CAST(GLEW_SGIX_framezoom) = glewGetExtension("GL_SGIX_framezoom"); + if (glewExperimental || GLEW_SGIX_framezoom) CONST_CAST(GLEW_SGIX_framezoom) = !_glewInit_GL_SGIX_framezoom(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIX_framezoom */ +#ifdef GL_SGIX_interlace + CONST_CAST(GLEW_SGIX_interlace) = glewGetExtension("GL_SGIX_interlace"); +#endif /* GL_SGIX_interlace */ +#ifdef GL_SGIX_ir_instrument1 + CONST_CAST(GLEW_SGIX_ir_instrument1) = glewGetExtension("GL_SGIX_ir_instrument1"); +#endif /* GL_SGIX_ir_instrument1 */ +#ifdef GL_SGIX_list_priority + CONST_CAST(GLEW_SGIX_list_priority) = glewGetExtension("GL_SGIX_list_priority"); +#endif /* GL_SGIX_list_priority */ +#ifdef GL_SGIX_pixel_texture + CONST_CAST(GLEW_SGIX_pixel_texture) = glewGetExtension("GL_SGIX_pixel_texture"); + if (glewExperimental || GLEW_SGIX_pixel_texture) CONST_CAST(GLEW_SGIX_pixel_texture) = !_glewInit_GL_SGIX_pixel_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIX_pixel_texture */ +#ifdef GL_SGIX_pixel_texture_bits + CONST_CAST(GLEW_SGIX_pixel_texture_bits) = glewGetExtension("GL_SGIX_pixel_texture_bits"); +#endif /* GL_SGIX_pixel_texture_bits */ +#ifdef GL_SGIX_reference_plane + CONST_CAST(GLEW_SGIX_reference_plane) = glewGetExtension("GL_SGIX_reference_plane"); + if (glewExperimental || GLEW_SGIX_reference_plane) CONST_CAST(GLEW_SGIX_reference_plane) = !_glewInit_GL_SGIX_reference_plane(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIX_reference_plane */ +#ifdef GL_SGIX_resample + CONST_CAST(GLEW_SGIX_resample) = glewGetExtension("GL_SGIX_resample"); +#endif /* GL_SGIX_resample */ +#ifdef GL_SGIX_shadow + CONST_CAST(GLEW_SGIX_shadow) = glewGetExtension("GL_SGIX_shadow"); +#endif /* GL_SGIX_shadow */ +#ifdef GL_SGIX_shadow_ambient + CONST_CAST(GLEW_SGIX_shadow_ambient) = glewGetExtension("GL_SGIX_shadow_ambient"); +#endif /* GL_SGIX_shadow_ambient */ +#ifdef GL_SGIX_sprite + CONST_CAST(GLEW_SGIX_sprite) = glewGetExtension("GL_SGIX_sprite"); + if (glewExperimental || GLEW_SGIX_sprite) CONST_CAST(GLEW_SGIX_sprite) = !_glewInit_GL_SGIX_sprite(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIX_sprite */ +#ifdef GL_SGIX_tag_sample_buffer + CONST_CAST(GLEW_SGIX_tag_sample_buffer) = glewGetExtension("GL_SGIX_tag_sample_buffer"); + if (glewExperimental || GLEW_SGIX_tag_sample_buffer) CONST_CAST(GLEW_SGIX_tag_sample_buffer) = !_glewInit_GL_SGIX_tag_sample_buffer(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGIX_tag_sample_buffer */ +#ifdef GL_SGIX_texture_add_env + CONST_CAST(GLEW_SGIX_texture_add_env) = glewGetExtension("GL_SGIX_texture_add_env"); +#endif /* GL_SGIX_texture_add_env */ +#ifdef GL_SGIX_texture_coordinate_clamp + CONST_CAST(GLEW_SGIX_texture_coordinate_clamp) = glewGetExtension("GL_SGIX_texture_coordinate_clamp"); +#endif /* GL_SGIX_texture_coordinate_clamp */ +#ifdef GL_SGIX_texture_lod_bias + CONST_CAST(GLEW_SGIX_texture_lod_bias) = glewGetExtension("GL_SGIX_texture_lod_bias"); +#endif /* GL_SGIX_texture_lod_bias */ +#ifdef GL_SGIX_texture_multi_buffer + CONST_CAST(GLEW_SGIX_texture_multi_buffer) = glewGetExtension("GL_SGIX_texture_multi_buffer"); +#endif /* GL_SGIX_texture_multi_buffer */ +#ifdef GL_SGIX_texture_range + CONST_CAST(GLEW_SGIX_texture_range) = glewGetExtension("GL_SGIX_texture_range"); +#endif /* GL_SGIX_texture_range */ +#ifdef GL_SGIX_texture_scale_bias + CONST_CAST(GLEW_SGIX_texture_scale_bias) = glewGetExtension("GL_SGIX_texture_scale_bias"); +#endif /* GL_SGIX_texture_scale_bias */ +#ifdef GL_SGIX_vertex_preclip + CONST_CAST(GLEW_SGIX_vertex_preclip) = glewGetExtension("GL_SGIX_vertex_preclip"); +#endif /* GL_SGIX_vertex_preclip */ +#ifdef GL_SGIX_vertex_preclip_hint + CONST_CAST(GLEW_SGIX_vertex_preclip_hint) = glewGetExtension("GL_SGIX_vertex_preclip_hint"); +#endif /* GL_SGIX_vertex_preclip_hint */ +#ifdef GL_SGIX_ycrcb + CONST_CAST(GLEW_SGIX_ycrcb) = glewGetExtension("GL_SGIX_ycrcb"); +#endif /* GL_SGIX_ycrcb */ +#ifdef GL_SGI_color_matrix + CONST_CAST(GLEW_SGI_color_matrix) = glewGetExtension("GL_SGI_color_matrix"); +#endif /* GL_SGI_color_matrix */ +#ifdef GL_SGI_color_table + CONST_CAST(GLEW_SGI_color_table) = glewGetExtension("GL_SGI_color_table"); + if (glewExperimental || GLEW_SGI_color_table) CONST_CAST(GLEW_SGI_color_table) = !_glewInit_GL_SGI_color_table(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SGI_color_table */ +#ifdef GL_SGI_texture_color_table + CONST_CAST(GLEW_SGI_texture_color_table) = glewGetExtension("GL_SGI_texture_color_table"); +#endif /* GL_SGI_texture_color_table */ +#ifdef GL_SUNX_constant_data + CONST_CAST(GLEW_SUNX_constant_data) = glewGetExtension("GL_SUNX_constant_data"); + if (glewExperimental || GLEW_SUNX_constant_data) CONST_CAST(GLEW_SUNX_constant_data) = !_glewInit_GL_SUNX_constant_data(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SUNX_constant_data */ +#ifdef GL_SUN_convolution_border_modes + CONST_CAST(GLEW_SUN_convolution_border_modes) = glewGetExtension("GL_SUN_convolution_border_modes"); +#endif /* GL_SUN_convolution_border_modes */ +#ifdef GL_SUN_global_alpha + CONST_CAST(GLEW_SUN_global_alpha) = glewGetExtension("GL_SUN_global_alpha"); + if (glewExperimental || GLEW_SUN_global_alpha) CONST_CAST(GLEW_SUN_global_alpha) = !_glewInit_GL_SUN_global_alpha(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SUN_global_alpha */ +#ifdef GL_SUN_mesh_array + CONST_CAST(GLEW_SUN_mesh_array) = glewGetExtension("GL_SUN_mesh_array"); +#endif /* GL_SUN_mesh_array */ +#ifdef GL_SUN_read_video_pixels + CONST_CAST(GLEW_SUN_read_video_pixels) = glewGetExtension("GL_SUN_read_video_pixels"); + if (glewExperimental || GLEW_SUN_read_video_pixels) CONST_CAST(GLEW_SUN_read_video_pixels) = !_glewInit_GL_SUN_read_video_pixels(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SUN_read_video_pixels */ +#ifdef GL_SUN_slice_accum + CONST_CAST(GLEW_SUN_slice_accum) = glewGetExtension("GL_SUN_slice_accum"); +#endif /* GL_SUN_slice_accum */ +#ifdef GL_SUN_triangle_list + CONST_CAST(GLEW_SUN_triangle_list) = glewGetExtension("GL_SUN_triangle_list"); + if (glewExperimental || GLEW_SUN_triangle_list) CONST_CAST(GLEW_SUN_triangle_list) = !_glewInit_GL_SUN_triangle_list(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SUN_triangle_list */ +#ifdef GL_SUN_vertex + CONST_CAST(GLEW_SUN_vertex) = glewGetExtension("GL_SUN_vertex"); + if (glewExperimental || GLEW_SUN_vertex) CONST_CAST(GLEW_SUN_vertex) = !_glewInit_GL_SUN_vertex(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_SUN_vertex */ +#ifdef GL_WIN_phong_shading + CONST_CAST(GLEW_WIN_phong_shading) = glewGetExtension("GL_WIN_phong_shading"); +#endif /* GL_WIN_phong_shading */ +#ifdef GL_WIN_specular_fog + CONST_CAST(GLEW_WIN_specular_fog) = glewGetExtension("GL_WIN_specular_fog"); +#endif /* GL_WIN_specular_fog */ +#ifdef GL_WIN_swap_hint + CONST_CAST(GLEW_WIN_swap_hint) = glewGetExtension("GL_WIN_swap_hint"); + if (glewExperimental || GLEW_WIN_swap_hint) CONST_CAST(GLEW_WIN_swap_hint) = !_glewInit_GL_WIN_swap_hint(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GL_WIN_swap_hint */ + + return GLEW_OK; +} + + +#if defined(_WIN32) + +#if !defined(GLEW_MX) + +PFNWGLSETSTEREOEMITTERSTATE3DLPROC __wglewSetStereoEmitterState3DL = NULL; + +PFNWGLCREATEBUFFERREGIONARBPROC __wglewCreateBufferRegionARB = NULL; +PFNWGLDELETEBUFFERREGIONARBPROC __wglewDeleteBufferRegionARB = NULL; +PFNWGLRESTOREBUFFERREGIONARBPROC __wglewRestoreBufferRegionARB = NULL; +PFNWGLSAVEBUFFERREGIONARBPROC __wglewSaveBufferRegionARB = NULL; + +PFNWGLGETEXTENSIONSSTRINGARBPROC __wglewGetExtensionsStringARB = NULL; + +PFNWGLGETCURRENTREADDCARBPROC __wglewGetCurrentReadDCARB = NULL; +PFNWGLMAKECONTEXTCURRENTARBPROC __wglewMakeContextCurrentARB = NULL; + +PFNWGLCREATEPBUFFERARBPROC __wglewCreatePbufferARB = NULL; +PFNWGLDESTROYPBUFFERARBPROC __wglewDestroyPbufferARB = NULL; +PFNWGLGETPBUFFERDCARBPROC __wglewGetPbufferDCARB = NULL; +PFNWGLQUERYPBUFFERARBPROC __wglewQueryPbufferARB = NULL; +PFNWGLRELEASEPBUFFERDCARBPROC __wglewReleasePbufferDCARB = NULL; + +PFNWGLCHOOSEPIXELFORMATARBPROC __wglewChoosePixelFormatARB = NULL; +PFNWGLGETPIXELFORMATATTRIBFVARBPROC __wglewGetPixelFormatAttribfvARB = NULL; +PFNWGLGETPIXELFORMATATTRIBIVARBPROC __wglewGetPixelFormatAttribivARB = NULL; + +PFNWGLBINDTEXIMAGEARBPROC __wglewBindTexImageARB = NULL; +PFNWGLRELEASETEXIMAGEARBPROC __wglewReleaseTexImageARB = NULL; +PFNWGLSETPBUFFERATTRIBARBPROC __wglewSetPbufferAttribARB = NULL; + +PFNWGLBINDDISPLAYCOLORTABLEEXTPROC __wglewBindDisplayColorTableEXT = NULL; +PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC __wglewCreateDisplayColorTableEXT = NULL; +PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC __wglewDestroyDisplayColorTableEXT = NULL; +PFNWGLLOADDISPLAYCOLORTABLEEXTPROC __wglewLoadDisplayColorTableEXT = NULL; + +PFNWGLGETEXTENSIONSSTRINGEXTPROC __wglewGetExtensionsStringEXT = NULL; + +PFNWGLGETCURRENTREADDCEXTPROC __wglewGetCurrentReadDCEXT = NULL; +PFNWGLMAKECONTEXTCURRENTEXTPROC __wglewMakeContextCurrentEXT = NULL; + +PFNWGLCREATEPBUFFEREXTPROC __wglewCreatePbufferEXT = NULL; +PFNWGLDESTROYPBUFFEREXTPROC __wglewDestroyPbufferEXT = NULL; +PFNWGLGETPBUFFERDCEXTPROC __wglewGetPbufferDCEXT = NULL; +PFNWGLQUERYPBUFFEREXTPROC __wglewQueryPbufferEXT = NULL; +PFNWGLRELEASEPBUFFERDCEXTPROC __wglewReleasePbufferDCEXT = NULL; + +PFNWGLCHOOSEPIXELFORMATEXTPROC __wglewChoosePixelFormatEXT = NULL; +PFNWGLGETPIXELFORMATATTRIBFVEXTPROC __wglewGetPixelFormatAttribfvEXT = NULL; +PFNWGLGETPIXELFORMATATTRIBIVEXTPROC __wglewGetPixelFormatAttribivEXT = NULL; + +PFNWGLGETSWAPINTERVALEXTPROC __wglewGetSwapIntervalEXT = NULL; +PFNWGLSWAPINTERVALEXTPROC __wglewSwapIntervalEXT = NULL; + +PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC __wglewGetDigitalVideoParametersI3D = NULL; +PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC __wglewSetDigitalVideoParametersI3D = NULL; + +PFNWGLGETGAMMATABLEI3DPROC __wglewGetGammaTableI3D = NULL; +PFNWGLGETGAMMATABLEPARAMETERSI3DPROC __wglewGetGammaTableParametersI3D = NULL; +PFNWGLSETGAMMATABLEI3DPROC __wglewSetGammaTableI3D = NULL; +PFNWGLSETGAMMATABLEPARAMETERSI3DPROC __wglewSetGammaTableParametersI3D = NULL; + +PFNWGLDISABLEGENLOCKI3DPROC __wglewDisableGenlockI3D = NULL; +PFNWGLENABLEGENLOCKI3DPROC __wglewEnableGenlockI3D = NULL; +PFNWGLGENLOCKSAMPLERATEI3DPROC __wglewGenlockSampleRateI3D = NULL; +PFNWGLGENLOCKSOURCEDELAYI3DPROC __wglewGenlockSourceDelayI3D = NULL; +PFNWGLGENLOCKSOURCEEDGEI3DPROC __wglewGenlockSourceEdgeI3D = NULL; +PFNWGLGENLOCKSOURCEI3DPROC __wglewGenlockSourceI3D = NULL; +PFNWGLGETGENLOCKSAMPLERATEI3DPROC __wglewGetGenlockSampleRateI3D = NULL; +PFNWGLGETGENLOCKSOURCEDELAYI3DPROC __wglewGetGenlockSourceDelayI3D = NULL; +PFNWGLGETGENLOCKSOURCEEDGEI3DPROC __wglewGetGenlockSourceEdgeI3D = NULL; +PFNWGLGETGENLOCKSOURCEI3DPROC __wglewGetGenlockSourceI3D = NULL; +PFNWGLISENABLEDGENLOCKI3DPROC __wglewIsEnabledGenlockI3D = NULL; +PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC __wglewQueryGenlockMaxSourceDelayI3D = NULL; + +PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC __wglewAssociateImageBufferEventsI3D = NULL; +PFNWGLCREATEIMAGEBUFFERI3DPROC __wglewCreateImageBufferI3D = NULL; +PFNWGLDESTROYIMAGEBUFFERI3DPROC __wglewDestroyImageBufferI3D = NULL; +PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC __wglewReleaseImageBufferEventsI3D = NULL; + +PFNWGLDISABLEFRAMELOCKI3DPROC __wglewDisableFrameLockI3D = NULL; +PFNWGLENABLEFRAMELOCKI3DPROC __wglewEnableFrameLockI3D = NULL; +PFNWGLISENABLEDFRAMELOCKI3DPROC __wglewIsEnabledFrameLockI3D = NULL; +PFNWGLQUERYFRAMELOCKMASTERI3DPROC __wglewQueryFrameLockMasterI3D = NULL; + +PFNWGLBEGINFRAMETRACKINGI3DPROC __wglewBeginFrameTrackingI3D = NULL; +PFNWGLENDFRAMETRACKINGI3DPROC __wglewEndFrameTrackingI3D = NULL; +PFNWGLGETFRAMEUSAGEI3DPROC __wglewGetFrameUsageI3D = NULL; +PFNWGLQUERYFRAMETRACKINGI3DPROC __wglewQueryFrameTrackingI3D = NULL; + +PFNWGLCREATEAFFINITYDCNVPROC __wglewCreateAffinityDCNV = NULL; +PFNWGLDELETEDCNVPROC __wglewDeleteDCNV = NULL; +PFNWGLENUMGPUDEVICESNVPROC __wglewEnumGpuDevicesNV = NULL; +PFNWGLENUMGPUSFROMAFFINITYDCNVPROC __wglewEnumGpusFromAffinityDCNV = NULL; +PFNWGLENUMGPUSNVPROC __wglewEnumGpusNV = NULL; + +PFNWGLALLOCATEMEMORYNVPROC __wglewAllocateMemoryNV = NULL; +PFNWGLFREEMEMORYNVPROC __wglewFreeMemoryNV = NULL; + +PFNWGLGETMSCRATEOMLPROC __wglewGetMscRateOML = NULL; +PFNWGLGETSYNCVALUESOMLPROC __wglewGetSyncValuesOML = NULL; +PFNWGLSWAPBUFFERSMSCOMLPROC __wglewSwapBuffersMscOML = NULL; +PFNWGLSWAPLAYERBUFFERSMSCOMLPROC __wglewSwapLayerBuffersMscOML = NULL; +PFNWGLWAITFORMSCOMLPROC __wglewWaitForMscOML = NULL; +PFNWGLWAITFORSBCOMLPROC __wglewWaitForSbcOML = NULL; +GLboolean __WGLEW_3DFX_multisample = GL_FALSE; +GLboolean __WGLEW_3DL_stereo_control = GL_FALSE; +GLboolean __WGLEW_ARB_buffer_region = GL_FALSE; +GLboolean __WGLEW_ARB_extensions_string = GL_FALSE; +GLboolean __WGLEW_ARB_make_current_read = GL_FALSE; +GLboolean __WGLEW_ARB_multisample = GL_FALSE; +GLboolean __WGLEW_ARB_pbuffer = GL_FALSE; +GLboolean __WGLEW_ARB_pixel_format = GL_FALSE; +GLboolean __WGLEW_ARB_pixel_format_float = GL_FALSE; +GLboolean __WGLEW_ARB_render_texture = GL_FALSE; +GLboolean __WGLEW_ATI_pixel_format_float = GL_FALSE; +GLboolean __WGLEW_ATI_render_texture_rectangle = GL_FALSE; +GLboolean __WGLEW_EXT_depth_float = GL_FALSE; +GLboolean __WGLEW_EXT_display_color_table = GL_FALSE; +GLboolean __WGLEW_EXT_extensions_string = GL_FALSE; +GLboolean __WGLEW_EXT_framebuffer_sRGB = GL_FALSE; +GLboolean __WGLEW_EXT_make_current_read = GL_FALSE; +GLboolean __WGLEW_EXT_multisample = GL_FALSE; +GLboolean __WGLEW_EXT_pbuffer = GL_FALSE; +GLboolean __WGLEW_EXT_pixel_format = GL_FALSE; +GLboolean __WGLEW_EXT_pixel_format_packed_float = GL_FALSE; +GLboolean __WGLEW_EXT_swap_control = GL_FALSE; +GLboolean __WGLEW_I3D_digital_video_control = GL_FALSE; +GLboolean __WGLEW_I3D_gamma = GL_FALSE; +GLboolean __WGLEW_I3D_genlock = GL_FALSE; +GLboolean __WGLEW_I3D_image_buffer = GL_FALSE; +GLboolean __WGLEW_I3D_swap_frame_lock = GL_FALSE; +GLboolean __WGLEW_I3D_swap_frame_usage = GL_FALSE; +GLboolean __WGLEW_NV_float_buffer = GL_FALSE; +GLboolean __WGLEW_NV_gpu_affinity = GL_FALSE; +GLboolean __WGLEW_NV_render_depth_texture = GL_FALSE; +GLboolean __WGLEW_NV_render_texture_rectangle = GL_FALSE; +GLboolean __WGLEW_NV_vertex_array_range = GL_FALSE; +GLboolean __WGLEW_OML_sync_control = GL_FALSE; + +#endif /* !GLEW_MX */ + +#ifdef WGL_3DFX_multisample + +#endif /* WGL_3DFX_multisample */ + +#ifdef WGL_3DL_stereo_control + +static GLboolean _glewInit_WGL_3DL_stereo_control (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglSetStereoEmitterState3DL = (PFNWGLSETSTEREOEMITTERSTATE3DLPROC)glewGetProcAddress((const GLubyte*)"wglSetStereoEmitterState3DL")) == NULL) || r; + + return r; +} + +#endif /* WGL_3DL_stereo_control */ + +#ifdef WGL_ARB_buffer_region + +static GLboolean _glewInit_WGL_ARB_buffer_region (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglCreateBufferRegionARB = (PFNWGLCREATEBUFFERREGIONARBPROC)glewGetProcAddress((const GLubyte*)"wglCreateBufferRegionARB")) == NULL) || r; + r = ((wglDeleteBufferRegionARB = (PFNWGLDELETEBUFFERREGIONARBPROC)glewGetProcAddress((const GLubyte*)"wglDeleteBufferRegionARB")) == NULL) || r; + r = ((wglRestoreBufferRegionARB = (PFNWGLRESTOREBUFFERREGIONARBPROC)glewGetProcAddress((const GLubyte*)"wglRestoreBufferRegionARB")) == NULL) || r; + r = ((wglSaveBufferRegionARB = (PFNWGLSAVEBUFFERREGIONARBPROC)glewGetProcAddress((const GLubyte*)"wglSaveBufferRegionARB")) == NULL) || r; + + return r; +} + +#endif /* WGL_ARB_buffer_region */ + +#ifdef WGL_ARB_extensions_string + +static GLboolean _glewInit_WGL_ARB_extensions_string (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringARB")) == NULL) || r; + + return r; +} + +#endif /* WGL_ARB_extensions_string */ + +#ifdef WGL_ARB_make_current_read + +static GLboolean _glewInit_WGL_ARB_make_current_read (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglGetCurrentReadDCARB = (PFNWGLGETCURRENTREADDCARBPROC)glewGetProcAddress((const GLubyte*)"wglGetCurrentReadDCARB")) == NULL) || r; + r = ((wglMakeContextCurrentARB = (PFNWGLMAKECONTEXTCURRENTARBPROC)glewGetProcAddress((const GLubyte*)"wglMakeContextCurrentARB")) == NULL) || r; + + return r; +} + +#endif /* WGL_ARB_make_current_read */ + +#ifdef WGL_ARB_multisample + +#endif /* WGL_ARB_multisample */ + +#ifdef WGL_ARB_pbuffer + +static GLboolean _glewInit_WGL_ARB_pbuffer (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglCreatePbufferARB = (PFNWGLCREATEPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"wglCreatePbufferARB")) == NULL) || r; + r = ((wglDestroyPbufferARB = (PFNWGLDESTROYPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"wglDestroyPbufferARB")) == NULL) || r; + r = ((wglGetPbufferDCARB = (PFNWGLGETPBUFFERDCARBPROC)glewGetProcAddress((const GLubyte*)"wglGetPbufferDCARB")) == NULL) || r; + r = ((wglQueryPbufferARB = (PFNWGLQUERYPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"wglQueryPbufferARB")) == NULL) || r; + r = ((wglReleasePbufferDCARB = (PFNWGLRELEASEPBUFFERDCARBPROC)glewGetProcAddress((const GLubyte*)"wglReleasePbufferDCARB")) == NULL) || r; + + return r; +} + +#endif /* WGL_ARB_pbuffer */ + +#ifdef WGL_ARB_pixel_format + +static GLboolean _glewInit_WGL_ARB_pixel_format (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglChoosePixelFormatARB = (PFNWGLCHOOSEPIXELFORMATARBPROC)glewGetProcAddress((const GLubyte*)"wglChoosePixelFormatARB")) == NULL) || r; + r = ((wglGetPixelFormatAttribfvARB = (PFNWGLGETPIXELFORMATATTRIBFVARBPROC)glewGetProcAddress((const GLubyte*)"wglGetPixelFormatAttribfvARB")) == NULL) || r; + r = ((wglGetPixelFormatAttribivARB = (PFNWGLGETPIXELFORMATATTRIBIVARBPROC)glewGetProcAddress((const GLubyte*)"wglGetPixelFormatAttribivARB")) == NULL) || r; + + return r; +} + +#endif /* WGL_ARB_pixel_format */ + +#ifdef WGL_ARB_pixel_format_float + +#endif /* WGL_ARB_pixel_format_float */ + +#ifdef WGL_ARB_render_texture + +static GLboolean _glewInit_WGL_ARB_render_texture (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglBindTexImageARB = (PFNWGLBINDTEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"wglBindTexImageARB")) == NULL) || r; + r = ((wglReleaseTexImageARB = (PFNWGLRELEASETEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"wglReleaseTexImageARB")) == NULL) || r; + r = ((wglSetPbufferAttribARB = (PFNWGLSETPBUFFERATTRIBARBPROC)glewGetProcAddress((const GLubyte*)"wglSetPbufferAttribARB")) == NULL) || r; + + return r; +} + +#endif /* WGL_ARB_render_texture */ + +#ifdef WGL_ATI_pixel_format_float + +#endif /* WGL_ATI_pixel_format_float */ + +#ifdef WGL_ATI_render_texture_rectangle + +#endif /* WGL_ATI_render_texture_rectangle */ + +#ifdef WGL_EXT_depth_float + +#endif /* WGL_EXT_depth_float */ + +#ifdef WGL_EXT_display_color_table + +static GLboolean _glewInit_WGL_EXT_display_color_table (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglBindDisplayColorTableEXT = (PFNWGLBINDDISPLAYCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"wglBindDisplayColorTableEXT")) == NULL) || r; + r = ((wglCreateDisplayColorTableEXT = (PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"wglCreateDisplayColorTableEXT")) == NULL) || r; + r = ((wglDestroyDisplayColorTableEXT = (PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"wglDestroyDisplayColorTableEXT")) == NULL) || r; + r = ((wglLoadDisplayColorTableEXT = (PFNWGLLOADDISPLAYCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"wglLoadDisplayColorTableEXT")) == NULL) || r; + + return r; +} + +#endif /* WGL_EXT_display_color_table */ + +#ifdef WGL_EXT_extensions_string + +static GLboolean _glewInit_WGL_EXT_extensions_string (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringEXT")) == NULL) || r; + + return r; +} + +#endif /* WGL_EXT_extensions_string */ + +#ifdef WGL_EXT_framebuffer_sRGB + +#endif /* WGL_EXT_framebuffer_sRGB */ + +#ifdef WGL_EXT_make_current_read + +static GLboolean _glewInit_WGL_EXT_make_current_read (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglGetCurrentReadDCEXT = (PFNWGLGETCURRENTREADDCEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetCurrentReadDCEXT")) == NULL) || r; + r = ((wglMakeContextCurrentEXT = (PFNWGLMAKECONTEXTCURRENTEXTPROC)glewGetProcAddress((const GLubyte*)"wglMakeContextCurrentEXT")) == NULL) || r; + + return r; +} + +#endif /* WGL_EXT_make_current_read */ + +#ifdef WGL_EXT_multisample + +#endif /* WGL_EXT_multisample */ + +#ifdef WGL_EXT_pbuffer + +static GLboolean _glewInit_WGL_EXT_pbuffer (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglCreatePbufferEXT = (PFNWGLCREATEPBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"wglCreatePbufferEXT")) == NULL) || r; + r = ((wglDestroyPbufferEXT = (PFNWGLDESTROYPBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"wglDestroyPbufferEXT")) == NULL) || r; + r = ((wglGetPbufferDCEXT = (PFNWGLGETPBUFFERDCEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetPbufferDCEXT")) == NULL) || r; + r = ((wglQueryPbufferEXT = (PFNWGLQUERYPBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"wglQueryPbufferEXT")) == NULL) || r; + r = ((wglReleasePbufferDCEXT = (PFNWGLRELEASEPBUFFERDCEXTPROC)glewGetProcAddress((const GLubyte*)"wglReleasePbufferDCEXT")) == NULL) || r; + + return r; +} + +#endif /* WGL_EXT_pbuffer */ + +#ifdef WGL_EXT_pixel_format + +static GLboolean _glewInit_WGL_EXT_pixel_format (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglChoosePixelFormatEXT = (PFNWGLCHOOSEPIXELFORMATEXTPROC)glewGetProcAddress((const GLubyte*)"wglChoosePixelFormatEXT")) == NULL) || r; + r = ((wglGetPixelFormatAttribfvEXT = (PFNWGLGETPIXELFORMATATTRIBFVEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetPixelFormatAttribfvEXT")) == NULL) || r; + r = ((wglGetPixelFormatAttribivEXT = (PFNWGLGETPIXELFORMATATTRIBIVEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetPixelFormatAttribivEXT")) == NULL) || r; + + return r; +} + +#endif /* WGL_EXT_pixel_format */ + +#ifdef WGL_EXT_pixel_format_packed_float + +#endif /* WGL_EXT_pixel_format_packed_float */ + +#ifdef WGL_EXT_swap_control + +static GLboolean _glewInit_WGL_EXT_swap_control (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetSwapIntervalEXT")) == NULL) || r; + r = ((wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)glewGetProcAddress((const GLubyte*)"wglSwapIntervalEXT")) == NULL) || r; + + return r; +} + +#endif /* WGL_EXT_swap_control */ + +#ifdef WGL_I3D_digital_video_control + +static GLboolean _glewInit_WGL_I3D_digital_video_control (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglGetDigitalVideoParametersI3D = (PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetDigitalVideoParametersI3D")) == NULL) || r; + r = ((wglSetDigitalVideoParametersI3D = (PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC)glewGetProcAddress((const GLubyte*)"wglSetDigitalVideoParametersI3D")) == NULL) || r; + + return r; +} + +#endif /* WGL_I3D_digital_video_control */ + +#ifdef WGL_I3D_gamma + +static GLboolean _glewInit_WGL_I3D_gamma (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglGetGammaTableI3D = (PFNWGLGETGAMMATABLEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGammaTableI3D")) == NULL) || r; + r = ((wglGetGammaTableParametersI3D = (PFNWGLGETGAMMATABLEPARAMETERSI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGammaTableParametersI3D")) == NULL) || r; + r = ((wglSetGammaTableI3D = (PFNWGLSETGAMMATABLEI3DPROC)glewGetProcAddress((const GLubyte*)"wglSetGammaTableI3D")) == NULL) || r; + r = ((wglSetGammaTableParametersI3D = (PFNWGLSETGAMMATABLEPARAMETERSI3DPROC)glewGetProcAddress((const GLubyte*)"wglSetGammaTableParametersI3D")) == NULL) || r; + + return r; +} + +#endif /* WGL_I3D_gamma */ + +#ifdef WGL_I3D_genlock + +static GLboolean _glewInit_WGL_I3D_genlock (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglDisableGenlockI3D = (PFNWGLDISABLEGENLOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglDisableGenlockI3D")) == NULL) || r; + r = ((wglEnableGenlockI3D = (PFNWGLENABLEGENLOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglEnableGenlockI3D")) == NULL) || r; + r = ((wglGenlockSampleRateI3D = (PFNWGLGENLOCKSAMPLERATEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGenlockSampleRateI3D")) == NULL) || r; + r = ((wglGenlockSourceDelayI3D = (PFNWGLGENLOCKSOURCEDELAYI3DPROC)glewGetProcAddress((const GLubyte*)"wglGenlockSourceDelayI3D")) == NULL) || r; + r = ((wglGenlockSourceEdgeI3D = (PFNWGLGENLOCKSOURCEEDGEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGenlockSourceEdgeI3D")) == NULL) || r; + r = ((wglGenlockSourceI3D = (PFNWGLGENLOCKSOURCEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGenlockSourceI3D")) == NULL) || r; + r = ((wglGetGenlockSampleRateI3D = (PFNWGLGETGENLOCKSAMPLERATEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGenlockSampleRateI3D")) == NULL) || r; + r = ((wglGetGenlockSourceDelayI3D = (PFNWGLGETGENLOCKSOURCEDELAYI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGenlockSourceDelayI3D")) == NULL) || r; + r = ((wglGetGenlockSourceEdgeI3D = (PFNWGLGETGENLOCKSOURCEEDGEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGenlockSourceEdgeI3D")) == NULL) || r; + r = ((wglGetGenlockSourceI3D = (PFNWGLGETGENLOCKSOURCEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGenlockSourceI3D")) == NULL) || r; + r = ((wglIsEnabledGenlockI3D = (PFNWGLISENABLEDGENLOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglIsEnabledGenlockI3D")) == NULL) || r; + r = ((wglQueryGenlockMaxSourceDelayI3D = (PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC)glewGetProcAddress((const GLubyte*)"wglQueryGenlockMaxSourceDelayI3D")) == NULL) || r; + + return r; +} + +#endif /* WGL_I3D_genlock */ + +#ifdef WGL_I3D_image_buffer + +static GLboolean _glewInit_WGL_I3D_image_buffer (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglAssociateImageBufferEventsI3D = (PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC)glewGetProcAddress((const GLubyte*)"wglAssociateImageBufferEventsI3D")) == NULL) || r; + r = ((wglCreateImageBufferI3D = (PFNWGLCREATEIMAGEBUFFERI3DPROC)glewGetProcAddress((const GLubyte*)"wglCreateImageBufferI3D")) == NULL) || r; + r = ((wglDestroyImageBufferI3D = (PFNWGLDESTROYIMAGEBUFFERI3DPROC)glewGetProcAddress((const GLubyte*)"wglDestroyImageBufferI3D")) == NULL) || r; + r = ((wglReleaseImageBufferEventsI3D = (PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC)glewGetProcAddress((const GLubyte*)"wglReleaseImageBufferEventsI3D")) == NULL) || r; + + return r; +} + +#endif /* WGL_I3D_image_buffer */ + +#ifdef WGL_I3D_swap_frame_lock + +static GLboolean _glewInit_WGL_I3D_swap_frame_lock (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglDisableFrameLockI3D = (PFNWGLDISABLEFRAMELOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglDisableFrameLockI3D")) == NULL) || r; + r = ((wglEnableFrameLockI3D = (PFNWGLENABLEFRAMELOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglEnableFrameLockI3D")) == NULL) || r; + r = ((wglIsEnabledFrameLockI3D = (PFNWGLISENABLEDFRAMELOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglIsEnabledFrameLockI3D")) == NULL) || r; + r = ((wglQueryFrameLockMasterI3D = (PFNWGLQUERYFRAMELOCKMASTERI3DPROC)glewGetProcAddress((const GLubyte*)"wglQueryFrameLockMasterI3D")) == NULL) || r; + + return r; +} + +#endif /* WGL_I3D_swap_frame_lock */ + +#ifdef WGL_I3D_swap_frame_usage + +static GLboolean _glewInit_WGL_I3D_swap_frame_usage (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglBeginFrameTrackingI3D = (PFNWGLBEGINFRAMETRACKINGI3DPROC)glewGetProcAddress((const GLubyte*)"wglBeginFrameTrackingI3D")) == NULL) || r; + r = ((wglEndFrameTrackingI3D = (PFNWGLENDFRAMETRACKINGI3DPROC)glewGetProcAddress((const GLubyte*)"wglEndFrameTrackingI3D")) == NULL) || r; + r = ((wglGetFrameUsageI3D = (PFNWGLGETFRAMEUSAGEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetFrameUsageI3D")) == NULL) || r; + r = ((wglQueryFrameTrackingI3D = (PFNWGLQUERYFRAMETRACKINGI3DPROC)glewGetProcAddress((const GLubyte*)"wglQueryFrameTrackingI3D")) == NULL) || r; + + return r; +} + +#endif /* WGL_I3D_swap_frame_usage */ + +#ifdef WGL_NV_float_buffer + +#endif /* WGL_NV_float_buffer */ + +#ifdef WGL_NV_gpu_affinity + +static GLboolean _glewInit_WGL_NV_gpu_affinity (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglCreateAffinityDCNV = (PFNWGLCREATEAFFINITYDCNVPROC)glewGetProcAddress((const GLubyte*)"wglCreateAffinityDCNV")) == NULL) || r; + r = ((wglDeleteDCNV = (PFNWGLDELETEDCNVPROC)glewGetProcAddress((const GLubyte*)"wglDeleteDCNV")) == NULL) || r; + r = ((wglEnumGpuDevicesNV = (PFNWGLENUMGPUDEVICESNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumGpuDevicesNV")) == NULL) || r; + r = ((wglEnumGpusFromAffinityDCNV = (PFNWGLENUMGPUSFROMAFFINITYDCNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumGpusFromAffinityDCNV")) == NULL) || r; + r = ((wglEnumGpusNV = (PFNWGLENUMGPUSNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumGpusNV")) == NULL) || r; + + return r; +} + +#endif /* WGL_NV_gpu_affinity */ + +#ifdef WGL_NV_render_depth_texture + +#endif /* WGL_NV_render_depth_texture */ + +#ifdef WGL_NV_render_texture_rectangle + +#endif /* WGL_NV_render_texture_rectangle */ + +#ifdef WGL_NV_vertex_array_range + +static GLboolean _glewInit_WGL_NV_vertex_array_range (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglAllocateMemoryNV = (PFNWGLALLOCATEMEMORYNVPROC)glewGetProcAddress((const GLubyte*)"wglAllocateMemoryNV")) == NULL) || r; + r = ((wglFreeMemoryNV = (PFNWGLFREEMEMORYNVPROC)glewGetProcAddress((const GLubyte*)"wglFreeMemoryNV")) == NULL) || r; + + return r; +} + +#endif /* WGL_NV_vertex_array_range */ + +#ifdef WGL_OML_sync_control + +static GLboolean _glewInit_WGL_OML_sync_control (WGLEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((wglGetMscRateOML = (PFNWGLGETMSCRATEOMLPROC)glewGetProcAddress((const GLubyte*)"wglGetMscRateOML")) == NULL) || r; + r = ((wglGetSyncValuesOML = (PFNWGLGETSYNCVALUESOMLPROC)glewGetProcAddress((const GLubyte*)"wglGetSyncValuesOML")) == NULL) || r; + r = ((wglSwapBuffersMscOML = (PFNWGLSWAPBUFFERSMSCOMLPROC)glewGetProcAddress((const GLubyte*)"wglSwapBuffersMscOML")) == NULL) || r; + r = ((wglSwapLayerBuffersMscOML = (PFNWGLSWAPLAYERBUFFERSMSCOMLPROC)glewGetProcAddress((const GLubyte*)"wglSwapLayerBuffersMscOML")) == NULL) || r; + r = ((wglWaitForMscOML = (PFNWGLWAITFORMSCOMLPROC)glewGetProcAddress((const GLubyte*)"wglWaitForMscOML")) == NULL) || r; + r = ((wglWaitForSbcOML = (PFNWGLWAITFORSBCOMLPROC)glewGetProcAddress((const GLubyte*)"wglWaitForSbcOML")) == NULL) || r; + + return r; +} + +#endif /* WGL_OML_sync_control */ + +/* ------------------------------------------------------------------------- */ + +static PFNWGLGETEXTENSIONSSTRINGARBPROC _wglewGetExtensionsStringARB = NULL; +static PFNWGLGETEXTENSIONSSTRINGEXTPROC _wglewGetExtensionsStringEXT = NULL; + +GLboolean wglewGetExtension (const char* name) +{ + GLubyte* p; + GLubyte* end; + GLuint len = _glewStrLen((const GLubyte*)name); + if (_wglewGetExtensionsStringARB == NULL) + if (_wglewGetExtensionsStringEXT == NULL) + return GL_FALSE; + else + p = (GLubyte*)_wglewGetExtensionsStringEXT(); + else + p = (GLubyte*)_wglewGetExtensionsStringARB(wglGetCurrentDC()); + if (0 == p) return GL_FALSE; + end = p + _glewStrLen(p); + while (p < end) + { + GLuint n = _glewStrCLen(p, ' '); + if (len == n && _glewStrSame((const GLubyte*)name, p, n)) return GL_TRUE; + p += n+1; + } + return GL_FALSE; +} + +GLenum wglewContextInit (WGLEW_CONTEXT_ARG_DEF_LIST) +{ + GLboolean crippled; + /* find wgl extension string query functions */ + _wglewGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringARB"); + _wglewGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringEXT"); + /* initialize extensions */ + crippled = _wglewGetExtensionsStringARB == NULL && _wglewGetExtensionsStringEXT == NULL; +#ifdef WGL_3DFX_multisample + CONST_CAST(WGLEW_3DFX_multisample) = wglewGetExtension("WGL_3DFX_multisample"); +#endif /* WGL_3DFX_multisample */ +#ifdef WGL_3DL_stereo_control + CONST_CAST(WGLEW_3DL_stereo_control) = wglewGetExtension("WGL_3DL_stereo_control"); + if (glewExperimental || WGLEW_3DL_stereo_control|| crippled) CONST_CAST(WGLEW_3DL_stereo_control)= !_glewInit_WGL_3DL_stereo_control(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_3DL_stereo_control */ +#ifdef WGL_ARB_buffer_region + CONST_CAST(WGLEW_ARB_buffer_region) = wglewGetExtension("WGL_ARB_buffer_region"); + if (glewExperimental || WGLEW_ARB_buffer_region|| crippled) CONST_CAST(WGLEW_ARB_buffer_region)= !_glewInit_WGL_ARB_buffer_region(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_ARB_buffer_region */ +#ifdef WGL_ARB_extensions_string + CONST_CAST(WGLEW_ARB_extensions_string) = wglewGetExtension("WGL_ARB_extensions_string"); + if (glewExperimental || WGLEW_ARB_extensions_string|| crippled) CONST_CAST(WGLEW_ARB_extensions_string)= !_glewInit_WGL_ARB_extensions_string(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_ARB_extensions_string */ +#ifdef WGL_ARB_make_current_read + CONST_CAST(WGLEW_ARB_make_current_read) = wglewGetExtension("WGL_ARB_make_current_read"); + if (glewExperimental || WGLEW_ARB_make_current_read|| crippled) CONST_CAST(WGLEW_ARB_make_current_read)= !_glewInit_WGL_ARB_make_current_read(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_ARB_make_current_read */ +#ifdef WGL_ARB_multisample + CONST_CAST(WGLEW_ARB_multisample) = wglewGetExtension("WGL_ARB_multisample"); +#endif /* WGL_ARB_multisample */ +#ifdef WGL_ARB_pbuffer + CONST_CAST(WGLEW_ARB_pbuffer) = wglewGetExtension("WGL_ARB_pbuffer"); + if (glewExperimental || WGLEW_ARB_pbuffer|| crippled) CONST_CAST(WGLEW_ARB_pbuffer)= !_glewInit_WGL_ARB_pbuffer(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_ARB_pbuffer */ +#ifdef WGL_ARB_pixel_format + CONST_CAST(WGLEW_ARB_pixel_format) = wglewGetExtension("WGL_ARB_pixel_format"); + if (glewExperimental || WGLEW_ARB_pixel_format|| crippled) CONST_CAST(WGLEW_ARB_pixel_format)= !_glewInit_WGL_ARB_pixel_format(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_ARB_pixel_format */ +#ifdef WGL_ARB_pixel_format_float + CONST_CAST(WGLEW_ARB_pixel_format_float) = wglewGetExtension("WGL_ARB_pixel_format_float"); +#endif /* WGL_ARB_pixel_format_float */ +#ifdef WGL_ARB_render_texture + CONST_CAST(WGLEW_ARB_render_texture) = wglewGetExtension("WGL_ARB_render_texture"); + if (glewExperimental || WGLEW_ARB_render_texture|| crippled) CONST_CAST(WGLEW_ARB_render_texture)= !_glewInit_WGL_ARB_render_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_ARB_render_texture */ +#ifdef WGL_ATI_pixel_format_float + CONST_CAST(WGLEW_ATI_pixel_format_float) = wglewGetExtension("WGL_ATI_pixel_format_float"); +#endif /* WGL_ATI_pixel_format_float */ +#ifdef WGL_ATI_render_texture_rectangle + CONST_CAST(WGLEW_ATI_render_texture_rectangle) = wglewGetExtension("WGL_ATI_render_texture_rectangle"); +#endif /* WGL_ATI_render_texture_rectangle */ +#ifdef WGL_EXT_depth_float + CONST_CAST(WGLEW_EXT_depth_float) = wglewGetExtension("WGL_EXT_depth_float"); +#endif /* WGL_EXT_depth_float */ +#ifdef WGL_EXT_display_color_table + CONST_CAST(WGLEW_EXT_display_color_table) = wglewGetExtension("WGL_EXT_display_color_table"); + if (glewExperimental || WGLEW_EXT_display_color_table|| crippled) CONST_CAST(WGLEW_EXT_display_color_table)= !_glewInit_WGL_EXT_display_color_table(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_EXT_display_color_table */ +#ifdef WGL_EXT_extensions_string + CONST_CAST(WGLEW_EXT_extensions_string) = wglewGetExtension("WGL_EXT_extensions_string"); + if (glewExperimental || WGLEW_EXT_extensions_string|| crippled) CONST_CAST(WGLEW_EXT_extensions_string)= !_glewInit_WGL_EXT_extensions_string(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_EXT_extensions_string */ +#ifdef WGL_EXT_framebuffer_sRGB + CONST_CAST(WGLEW_EXT_framebuffer_sRGB) = wglewGetExtension("WGL_EXT_framebuffer_sRGB"); +#endif /* WGL_EXT_framebuffer_sRGB */ +#ifdef WGL_EXT_make_current_read + CONST_CAST(WGLEW_EXT_make_current_read) = wglewGetExtension("WGL_EXT_make_current_read"); + if (glewExperimental || WGLEW_EXT_make_current_read|| crippled) CONST_CAST(WGLEW_EXT_make_current_read)= !_glewInit_WGL_EXT_make_current_read(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_EXT_make_current_read */ +#ifdef WGL_EXT_multisample + CONST_CAST(WGLEW_EXT_multisample) = wglewGetExtension("WGL_EXT_multisample"); +#endif /* WGL_EXT_multisample */ +#ifdef WGL_EXT_pbuffer + CONST_CAST(WGLEW_EXT_pbuffer) = wglewGetExtension("WGL_EXT_pbuffer"); + if (glewExperimental || WGLEW_EXT_pbuffer|| crippled) CONST_CAST(WGLEW_EXT_pbuffer)= !_glewInit_WGL_EXT_pbuffer(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_EXT_pbuffer */ +#ifdef WGL_EXT_pixel_format + CONST_CAST(WGLEW_EXT_pixel_format) = wglewGetExtension("WGL_EXT_pixel_format"); + if (glewExperimental || WGLEW_EXT_pixel_format|| crippled) CONST_CAST(WGLEW_EXT_pixel_format)= !_glewInit_WGL_EXT_pixel_format(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_EXT_pixel_format */ +#ifdef WGL_EXT_pixel_format_packed_float + CONST_CAST(WGLEW_EXT_pixel_format_packed_float) = wglewGetExtension("WGL_EXT_pixel_format_packed_float"); +#endif /* WGL_EXT_pixel_format_packed_float */ +#ifdef WGL_EXT_swap_control + CONST_CAST(WGLEW_EXT_swap_control) = wglewGetExtension("WGL_EXT_swap_control"); + if (glewExperimental || WGLEW_EXT_swap_control|| crippled) CONST_CAST(WGLEW_EXT_swap_control)= !_glewInit_WGL_EXT_swap_control(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_EXT_swap_control */ +#ifdef WGL_I3D_digital_video_control + CONST_CAST(WGLEW_I3D_digital_video_control) = wglewGetExtension("WGL_I3D_digital_video_control"); + if (glewExperimental || WGLEW_I3D_digital_video_control|| crippled) CONST_CAST(WGLEW_I3D_digital_video_control)= !_glewInit_WGL_I3D_digital_video_control(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_I3D_digital_video_control */ +#ifdef WGL_I3D_gamma + CONST_CAST(WGLEW_I3D_gamma) = wglewGetExtension("WGL_I3D_gamma"); + if (glewExperimental || WGLEW_I3D_gamma|| crippled) CONST_CAST(WGLEW_I3D_gamma)= !_glewInit_WGL_I3D_gamma(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_I3D_gamma */ +#ifdef WGL_I3D_genlock + CONST_CAST(WGLEW_I3D_genlock) = wglewGetExtension("WGL_I3D_genlock"); + if (glewExperimental || WGLEW_I3D_genlock|| crippled) CONST_CAST(WGLEW_I3D_genlock)= !_glewInit_WGL_I3D_genlock(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_I3D_genlock */ +#ifdef WGL_I3D_image_buffer + CONST_CAST(WGLEW_I3D_image_buffer) = wglewGetExtension("WGL_I3D_image_buffer"); + if (glewExperimental || WGLEW_I3D_image_buffer|| crippled) CONST_CAST(WGLEW_I3D_image_buffer)= !_glewInit_WGL_I3D_image_buffer(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_I3D_image_buffer */ +#ifdef WGL_I3D_swap_frame_lock + CONST_CAST(WGLEW_I3D_swap_frame_lock) = wglewGetExtension("WGL_I3D_swap_frame_lock"); + if (glewExperimental || WGLEW_I3D_swap_frame_lock|| crippled) CONST_CAST(WGLEW_I3D_swap_frame_lock)= !_glewInit_WGL_I3D_swap_frame_lock(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_I3D_swap_frame_lock */ +#ifdef WGL_I3D_swap_frame_usage + CONST_CAST(WGLEW_I3D_swap_frame_usage) = wglewGetExtension("WGL_I3D_swap_frame_usage"); + if (glewExperimental || WGLEW_I3D_swap_frame_usage|| crippled) CONST_CAST(WGLEW_I3D_swap_frame_usage)= !_glewInit_WGL_I3D_swap_frame_usage(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_I3D_swap_frame_usage */ +#ifdef WGL_NV_float_buffer + CONST_CAST(WGLEW_NV_float_buffer) = wglewGetExtension("WGL_NV_float_buffer"); +#endif /* WGL_NV_float_buffer */ +#ifdef WGL_NV_gpu_affinity + CONST_CAST(WGLEW_NV_gpu_affinity) = wglewGetExtension("WGL_NV_gpu_affinity"); + if (glewExperimental || WGLEW_NV_gpu_affinity|| crippled) CONST_CAST(WGLEW_NV_gpu_affinity)= !_glewInit_WGL_NV_gpu_affinity(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_NV_gpu_affinity */ +#ifdef WGL_NV_render_depth_texture + CONST_CAST(WGLEW_NV_render_depth_texture) = wglewGetExtension("WGL_NV_render_depth_texture"); +#endif /* WGL_NV_render_depth_texture */ +#ifdef WGL_NV_render_texture_rectangle + CONST_CAST(WGLEW_NV_render_texture_rectangle) = wglewGetExtension("WGL_NV_render_texture_rectangle"); +#endif /* WGL_NV_render_texture_rectangle */ +#ifdef WGL_NV_vertex_array_range + CONST_CAST(WGLEW_NV_vertex_array_range) = wglewGetExtension("WGL_NV_vertex_array_range"); + if (glewExperimental || WGLEW_NV_vertex_array_range|| crippled) CONST_CAST(WGLEW_NV_vertex_array_range)= !_glewInit_WGL_NV_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_NV_vertex_array_range */ +#ifdef WGL_OML_sync_control + CONST_CAST(WGLEW_OML_sync_control) = wglewGetExtension("WGL_OML_sync_control"); + if (glewExperimental || WGLEW_OML_sync_control|| crippled) CONST_CAST(WGLEW_OML_sync_control)= !_glewInit_WGL_OML_sync_control(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* WGL_OML_sync_control */ + + return GLEW_OK; +} + +#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) + +PFNGLXGETCURRENTDISPLAYPROC __glewXGetCurrentDisplay = NULL; + +PFNGLXCHOOSEFBCONFIGPROC __glewXChooseFBConfig = NULL; +PFNGLXCREATENEWCONTEXTPROC __glewXCreateNewContext = NULL; +PFNGLXCREATEPBUFFERPROC __glewXCreatePbuffer = NULL; +PFNGLXCREATEPIXMAPPROC __glewXCreatePixmap = NULL; +PFNGLXCREATEWINDOWPROC __glewXCreateWindow = NULL; +PFNGLXDESTROYPBUFFERPROC __glewXDestroyPbuffer = NULL; +PFNGLXDESTROYPIXMAPPROC __glewXDestroyPixmap = NULL; +PFNGLXDESTROYWINDOWPROC __glewXDestroyWindow = NULL; +PFNGLXGETCURRENTREADDRAWABLEPROC __glewXGetCurrentReadDrawable = NULL; +PFNGLXGETFBCONFIGATTRIBPROC __glewXGetFBConfigAttrib = NULL; +PFNGLXGETFBCONFIGSPROC __glewXGetFBConfigs = NULL; +PFNGLXGETSELECTEDEVENTPROC __glewXGetSelectedEvent = NULL; +PFNGLXGETVISUALFROMFBCONFIGPROC __glewXGetVisualFromFBConfig = NULL; +PFNGLXMAKECONTEXTCURRENTPROC __glewXMakeContextCurrent = NULL; +PFNGLXQUERYCONTEXTPROC __glewXQueryContext = NULL; +PFNGLXQUERYDRAWABLEPROC __glewXQueryDrawable = NULL; +PFNGLXSELECTEVENTPROC __glewXSelectEvent = NULL; + +PFNGLXBINDTEXIMAGEATIPROC __glewXBindTexImageATI = NULL; +PFNGLXDRAWABLEATTRIBATIPROC __glewXDrawableAttribATI = NULL; +PFNGLXRELEASETEXIMAGEATIPROC __glewXReleaseTexImageATI = NULL; + +PFNGLXFREECONTEXTEXTPROC __glewXFreeContextEXT = NULL; +PFNGLXGETCONTEXTIDEXTPROC __glewXGetContextIDEXT = NULL; +PFNGLXIMPORTCONTEXTEXTPROC __glewXImportContextEXT = NULL; +PFNGLXQUERYCONTEXTINFOEXTPROC __glewXQueryContextInfoEXT = NULL; + +PFNGLXBINDTEXIMAGEEXTPROC __glewXBindTexImageEXT = NULL; +PFNGLXRELEASETEXIMAGEEXTPROC __glewXReleaseTexImageEXT = NULL; + +PFNGLXGETAGPOFFSETMESAPROC __glewXGetAGPOffsetMESA = NULL; + +PFNGLXCOPYSUBBUFFERMESAPROC __glewXCopySubBufferMESA = NULL; + +PFNGLXCREATEGLXPIXMAPMESAPROC __glewXCreateGLXPixmapMESA = NULL; + +PFNGLXRELEASEBUFFERSMESAPROC __glewXReleaseBuffersMESA = NULL; + +PFNGLXSET3DFXMODEMESAPROC __glewXSet3DfxModeMESA = NULL; + +PFNGLXALLOCATEMEMORYNVPROC __glewXAllocateMemoryNV = NULL; +PFNGLXFREEMEMORYNVPROC __glewXFreeMemoryNV = NULL; + +#ifdef GLX_OML_sync_control +PFNGLXGETMSCRATEOMLPROC __glewXGetMscRateOML = NULL; +PFNGLXGETSYNCVALUESOMLPROC __glewXGetSyncValuesOML = NULL; +PFNGLXSWAPBUFFERSMSCOMLPROC __glewXSwapBuffersMscOML = NULL; +PFNGLXWAITFORMSCOMLPROC __glewXWaitForMscOML = NULL; +PFNGLXWAITFORSBCOMLPROC __glewXWaitForSbcOML = NULL; +#endif + +PFNGLXCHOOSEFBCONFIGSGIXPROC __glewXChooseFBConfigSGIX = NULL; +PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC __glewXCreateContextWithConfigSGIX = NULL; +PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC __glewXCreateGLXPixmapWithConfigSGIX = NULL; +PFNGLXGETFBCONFIGATTRIBSGIXPROC __glewXGetFBConfigAttribSGIX = NULL; +PFNGLXGETFBCONFIGFROMVISUALSGIXPROC __glewXGetFBConfigFromVisualSGIX = NULL; +PFNGLXGETVISUALFROMFBCONFIGSGIXPROC __glewXGetVisualFromFBConfigSGIX = NULL; + +PFNGLXBINDHYPERPIPESGIXPROC __glewXBindHyperpipeSGIX = NULL; +PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC __glewXDestroyHyperpipeConfigSGIX = NULL; +PFNGLXHYPERPIPEATTRIBSGIXPROC __glewXHyperpipeAttribSGIX = NULL; +PFNGLXHYPERPIPECONFIGSGIXPROC __glewXHyperpipeConfigSGIX = NULL; +PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC __glewXQueryHyperpipeAttribSGIX = NULL; +PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC __glewXQueryHyperpipeBestAttribSGIX = NULL; +PFNGLXQUERYHYPERPIPECONFIGSGIXPROC __glewXQueryHyperpipeConfigSGIX = NULL; +PFNGLXQUERYHYPERPIPENETWORKSGIXPROC __glewXQueryHyperpipeNetworkSGIX = NULL; + +PFNGLXCREATEGLXPBUFFERSGIXPROC __glewXCreateGLXPbufferSGIX = NULL; +PFNGLXDESTROYGLXPBUFFERSGIXPROC __glewXDestroyGLXPbufferSGIX = NULL; +PFNGLXGETSELECTEDEVENTSGIXPROC __glewXGetSelectedEventSGIX = NULL; +PFNGLXQUERYGLXPBUFFERSGIXPROC __glewXQueryGLXPbufferSGIX = NULL; +PFNGLXSELECTEVENTSGIXPROC __glewXSelectEventSGIX = NULL; + +PFNGLXBINDSWAPBARRIERSGIXPROC __glewXBindSwapBarrierSGIX = NULL; +PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC __glewXQueryMaxSwapBarriersSGIX = NULL; + +PFNGLXJOINSWAPGROUPSGIXPROC __glewXJoinSwapGroupSGIX = NULL; + +PFNGLXBINDCHANNELTOWINDOWSGIXPROC __glewXBindChannelToWindowSGIX = NULL; +PFNGLXCHANNELRECTSGIXPROC __glewXChannelRectSGIX = NULL; +PFNGLXCHANNELRECTSYNCSGIXPROC __glewXChannelRectSyncSGIX = NULL; +PFNGLXQUERYCHANNELDELTASSGIXPROC __glewXQueryChannelDeltasSGIX = NULL; +PFNGLXQUERYCHANNELRECTSGIXPROC __glewXQueryChannelRectSGIX = NULL; + +PFNGLXCUSHIONSGIPROC __glewXCushionSGI = NULL; + +PFNGLXGETCURRENTREADDRAWABLESGIPROC __glewXGetCurrentReadDrawableSGI = NULL; +PFNGLXMAKECURRENTREADSGIPROC __glewXMakeCurrentReadSGI = NULL; + +PFNGLXSWAPINTERVALSGIPROC __glewXSwapIntervalSGI = NULL; + +PFNGLXGETVIDEOSYNCSGIPROC __glewXGetVideoSyncSGI = NULL; +PFNGLXWAITVIDEOSYNCSGIPROC __glewXWaitVideoSyncSGI = NULL; + +PFNGLXGETTRANSPARENTINDEXSUNPROC __glewXGetTransparentIndexSUN = NULL; + +PFNGLXGETVIDEORESIZESUNPROC __glewXGetVideoResizeSUN = NULL; +PFNGLXVIDEORESIZESUNPROC __glewXVideoResizeSUN = NULL; + +#if !defined(GLEW_MX) + +GLboolean __GLXEW_VERSION_1_0 = GL_FALSE; +GLboolean __GLXEW_VERSION_1_1 = GL_FALSE; +GLboolean __GLXEW_VERSION_1_2 = GL_FALSE; +GLboolean __GLXEW_VERSION_1_3 = GL_FALSE; +GLboolean __GLXEW_VERSION_1_4 = GL_FALSE; +GLboolean __GLXEW_3DFX_multisample = GL_FALSE; +GLboolean __GLXEW_ARB_fbconfig_float = GL_FALSE; +GLboolean __GLXEW_ARB_get_proc_address = GL_FALSE; +GLboolean __GLXEW_ARB_multisample = GL_FALSE; +GLboolean __GLXEW_ATI_pixel_format_float = GL_FALSE; +GLboolean __GLXEW_ATI_render_texture = GL_FALSE; +GLboolean __GLXEW_EXT_fbconfig_packed_float = GL_FALSE; +GLboolean __GLXEW_EXT_framebuffer_sRGB = GL_FALSE; +GLboolean __GLXEW_EXT_import_context = GL_FALSE; +GLboolean __GLXEW_EXT_scene_marker = GL_FALSE; +GLboolean __GLXEW_EXT_texture_from_pixmap = GL_FALSE; +GLboolean __GLXEW_EXT_visual_info = GL_FALSE; +GLboolean __GLXEW_EXT_visual_rating = GL_FALSE; +GLboolean __GLXEW_MESA_agp_offset = GL_FALSE; +GLboolean __GLXEW_MESA_copy_sub_buffer = GL_FALSE; +GLboolean __GLXEW_MESA_pixmap_colormap = GL_FALSE; +GLboolean __GLXEW_MESA_release_buffers = GL_FALSE; +GLboolean __GLXEW_MESA_set_3dfx_mode = GL_FALSE; +GLboolean __GLXEW_NV_float_buffer = GL_FALSE; +GLboolean __GLXEW_NV_vertex_array_range = GL_FALSE; +GLboolean __GLXEW_OML_swap_method = GL_FALSE; +#ifdef GLX_OML_sync_control +GLboolean __GLXEW_OML_sync_control = GL_FALSE; +#endif +GLboolean __GLXEW_SGIS_blended_overlay = GL_FALSE; +GLboolean __GLXEW_SGIS_color_range = GL_FALSE; +GLboolean __GLXEW_SGIS_multisample = GL_FALSE; +GLboolean __GLXEW_SGIS_shared_multisample = GL_FALSE; +GLboolean __GLXEW_SGIX_fbconfig = GL_FALSE; +GLboolean __GLXEW_SGIX_hyperpipe = GL_FALSE; +GLboolean __GLXEW_SGIX_pbuffer = GL_FALSE; +GLboolean __GLXEW_SGIX_swap_barrier = GL_FALSE; +GLboolean __GLXEW_SGIX_swap_group = GL_FALSE; +GLboolean __GLXEW_SGIX_video_resize = GL_FALSE; +GLboolean __GLXEW_SGIX_visual_select_group = GL_FALSE; +GLboolean __GLXEW_SGI_cushion = GL_FALSE; +GLboolean __GLXEW_SGI_make_current_read = GL_FALSE; +GLboolean __GLXEW_SGI_swap_control = GL_FALSE; +GLboolean __GLXEW_SGI_video_sync = GL_FALSE; +GLboolean __GLXEW_SUN_get_transparent_index = GL_FALSE; +GLboolean __GLXEW_SUN_video_resize = GL_FALSE; + +#endif /* !GLEW_MX */ + +#ifdef GLX_VERSION_1_2 + +static GLboolean _glewInit_GLX_VERSION_1_2 (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXGetCurrentDisplay = (PFNGLXGETCURRENTDISPLAYPROC)glewGetProcAddress((const GLubyte*)"glXGetCurrentDisplay")) == NULL) || r; + + return r; +} + +#endif /* GLX_VERSION_1_2 */ + +#ifdef GLX_VERSION_1_3 + +static GLboolean _glewInit_GLX_VERSION_1_3 (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXChooseFBConfig = (PFNGLXCHOOSEFBCONFIGPROC)glewGetProcAddress((const GLubyte*)"glXChooseFBConfig")) == NULL) || r; + r = ((glXCreateNewContext = (PFNGLXCREATENEWCONTEXTPROC)glewGetProcAddress((const GLubyte*)"glXCreateNewContext")) == NULL) || r; + r = ((glXCreatePbuffer = (PFNGLXCREATEPBUFFERPROC)glewGetProcAddress((const GLubyte*)"glXCreatePbuffer")) == NULL) || r; + r = ((glXCreatePixmap = (PFNGLXCREATEPIXMAPPROC)glewGetProcAddress((const GLubyte*)"glXCreatePixmap")) == NULL) || r; + r = ((glXCreateWindow = (PFNGLXCREATEWINDOWPROC)glewGetProcAddress((const GLubyte*)"glXCreateWindow")) == NULL) || r; + r = ((glXDestroyPbuffer = (PFNGLXDESTROYPBUFFERPROC)glewGetProcAddress((const GLubyte*)"glXDestroyPbuffer")) == NULL) || r; + r = ((glXDestroyPixmap = (PFNGLXDESTROYPIXMAPPROC)glewGetProcAddress((const GLubyte*)"glXDestroyPixmap")) == NULL) || r; + r = ((glXDestroyWindow = (PFNGLXDESTROYWINDOWPROC)glewGetProcAddress((const GLubyte*)"glXDestroyWindow")) == NULL) || r; + r = ((glXGetCurrentReadDrawable = (PFNGLXGETCURRENTREADDRAWABLEPROC)glewGetProcAddress((const GLubyte*)"glXGetCurrentReadDrawable")) == NULL) || r; + r = ((glXGetFBConfigAttrib = (PFNGLXGETFBCONFIGATTRIBPROC)glewGetProcAddress((const GLubyte*)"glXGetFBConfigAttrib")) == NULL) || r; + r = ((glXGetFBConfigs = (PFNGLXGETFBCONFIGSPROC)glewGetProcAddress((const GLubyte*)"glXGetFBConfigs")) == NULL) || r; + r = ((glXGetSelectedEvent = (PFNGLXGETSELECTEDEVENTPROC)glewGetProcAddress((const GLubyte*)"glXGetSelectedEvent")) == NULL) || r; + r = ((glXGetVisualFromFBConfig = (PFNGLXGETVISUALFROMFBCONFIGPROC)glewGetProcAddress((const GLubyte*)"glXGetVisualFromFBConfig")) == NULL) || r; + r = ((glXMakeContextCurrent = (PFNGLXMAKECONTEXTCURRENTPROC)glewGetProcAddress((const GLubyte*)"glXMakeContextCurrent")) == NULL) || r; + r = ((glXQueryContext = (PFNGLXQUERYCONTEXTPROC)glewGetProcAddress((const GLubyte*)"glXQueryContext")) == NULL) || r; + r = ((glXQueryDrawable = (PFNGLXQUERYDRAWABLEPROC)glewGetProcAddress((const GLubyte*)"glXQueryDrawable")) == NULL) || r; + r = ((glXSelectEvent = (PFNGLXSELECTEVENTPROC)glewGetProcAddress((const GLubyte*)"glXSelectEvent")) == NULL) || r; + + return r; +} + +#endif /* GLX_VERSION_1_3 */ + +#ifdef GLX_VERSION_1_4 + +#endif /* GLX_VERSION_1_4 */ + +#ifdef GLX_3DFX_multisample + +#endif /* GLX_3DFX_multisample */ + +#ifdef GLX_ARB_fbconfig_float + +#endif /* GLX_ARB_fbconfig_float */ + +#ifdef GLX_ARB_get_proc_address + +#endif /* GLX_ARB_get_proc_address */ + +#ifdef GLX_ARB_multisample + +#endif /* GLX_ARB_multisample */ + +#ifdef GLX_ATI_pixel_format_float + +#endif /* GLX_ATI_pixel_format_float */ + +#ifdef GLX_ATI_render_texture + +static GLboolean _glewInit_GLX_ATI_render_texture (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXBindTexImageATI = (PFNGLXBINDTEXIMAGEATIPROC)glewGetProcAddress((const GLubyte*)"glXBindTexImageATI")) == NULL) || r; + r = ((glXDrawableAttribATI = (PFNGLXDRAWABLEATTRIBATIPROC)glewGetProcAddress((const GLubyte*)"glXDrawableAttribATI")) == NULL) || r; + r = ((glXReleaseTexImageATI = (PFNGLXRELEASETEXIMAGEATIPROC)glewGetProcAddress((const GLubyte*)"glXReleaseTexImageATI")) == NULL) || r; + + return r; +} + +#endif /* GLX_ATI_render_texture */ + +#ifdef GLX_EXT_fbconfig_packed_float + +#endif /* GLX_EXT_fbconfig_packed_float */ + +#ifdef GLX_EXT_framebuffer_sRGB + +#endif /* GLX_EXT_framebuffer_sRGB */ + +#ifdef GLX_EXT_import_context + +static GLboolean _glewInit_GLX_EXT_import_context (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXFreeContextEXT = (PFNGLXFREECONTEXTEXTPROC)glewGetProcAddress((const GLubyte*)"glXFreeContextEXT")) == NULL) || r; + r = ((glXGetContextIDEXT = (PFNGLXGETCONTEXTIDEXTPROC)glewGetProcAddress((const GLubyte*)"glXGetContextIDEXT")) == NULL) || r; + r = ((glXImportContextEXT = (PFNGLXIMPORTCONTEXTEXTPROC)glewGetProcAddress((const GLubyte*)"glXImportContextEXT")) == NULL) || r; + r = ((glXQueryContextInfoEXT = (PFNGLXQUERYCONTEXTINFOEXTPROC)glewGetProcAddress((const GLubyte*)"glXQueryContextInfoEXT")) == NULL) || r; + + return r; +} + +#endif /* GLX_EXT_import_context */ + +#ifdef GLX_EXT_scene_marker + +#endif /* GLX_EXT_scene_marker */ + +#ifdef GLX_EXT_texture_from_pixmap + +static GLboolean _glewInit_GLX_EXT_texture_from_pixmap (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXBindTexImageEXT = (PFNGLXBINDTEXIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glXBindTexImageEXT")) == NULL) || r; + r = ((glXReleaseTexImageEXT = (PFNGLXRELEASETEXIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glXReleaseTexImageEXT")) == NULL) || r; + + return r; +} + +#endif /* GLX_EXT_texture_from_pixmap */ + +#ifdef GLX_EXT_visual_info + +#endif /* GLX_EXT_visual_info */ + +#ifdef GLX_EXT_visual_rating + +#endif /* GLX_EXT_visual_rating */ + +#ifdef GLX_MESA_agp_offset + +static GLboolean _glewInit_GLX_MESA_agp_offset (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXGetAGPOffsetMESA = (PFNGLXGETAGPOFFSETMESAPROC)glewGetProcAddress((const GLubyte*)"glXGetAGPOffsetMESA")) == NULL) || r; + + return r; +} + +#endif /* GLX_MESA_agp_offset */ + +#ifdef GLX_MESA_copy_sub_buffer + +static GLboolean _glewInit_GLX_MESA_copy_sub_buffer (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXCopySubBufferMESA = (PFNGLXCOPYSUBBUFFERMESAPROC)glewGetProcAddress((const GLubyte*)"glXCopySubBufferMESA")) == NULL) || r; + + return r; +} + +#endif /* GLX_MESA_copy_sub_buffer */ + +#ifdef GLX_MESA_pixmap_colormap + +static GLboolean _glewInit_GLX_MESA_pixmap_colormap (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXCreateGLXPixmapMESA = (PFNGLXCREATEGLXPIXMAPMESAPROC)glewGetProcAddress((const GLubyte*)"glXCreateGLXPixmapMESA")) == NULL) || r; + + return r; +} + +#endif /* GLX_MESA_pixmap_colormap */ + +#ifdef GLX_MESA_release_buffers + +static GLboolean _glewInit_GLX_MESA_release_buffers (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXReleaseBuffersMESA = (PFNGLXRELEASEBUFFERSMESAPROC)glewGetProcAddress((const GLubyte*)"glXReleaseBuffersMESA")) == NULL) || r; + + return r; +} + +#endif /* GLX_MESA_release_buffers */ + +#ifdef GLX_MESA_set_3dfx_mode + +static GLboolean _glewInit_GLX_MESA_set_3dfx_mode (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXSet3DfxModeMESA = (PFNGLXSET3DFXMODEMESAPROC)glewGetProcAddress((const GLubyte*)"glXSet3DfxModeMESA")) == NULL) || r; + + return r; +} + +#endif /* GLX_MESA_set_3dfx_mode */ + +#ifdef GLX_NV_float_buffer + +#endif /* GLX_NV_float_buffer */ + +#ifdef GLX_NV_vertex_array_range + +static GLboolean _glewInit_GLX_NV_vertex_array_range (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXAllocateMemoryNV = (PFNGLXALLOCATEMEMORYNVPROC)glewGetProcAddress((const GLubyte*)"glXAllocateMemoryNV")) == NULL) || r; + r = ((glXFreeMemoryNV = (PFNGLXFREEMEMORYNVPROC)glewGetProcAddress((const GLubyte*)"glXFreeMemoryNV")) == NULL) || r; + + return r; +} + +#endif /* GLX_NV_vertex_array_range */ + +#ifdef GLX_OML_swap_method + +#endif /* GLX_OML_swap_method */ + +#if defined(GLX_OML_sync_control) && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +#include + +static GLboolean _glewInit_GLX_OML_sync_control (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXGetMscRateOML = (PFNGLXGETMSCRATEOMLPROC)glewGetProcAddress((const GLubyte*)"glXGetMscRateOML")) == NULL) || r; + r = ((glXGetSyncValuesOML = (PFNGLXGETSYNCVALUESOMLPROC)glewGetProcAddress((const GLubyte*)"glXGetSyncValuesOML")) == NULL) || r; + r = ((glXSwapBuffersMscOML = (PFNGLXSWAPBUFFERSMSCOMLPROC)glewGetProcAddress((const GLubyte*)"glXSwapBuffersMscOML")) == NULL) || r; + r = ((glXWaitForMscOML = (PFNGLXWAITFORMSCOMLPROC)glewGetProcAddress((const GLubyte*)"glXWaitForMscOML")) == NULL) || r; + r = ((glXWaitForSbcOML = (PFNGLXWAITFORSBCOMLPROC)glewGetProcAddress((const GLubyte*)"glXWaitForSbcOML")) == NULL) || r; + + return r; +} + +#endif /* GLX_OML_sync_control */ + +#ifdef GLX_SGIS_blended_overlay + +#endif /* GLX_SGIS_blended_overlay */ + +#ifdef GLX_SGIS_color_range + +#endif /* GLX_SGIS_color_range */ + +#ifdef GLX_SGIS_multisample + +#endif /* GLX_SGIS_multisample */ + +#ifdef GLX_SGIS_shared_multisample + +#endif /* GLX_SGIS_shared_multisample */ + +#ifdef GLX_SGIX_fbconfig + +static GLboolean _glewInit_GLX_SGIX_fbconfig (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXChooseFBConfigSGIX = (PFNGLXCHOOSEFBCONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXChooseFBConfigSGIX")) == NULL) || r; + r = ((glXCreateContextWithConfigSGIX = (PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXCreateContextWithConfigSGIX")) == NULL) || r; + r = ((glXCreateGLXPixmapWithConfigSGIX = (PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXCreateGLXPixmapWithConfigSGIX")) == NULL) || r; + r = ((glXGetFBConfigAttribSGIX = (PFNGLXGETFBCONFIGATTRIBSGIXPROC)glewGetProcAddress((const GLubyte*)"glXGetFBConfigAttribSGIX")) == NULL) || r; + r = ((glXGetFBConfigFromVisualSGIX = (PFNGLXGETFBCONFIGFROMVISUALSGIXPROC)glewGetProcAddress((const GLubyte*)"glXGetFBConfigFromVisualSGIX")) == NULL) || r; + r = ((glXGetVisualFromFBConfigSGIX = (PFNGLXGETVISUALFROMFBCONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXGetVisualFromFBConfigSGIX")) == NULL) || r; + + return r; +} + +#endif /* GLX_SGIX_fbconfig */ + +#ifdef GLX_SGIX_hyperpipe + +static GLboolean _glewInit_GLX_SGIX_hyperpipe (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXBindHyperpipeSGIX = (PFNGLXBINDHYPERPIPESGIXPROC)glewGetProcAddress((const GLubyte*)"glXBindHyperpipeSGIX")) == NULL) || r; + r = ((glXDestroyHyperpipeConfigSGIX = (PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXDestroyHyperpipeConfigSGIX")) == NULL) || r; + r = ((glXHyperpipeAttribSGIX = (PFNGLXHYPERPIPEATTRIBSGIXPROC)glewGetProcAddress((const GLubyte*)"glXHyperpipeAttribSGIX")) == NULL) || r; + r = ((glXHyperpipeConfigSGIX = (PFNGLXHYPERPIPECONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXHyperpipeConfigSGIX")) == NULL) || r; + r = ((glXQueryHyperpipeAttribSGIX = (PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryHyperpipeAttribSGIX")) == NULL) || r; + r = ((glXQueryHyperpipeBestAttribSGIX = (PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryHyperpipeBestAttribSGIX")) == NULL) || r; + r = ((glXQueryHyperpipeConfigSGIX = (PFNGLXQUERYHYPERPIPECONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryHyperpipeConfigSGIX")) == NULL) || r; + r = ((glXQueryHyperpipeNetworkSGIX = (PFNGLXQUERYHYPERPIPENETWORKSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryHyperpipeNetworkSGIX")) == NULL) || r; + + return r; +} + +#endif /* GLX_SGIX_hyperpipe */ + +#ifdef GLX_SGIX_pbuffer + +static GLboolean _glewInit_GLX_SGIX_pbuffer (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXCreateGLXPbufferSGIX = (PFNGLXCREATEGLXPBUFFERSGIXPROC)glewGetProcAddress((const GLubyte*)"glXCreateGLXPbufferSGIX")) == NULL) || r; + r = ((glXDestroyGLXPbufferSGIX = (PFNGLXDESTROYGLXPBUFFERSGIXPROC)glewGetProcAddress((const GLubyte*)"glXDestroyGLXPbufferSGIX")) == NULL) || r; + r = ((glXGetSelectedEventSGIX = (PFNGLXGETSELECTEDEVENTSGIXPROC)glewGetProcAddress((const GLubyte*)"glXGetSelectedEventSGIX")) == NULL) || r; + r = ((glXQueryGLXPbufferSGIX = (PFNGLXQUERYGLXPBUFFERSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryGLXPbufferSGIX")) == NULL) || r; + r = ((glXSelectEventSGIX = (PFNGLXSELECTEVENTSGIXPROC)glewGetProcAddress((const GLubyte*)"glXSelectEventSGIX")) == NULL) || r; + + return r; +} + +#endif /* GLX_SGIX_pbuffer */ + +#ifdef GLX_SGIX_swap_barrier + +static GLboolean _glewInit_GLX_SGIX_swap_barrier (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXBindSwapBarrierSGIX = (PFNGLXBINDSWAPBARRIERSGIXPROC)glewGetProcAddress((const GLubyte*)"glXBindSwapBarrierSGIX")) == NULL) || r; + r = ((glXQueryMaxSwapBarriersSGIX = (PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryMaxSwapBarriersSGIX")) == NULL) || r; + + return r; +} + +#endif /* GLX_SGIX_swap_barrier */ + +#ifdef GLX_SGIX_swap_group + +static GLboolean _glewInit_GLX_SGIX_swap_group (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXJoinSwapGroupSGIX = (PFNGLXJOINSWAPGROUPSGIXPROC)glewGetProcAddress((const GLubyte*)"glXJoinSwapGroupSGIX")) == NULL) || r; + + return r; +} + +#endif /* GLX_SGIX_swap_group */ + +#ifdef GLX_SGIX_video_resize + +static GLboolean _glewInit_GLX_SGIX_video_resize (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXBindChannelToWindowSGIX = (PFNGLXBINDCHANNELTOWINDOWSGIXPROC)glewGetProcAddress((const GLubyte*)"glXBindChannelToWindowSGIX")) == NULL) || r; + r = ((glXChannelRectSGIX = (PFNGLXCHANNELRECTSGIXPROC)glewGetProcAddress((const GLubyte*)"glXChannelRectSGIX")) == NULL) || r; + r = ((glXChannelRectSyncSGIX = (PFNGLXCHANNELRECTSYNCSGIXPROC)glewGetProcAddress((const GLubyte*)"glXChannelRectSyncSGIX")) == NULL) || r; + r = ((glXQueryChannelDeltasSGIX = (PFNGLXQUERYCHANNELDELTASSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryChannelDeltasSGIX")) == NULL) || r; + r = ((glXQueryChannelRectSGIX = (PFNGLXQUERYCHANNELRECTSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryChannelRectSGIX")) == NULL) || r; + + return r; +} + +#endif /* GLX_SGIX_video_resize */ + +#ifdef GLX_SGIX_visual_select_group + +#endif /* GLX_SGIX_visual_select_group */ + +#ifdef GLX_SGI_cushion + +static GLboolean _glewInit_GLX_SGI_cushion (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXCushionSGI = (PFNGLXCUSHIONSGIPROC)glewGetProcAddress((const GLubyte*)"glXCushionSGI")) == NULL) || r; + + return r; +} + +#endif /* GLX_SGI_cushion */ + +#ifdef GLX_SGI_make_current_read + +static GLboolean _glewInit_GLX_SGI_make_current_read (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXGetCurrentReadDrawableSGI = (PFNGLXGETCURRENTREADDRAWABLESGIPROC)glewGetProcAddress((const GLubyte*)"glXGetCurrentReadDrawableSGI")) == NULL) || r; + r = ((glXMakeCurrentReadSGI = (PFNGLXMAKECURRENTREADSGIPROC)glewGetProcAddress((const GLubyte*)"glXMakeCurrentReadSGI")) == NULL) || r; + + return r; +} + +#endif /* GLX_SGI_make_current_read */ + +#ifdef GLX_SGI_swap_control + +static GLboolean _glewInit_GLX_SGI_swap_control (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXSwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC)glewGetProcAddress((const GLubyte*)"glXSwapIntervalSGI")) == NULL) || r; + + return r; +} + +#endif /* GLX_SGI_swap_control */ + +#ifdef GLX_SGI_video_sync + +static GLboolean _glewInit_GLX_SGI_video_sync (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXGetVideoSyncSGI = (PFNGLXGETVIDEOSYNCSGIPROC)glewGetProcAddress((const GLubyte*)"glXGetVideoSyncSGI")) == NULL) || r; + r = ((glXWaitVideoSyncSGI = (PFNGLXWAITVIDEOSYNCSGIPROC)glewGetProcAddress((const GLubyte*)"glXWaitVideoSyncSGI")) == NULL) || r; + + return r; +} + +#endif /* GLX_SGI_video_sync */ + +#ifdef GLX_SUN_get_transparent_index + +static GLboolean _glewInit_GLX_SUN_get_transparent_index (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXGetTransparentIndexSUN = (PFNGLXGETTRANSPARENTINDEXSUNPROC)glewGetProcAddress((const GLubyte*)"glXGetTransparentIndexSUN")) == NULL) || r; + + return r; +} + +#endif /* GLX_SUN_get_transparent_index */ + +#ifdef GLX_SUN_video_resize + +static GLboolean _glewInit_GLX_SUN_video_resize (GLXEW_CONTEXT_ARG_DEF_INIT) +{ + GLboolean r = GL_FALSE; + + r = ((glXGetVideoResizeSUN = (PFNGLXGETVIDEORESIZESUNPROC)glewGetProcAddress((const GLubyte*)"glXGetVideoResizeSUN")) == NULL) || r; + r = ((glXVideoResizeSUN = (PFNGLXVIDEORESIZESUNPROC)glewGetProcAddress((const GLubyte*)"glXVideoResizeSUN")) == NULL) || r; + + return r; +} + +#endif /* GLX_SUN_video_resize */ + +/* ------------------------------------------------------------------------ */ + +GLboolean glxewGetExtension (const char* name) +{ + GLubyte* p; + GLubyte* end; + GLuint len = _glewStrLen((const GLubyte*)name); +/* if (glXQueryExtensionsString == NULL || glXGetCurrentDisplay == NULL) return GL_FALSE; */ +/* p = (GLubyte*)glXQueryExtensionsString(glXGetCurrentDisplay(), DefaultScreen(glXGetCurrentDisplay())); */ + if (glXGetClientString == NULL || glXGetCurrentDisplay == NULL) return GL_FALSE; + p = (GLubyte*)glXGetClientString(glXGetCurrentDisplay(), GLX_EXTENSIONS); + if (0 == p) return GL_FALSE; + end = p + _glewStrLen(p); + while (p < end) + { + GLuint n = _glewStrCLen(p, ' '); + if (len == n && _glewStrSame((const GLubyte*)name, p, n)) return GL_TRUE; + p += n+1; + } + return GL_FALSE; +} + +GLenum glxewContextInit (GLXEW_CONTEXT_ARG_DEF_LIST) +{ + int major, minor; + /* initialize core GLX 1.2 */ + if (_glewInit_GLX_VERSION_1_2(GLEW_CONTEXT_ARG_VAR_INIT)) return GLEW_ERROR_GLX_VERSION_11_ONLY; + /* initialize flags */ + CONST_CAST(GLXEW_VERSION_1_0) = GL_TRUE; + CONST_CAST(GLXEW_VERSION_1_1) = GL_TRUE; + CONST_CAST(GLXEW_VERSION_1_2) = GL_TRUE; + CONST_CAST(GLXEW_VERSION_1_3) = GL_TRUE; + CONST_CAST(GLXEW_VERSION_1_4) = GL_TRUE; + /* query GLX version */ + glXQueryVersion(glXGetCurrentDisplay(), &major, &minor); + if (major == 1 && minor <= 3) + { + switch (minor) + { + case 3: + CONST_CAST(GLXEW_VERSION_1_4) = GL_FALSE; + break; + case 2: + CONST_CAST(GLXEW_VERSION_1_4) = GL_FALSE; + CONST_CAST(GLXEW_VERSION_1_3) = GL_FALSE; + break; + default: + return GLEW_ERROR_GLX_VERSION_11_ONLY; + break; + } + } + /* initialize extensions */ +#ifdef GLX_VERSION_1_3 + if (glewExperimental || GLXEW_VERSION_1_3) CONST_CAST(GLXEW_VERSION_1_3) = !_glewInit_GLX_VERSION_1_3(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_VERSION_1_3 */ +#ifdef GLX_3DFX_multisample + CONST_CAST(GLXEW_3DFX_multisample) = glxewGetExtension("GLX_3DFX_multisample"); +#endif /* GLX_3DFX_multisample */ +#ifdef GLX_ARB_fbconfig_float + CONST_CAST(GLXEW_ARB_fbconfig_float) = glxewGetExtension("GLX_ARB_fbconfig_float"); +#endif /* GLX_ARB_fbconfig_float */ +#ifdef GLX_ARB_get_proc_address + CONST_CAST(GLXEW_ARB_get_proc_address) = glxewGetExtension("GLX_ARB_get_proc_address"); +#endif /* GLX_ARB_get_proc_address */ +#ifdef GLX_ARB_multisample + CONST_CAST(GLXEW_ARB_multisample) = glxewGetExtension("GLX_ARB_multisample"); +#endif /* GLX_ARB_multisample */ +#ifdef GLX_ATI_pixel_format_float + CONST_CAST(GLXEW_ATI_pixel_format_float) = glxewGetExtension("GLX_ATI_pixel_format_float"); +#endif /* GLX_ATI_pixel_format_float */ +#ifdef GLX_ATI_render_texture + CONST_CAST(GLXEW_ATI_render_texture) = glxewGetExtension("GLX_ATI_render_texture"); + if (glewExperimental || GLXEW_ATI_render_texture) CONST_CAST(GLXEW_ATI_render_texture) = !_glewInit_GLX_ATI_render_texture(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_ATI_render_texture */ +#ifdef GLX_EXT_fbconfig_packed_float + CONST_CAST(GLXEW_EXT_fbconfig_packed_float) = glxewGetExtension("GLX_EXT_fbconfig_packed_float"); +#endif /* GLX_EXT_fbconfig_packed_float */ +#ifdef GLX_EXT_framebuffer_sRGB + CONST_CAST(GLXEW_EXT_framebuffer_sRGB) = glxewGetExtension("GLX_EXT_framebuffer_sRGB"); +#endif /* GLX_EXT_framebuffer_sRGB */ +#ifdef GLX_EXT_import_context + CONST_CAST(GLXEW_EXT_import_context) = glxewGetExtension("GLX_EXT_import_context"); + if (glewExperimental || GLXEW_EXT_import_context) CONST_CAST(GLXEW_EXT_import_context) = !_glewInit_GLX_EXT_import_context(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_EXT_import_context */ +#ifdef GLX_EXT_scene_marker + CONST_CAST(GLXEW_EXT_scene_marker) = glxewGetExtension("GLX_EXT_scene_marker"); +#endif /* GLX_EXT_scene_marker */ +#ifdef GLX_EXT_texture_from_pixmap + CONST_CAST(GLXEW_EXT_texture_from_pixmap) = glxewGetExtension("GLX_EXT_texture_from_pixmap"); + if (glewExperimental || GLXEW_EXT_texture_from_pixmap) CONST_CAST(GLXEW_EXT_texture_from_pixmap) = !_glewInit_GLX_EXT_texture_from_pixmap(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_EXT_texture_from_pixmap */ +#ifdef GLX_EXT_visual_info + CONST_CAST(GLXEW_EXT_visual_info) = glxewGetExtension("GLX_EXT_visual_info"); +#endif /* GLX_EXT_visual_info */ +#ifdef GLX_EXT_visual_rating + CONST_CAST(GLXEW_EXT_visual_rating) = glxewGetExtension("GLX_EXT_visual_rating"); +#endif /* GLX_EXT_visual_rating */ +#ifdef GLX_MESA_agp_offset + CONST_CAST(GLXEW_MESA_agp_offset) = glxewGetExtension("GLX_MESA_agp_offset"); + if (glewExperimental || GLXEW_MESA_agp_offset) CONST_CAST(GLXEW_MESA_agp_offset) = !_glewInit_GLX_MESA_agp_offset(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_MESA_agp_offset */ +#ifdef GLX_MESA_copy_sub_buffer + CONST_CAST(GLXEW_MESA_copy_sub_buffer) = glxewGetExtension("GLX_MESA_copy_sub_buffer"); + if (glewExperimental || GLXEW_MESA_copy_sub_buffer) CONST_CAST(GLXEW_MESA_copy_sub_buffer) = !_glewInit_GLX_MESA_copy_sub_buffer(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_MESA_copy_sub_buffer */ +#ifdef GLX_MESA_pixmap_colormap + CONST_CAST(GLXEW_MESA_pixmap_colormap) = glxewGetExtension("GLX_MESA_pixmap_colormap"); + if (glewExperimental || GLXEW_MESA_pixmap_colormap) CONST_CAST(GLXEW_MESA_pixmap_colormap) = !_glewInit_GLX_MESA_pixmap_colormap(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_MESA_pixmap_colormap */ +#ifdef GLX_MESA_release_buffers + CONST_CAST(GLXEW_MESA_release_buffers) = glxewGetExtension("GLX_MESA_release_buffers"); + if (glewExperimental || GLXEW_MESA_release_buffers) CONST_CAST(GLXEW_MESA_release_buffers) = !_glewInit_GLX_MESA_release_buffers(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_MESA_release_buffers */ +#ifdef GLX_MESA_set_3dfx_mode + CONST_CAST(GLXEW_MESA_set_3dfx_mode) = glxewGetExtension("GLX_MESA_set_3dfx_mode"); + if (glewExperimental || GLXEW_MESA_set_3dfx_mode) CONST_CAST(GLXEW_MESA_set_3dfx_mode) = !_glewInit_GLX_MESA_set_3dfx_mode(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_MESA_set_3dfx_mode */ +#ifdef GLX_NV_float_buffer + CONST_CAST(GLXEW_NV_float_buffer) = glxewGetExtension("GLX_NV_float_buffer"); +#endif /* GLX_NV_float_buffer */ +#ifdef GLX_NV_vertex_array_range + CONST_CAST(GLXEW_NV_vertex_array_range) = glxewGetExtension("GLX_NV_vertex_array_range"); + if (glewExperimental || GLXEW_NV_vertex_array_range) CONST_CAST(GLXEW_NV_vertex_array_range) = !_glewInit_GLX_NV_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_NV_vertex_array_range */ +#ifdef GLX_OML_swap_method + CONST_CAST(GLXEW_OML_swap_method) = glxewGetExtension("GLX_OML_swap_method"); +#endif /* GLX_OML_swap_method */ +#if defined(GLX_OML_sync_control) && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +#include + CONST_CAST(GLXEW_OML_sync_control) = glxewGetExtension("GLX_OML_sync_control"); + if (glewExperimental || GLXEW_OML_sync_control) CONST_CAST(GLXEW_OML_sync_control) = !_glewInit_GLX_OML_sync_control(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_OML_sync_control */ +#ifdef GLX_SGIS_blended_overlay + CONST_CAST(GLXEW_SGIS_blended_overlay) = glxewGetExtension("GLX_SGIS_blended_overlay"); +#endif /* GLX_SGIS_blended_overlay */ +#ifdef GLX_SGIS_color_range + CONST_CAST(GLXEW_SGIS_color_range) = glxewGetExtension("GLX_SGIS_color_range"); +#endif /* GLX_SGIS_color_range */ +#ifdef GLX_SGIS_multisample + CONST_CAST(GLXEW_SGIS_multisample) = glxewGetExtension("GLX_SGIS_multisample"); +#endif /* GLX_SGIS_multisample */ +#ifdef GLX_SGIS_shared_multisample + CONST_CAST(GLXEW_SGIS_shared_multisample) = glxewGetExtension("GLX_SGIS_shared_multisample"); +#endif /* GLX_SGIS_shared_multisample */ +#ifdef GLX_SGIX_fbconfig + CONST_CAST(GLXEW_SGIX_fbconfig) = glxewGetExtension("GLX_SGIX_fbconfig"); + if (glewExperimental || GLXEW_SGIX_fbconfig) CONST_CAST(GLXEW_SGIX_fbconfig) = !_glewInit_GLX_SGIX_fbconfig(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SGIX_fbconfig */ +#ifdef GLX_SGIX_hyperpipe + CONST_CAST(GLXEW_SGIX_hyperpipe) = glxewGetExtension("GLX_SGIX_hyperpipe"); + if (glewExperimental || GLXEW_SGIX_hyperpipe) CONST_CAST(GLXEW_SGIX_hyperpipe) = !_glewInit_GLX_SGIX_hyperpipe(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SGIX_hyperpipe */ +#ifdef GLX_SGIX_pbuffer + CONST_CAST(GLXEW_SGIX_pbuffer) = glxewGetExtension("GLX_SGIX_pbuffer"); + if (glewExperimental || GLXEW_SGIX_pbuffer) CONST_CAST(GLXEW_SGIX_pbuffer) = !_glewInit_GLX_SGIX_pbuffer(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SGIX_pbuffer */ +#ifdef GLX_SGIX_swap_barrier + CONST_CAST(GLXEW_SGIX_swap_barrier) = glxewGetExtension("GLX_SGIX_swap_barrier"); + if (glewExperimental || GLXEW_SGIX_swap_barrier) CONST_CAST(GLXEW_SGIX_swap_barrier) = !_glewInit_GLX_SGIX_swap_barrier(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SGIX_swap_barrier */ +#ifdef GLX_SGIX_swap_group + CONST_CAST(GLXEW_SGIX_swap_group) = glxewGetExtension("GLX_SGIX_swap_group"); + if (glewExperimental || GLXEW_SGIX_swap_group) CONST_CAST(GLXEW_SGIX_swap_group) = !_glewInit_GLX_SGIX_swap_group(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SGIX_swap_group */ +#ifdef GLX_SGIX_video_resize + CONST_CAST(GLXEW_SGIX_video_resize) = glxewGetExtension("GLX_SGIX_video_resize"); + if (glewExperimental || GLXEW_SGIX_video_resize) CONST_CAST(GLXEW_SGIX_video_resize) = !_glewInit_GLX_SGIX_video_resize(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SGIX_video_resize */ +#ifdef GLX_SGIX_visual_select_group + CONST_CAST(GLXEW_SGIX_visual_select_group) = glxewGetExtension("GLX_SGIX_visual_select_group"); +#endif /* GLX_SGIX_visual_select_group */ +#ifdef GLX_SGI_cushion + CONST_CAST(GLXEW_SGI_cushion) = glxewGetExtension("GLX_SGI_cushion"); + if (glewExperimental || GLXEW_SGI_cushion) CONST_CAST(GLXEW_SGI_cushion) = !_glewInit_GLX_SGI_cushion(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SGI_cushion */ +#ifdef GLX_SGI_make_current_read + CONST_CAST(GLXEW_SGI_make_current_read) = glxewGetExtension("GLX_SGI_make_current_read"); + if (glewExperimental || GLXEW_SGI_make_current_read) CONST_CAST(GLXEW_SGI_make_current_read) = !_glewInit_GLX_SGI_make_current_read(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SGI_make_current_read */ +#ifdef GLX_SGI_swap_control + CONST_CAST(GLXEW_SGI_swap_control) = glxewGetExtension("GLX_SGI_swap_control"); + if (glewExperimental || GLXEW_SGI_swap_control) CONST_CAST(GLXEW_SGI_swap_control) = !_glewInit_GLX_SGI_swap_control(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SGI_swap_control */ +#ifdef GLX_SGI_video_sync + CONST_CAST(GLXEW_SGI_video_sync) = glxewGetExtension("GLX_SGI_video_sync"); + if (glewExperimental || GLXEW_SGI_video_sync) CONST_CAST(GLXEW_SGI_video_sync) = !_glewInit_GLX_SGI_video_sync(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SGI_video_sync */ +#ifdef GLX_SUN_get_transparent_index + CONST_CAST(GLXEW_SUN_get_transparent_index) = glxewGetExtension("GLX_SUN_get_transparent_index"); + if (glewExperimental || GLXEW_SUN_get_transparent_index) CONST_CAST(GLXEW_SUN_get_transparent_index) = !_glewInit_GLX_SUN_get_transparent_index(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SUN_get_transparent_index */ +#ifdef GLX_SUN_video_resize + CONST_CAST(GLXEW_SUN_video_resize) = glxewGetExtension("GLX_SUN_video_resize"); + if (glewExperimental || GLXEW_SUN_video_resize) CONST_CAST(GLXEW_SUN_video_resize) = !_glewInit_GLX_SUN_video_resize(GLEW_CONTEXT_ARG_VAR_INIT); +#endif /* GLX_SUN_video_resize */ + + return GLEW_OK; +} + +#endif /* !__APPLE__ || GLEW_APPLE_GLX */ + +/* ------------------------------------------------------------------------ */ + +const GLubyte* glewGetErrorString (GLenum error) +{ + static const GLubyte* _glewErrorString[] = + { + (const GLubyte*)"No error", + (const GLubyte*)"Missing GL version", + (const GLubyte*)"GL 1.1 and up are not supported", + (const GLubyte*)"GLX 1.2 and up are not supported", + (const GLubyte*)"Unknown error" + }; + const int max_error = sizeof(_glewErrorString)/sizeof(*_glewErrorString) - 1; + return _glewErrorString[(int)error > max_error ? max_error : (int)error]; +} + +const GLubyte* glewGetString (GLenum name) +{ + static const GLubyte* _glewString[] = + { + (const GLubyte*)NULL, + (const GLubyte*)"1.5.0", + (const GLubyte*)"1", + (const GLubyte*)"5", + (const GLubyte*)"0" + }; + const int max_string = sizeof(_glewString)/sizeof(*_glewString) - 1; + return _glewString[(int)name > max_string ? 0 : (int)name]; +} + +/* ------------------------------------------------------------------------ */ + +GLboolean glewExperimental = GL_FALSE; + +#if !defined(GLEW_MX) + +#if defined(_WIN32) +extern GLenum wglewContextInit (void); +#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) /* _UNIX */ +extern GLenum glxewContextInit (void); +#endif /* _WIN32 */ + +GLenum glewInit () +{ + GLenum r; + if ( (r = glewContextInit()) ) return r; +#if defined(_WIN32) + return wglewContextInit(); +#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) /* _UNIX */ + return glxewContextInit(); +#else + return r; +#endif /* _WIN32 */ +} + +#endif /* !GLEW_MX */ +#ifdef GLEW_MX +GLboolean glewContextIsSupported (GLEWContext* ctx, const char* name) +#else +GLboolean glewIsSupported (const char* name) +#endif +{ + GLubyte* pos = (GLubyte*)name; + GLuint len = _glewStrLen(pos); + GLboolean ret = GL_TRUE; + while (ret && len > 0) + { + if (_glewStrSame1(&pos, &len, (const GLubyte*)"GL_", 3)) + { + if (_glewStrSame2(&pos, &len, (const GLubyte*)"VERSION_", 8)) + { +#ifdef GL_VERSION_1_2 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_2", 3)) + { + ret = GLEW_VERSION_1_2; + continue; + } +#endif +#ifdef GL_VERSION_1_3 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_3", 3)) + { + ret = GLEW_VERSION_1_3; + continue; + } +#endif +#ifdef GL_VERSION_1_4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_4", 3)) + { + ret = GLEW_VERSION_1_4; + continue; + } +#endif +#ifdef GL_VERSION_1_5 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_5", 3)) + { + ret = GLEW_VERSION_1_5; + continue; + } +#endif +#ifdef GL_VERSION_2_0 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"2_0", 3)) + { + ret = GLEW_VERSION_2_0; + continue; + } +#endif +#ifdef GL_VERSION_2_1 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"2_1", 3)) + { + ret = GLEW_VERSION_2_1; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DFX_", 5)) + { +#ifdef GL_3DFX_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) + { + ret = GLEW_3DFX_multisample; + continue; + } +#endif +#ifdef GL_3DFX_tbuffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"tbuffer", 7)) + { + ret = GLEW_3DFX_tbuffer; + continue; + } +#endif +#ifdef GL_3DFX_texture_compression_FXT1 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_FXT1", 24)) + { + ret = GLEW_3DFX_texture_compression_FXT1; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"APPLE_", 6)) + { +#ifdef GL_APPLE_client_storage + if (_glewStrSame3(&pos, &len, (const GLubyte*)"client_storage", 14)) + { + ret = GLEW_APPLE_client_storage; + continue; + } +#endif +#ifdef GL_APPLE_element_array + if (_glewStrSame3(&pos, &len, (const GLubyte*)"element_array", 13)) + { + ret = GLEW_APPLE_element_array; + continue; + } +#endif +#ifdef GL_APPLE_fence + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fence", 5)) + { + ret = GLEW_APPLE_fence; + continue; + } +#endif +#ifdef GL_APPLE_float_pixels + if (_glewStrSame3(&pos, &len, (const GLubyte*)"float_pixels", 12)) + { + ret = GLEW_APPLE_float_pixels; + continue; + } +#endif +#ifdef GL_APPLE_flush_buffer_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"flush_buffer_range", 18)) + { + ret = GLEW_APPLE_flush_buffer_range; + continue; + } +#endif +#ifdef GL_APPLE_pixel_buffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_buffer", 12)) + { + ret = GLEW_APPLE_pixel_buffer; + continue; + } +#endif +#ifdef GL_APPLE_specular_vector + if (_glewStrSame3(&pos, &len, (const GLubyte*)"specular_vector", 15)) + { + ret = GLEW_APPLE_specular_vector; + continue; + } +#endif +#ifdef GL_APPLE_texture_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_range", 13)) + { + ret = GLEW_APPLE_texture_range; + continue; + } +#endif +#ifdef GL_APPLE_transform_hint + if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_hint", 14)) + { + ret = GLEW_APPLE_transform_hint; + continue; + } +#endif +#ifdef GL_APPLE_vertex_array_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_object", 19)) + { + ret = GLEW_APPLE_vertex_array_object; + continue; + } +#endif +#ifdef GL_APPLE_vertex_array_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range", 18)) + { + ret = GLEW_APPLE_vertex_array_range; + continue; + } +#endif +#ifdef GL_APPLE_ycbcr_422 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"ycbcr_422", 9)) + { + ret = GLEW_APPLE_ycbcr_422; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"ARB_", 4)) + { +#ifdef GL_ARB_color_buffer_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_buffer_float", 18)) + { + ret = GLEW_ARB_color_buffer_float; + continue; + } +#endif +#ifdef GL_ARB_depth_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_texture", 13)) + { + ret = GLEW_ARB_depth_texture; + continue; + } +#endif +#ifdef GL_ARB_draw_buffers + if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers", 12)) + { + ret = GLEW_ARB_draw_buffers; + continue; + } +#endif +#ifdef GL_ARB_fragment_program + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program", 16)) + { + ret = GLEW_ARB_fragment_program; + continue; + } +#endif +#ifdef GL_ARB_fragment_program_shadow + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program_shadow", 23)) + { + ret = GLEW_ARB_fragment_program_shadow; + continue; + } +#endif +#ifdef GL_ARB_fragment_shader + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_shader", 15)) + { + ret = GLEW_ARB_fragment_shader; + continue; + } +#endif +#ifdef GL_ARB_half_float_pixel + if (_glewStrSame3(&pos, &len, (const GLubyte*)"half_float_pixel", 16)) + { + ret = GLEW_ARB_half_float_pixel; + continue; + } +#endif +#ifdef GL_ARB_imaging + if (_glewStrSame3(&pos, &len, (const GLubyte*)"imaging", 7)) + { + ret = GLEW_ARB_imaging; + continue; + } +#endif +#ifdef GL_ARB_matrix_palette + if (_glewStrSame3(&pos, &len, (const GLubyte*)"matrix_palette", 14)) + { + ret = GLEW_ARB_matrix_palette; + continue; + } +#endif +#ifdef GL_ARB_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) + { + ret = GLEW_ARB_multisample; + continue; + } +#endif +#ifdef GL_ARB_multitexture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multitexture", 12)) + { + ret = GLEW_ARB_multitexture; + continue; + } +#endif +#ifdef GL_ARB_occlusion_query + if (_glewStrSame3(&pos, &len, (const GLubyte*)"occlusion_query", 15)) + { + ret = GLEW_ARB_occlusion_query; + continue; + } +#endif +#ifdef GL_ARB_pixel_buffer_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_buffer_object", 19)) + { + ret = GLEW_ARB_pixel_buffer_object; + continue; + } +#endif +#ifdef GL_ARB_point_parameters + if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_parameters", 16)) + { + ret = GLEW_ARB_point_parameters; + continue; + } +#endif +#ifdef GL_ARB_point_sprite + if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_sprite", 12)) + { + ret = GLEW_ARB_point_sprite; + continue; + } +#endif +#ifdef GL_ARB_shader_objects + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_objects", 14)) + { + ret = GLEW_ARB_shader_objects; + continue; + } +#endif +#ifdef GL_ARB_shading_language_100 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shading_language_100", 20)) + { + ret = GLEW_ARB_shading_language_100; + continue; + } +#endif +#ifdef GL_ARB_shadow + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow", 6)) + { + ret = GLEW_ARB_shadow; + continue; + } +#endif +#ifdef GL_ARB_shadow_ambient + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow_ambient", 14)) + { + ret = GLEW_ARB_shadow_ambient; + continue; + } +#endif +#ifdef GL_ARB_texture_border_clamp + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_border_clamp", 20)) + { + ret = GLEW_ARB_texture_border_clamp; + continue; + } +#endif +#ifdef GL_ARB_texture_compression + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression", 19)) + { + ret = GLEW_ARB_texture_compression; + continue; + } +#endif +#ifdef GL_ARB_texture_cube_map + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_cube_map", 16)) + { + ret = GLEW_ARB_texture_cube_map; + continue; + } +#endif +#ifdef GL_ARB_texture_env_add + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_add", 15)) + { + ret = GLEW_ARB_texture_env_add; + continue; + } +#endif +#ifdef GL_ARB_texture_env_combine + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine", 19)) + { + ret = GLEW_ARB_texture_env_combine; + continue; + } +#endif +#ifdef GL_ARB_texture_env_crossbar + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_crossbar", 20)) + { + ret = GLEW_ARB_texture_env_crossbar; + continue; + } +#endif +#ifdef GL_ARB_texture_env_dot3 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_dot3", 16)) + { + ret = GLEW_ARB_texture_env_dot3; + continue; + } +#endif +#ifdef GL_ARB_texture_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_float", 13)) + { + ret = GLEW_ARB_texture_float; + continue; + } +#endif +#ifdef GL_ARB_texture_mirrored_repeat + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirrored_repeat", 23)) + { + ret = GLEW_ARB_texture_mirrored_repeat; + continue; + } +#endif +#ifdef GL_ARB_texture_non_power_of_two + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_non_power_of_two", 24)) + { + ret = GLEW_ARB_texture_non_power_of_two; + continue; + } +#endif +#ifdef GL_ARB_texture_rectangle + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rectangle", 17)) + { + ret = GLEW_ARB_texture_rectangle; + continue; + } +#endif +#ifdef GL_ARB_transpose_matrix + if (_glewStrSame3(&pos, &len, (const GLubyte*)"transpose_matrix", 16)) + { + ret = GLEW_ARB_transpose_matrix; + continue; + } +#endif +#ifdef GL_ARB_vertex_blend + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_blend", 12)) + { + ret = GLEW_ARB_vertex_blend; + continue; + } +#endif +#ifdef GL_ARB_vertex_buffer_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_buffer_object", 20)) + { + ret = GLEW_ARB_vertex_buffer_object; + continue; + } +#endif +#ifdef GL_ARB_vertex_program + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program", 14)) + { + ret = GLEW_ARB_vertex_program; + continue; + } +#endif +#ifdef GL_ARB_vertex_shader + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader", 13)) + { + ret = GLEW_ARB_vertex_shader; + continue; + } +#endif +#ifdef GL_ARB_window_pos + if (_glewStrSame3(&pos, &len, (const GLubyte*)"window_pos", 10)) + { + ret = GLEW_ARB_window_pos; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATIX_", 5)) + { +#ifdef GL_ATIX_point_sprites + if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_sprites", 13)) + { + ret = GLEW_ATIX_point_sprites; + continue; + } +#endif +#ifdef GL_ATIX_texture_env_combine3 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine3", 20)) + { + ret = GLEW_ATIX_texture_env_combine3; + continue; + } +#endif +#ifdef GL_ATIX_texture_env_route + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_route", 17)) + { + ret = GLEW_ATIX_texture_env_route; + continue; + } +#endif +#ifdef GL_ATIX_vertex_shader_output_point_size + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader_output_point_size", 31)) + { + ret = GLEW_ATIX_vertex_shader_output_point_size; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATI_", 4)) + { +#ifdef GL_ATI_draw_buffers + if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers", 12)) + { + ret = GLEW_ATI_draw_buffers; + continue; + } +#endif +#ifdef GL_ATI_element_array + if (_glewStrSame3(&pos, &len, (const GLubyte*)"element_array", 13)) + { + ret = GLEW_ATI_element_array; + continue; + } +#endif +#ifdef GL_ATI_envmap_bumpmap + if (_glewStrSame3(&pos, &len, (const GLubyte*)"envmap_bumpmap", 14)) + { + ret = GLEW_ATI_envmap_bumpmap; + continue; + } +#endif +#ifdef GL_ATI_fragment_shader + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_shader", 15)) + { + ret = GLEW_ATI_fragment_shader; + continue; + } +#endif +#ifdef GL_ATI_map_object_buffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"map_object_buffer", 17)) + { + ret = GLEW_ATI_map_object_buffer; + continue; + } +#endif +#ifdef GL_ATI_pn_triangles + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pn_triangles", 12)) + { + ret = GLEW_ATI_pn_triangles; + continue; + } +#endif +#ifdef GL_ATI_separate_stencil + if (_glewStrSame3(&pos, &len, (const GLubyte*)"separate_stencil", 16)) + { + ret = GLEW_ATI_separate_stencil; + continue; + } +#endif +#ifdef GL_ATI_shader_texture_lod + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_texture_lod", 18)) + { + ret = GLEW_ATI_shader_texture_lod; + continue; + } +#endif +#ifdef GL_ATI_text_fragment_shader + if (_glewStrSame3(&pos, &len, (const GLubyte*)"text_fragment_shader", 20)) + { + ret = GLEW_ATI_text_fragment_shader; + continue; + } +#endif +#ifdef GL_ATI_texture_compression_3dc + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_3dc", 23)) + { + ret = GLEW_ATI_texture_compression_3dc; + continue; + } +#endif +#ifdef GL_ATI_texture_env_combine3 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine3", 20)) + { + ret = GLEW_ATI_texture_env_combine3; + continue; + } +#endif +#ifdef GL_ATI_texture_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_float", 13)) + { + ret = GLEW_ATI_texture_float; + continue; + } +#endif +#ifdef GL_ATI_texture_mirror_once + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirror_once", 19)) + { + ret = GLEW_ATI_texture_mirror_once; + continue; + } +#endif +#ifdef GL_ATI_vertex_array_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_object", 19)) + { + ret = GLEW_ATI_vertex_array_object; + continue; + } +#endif +#ifdef GL_ATI_vertex_attrib_array_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_attrib_array_object", 26)) + { + ret = GLEW_ATI_vertex_attrib_array_object; + continue; + } +#endif +#ifdef GL_ATI_vertex_streams + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_streams", 14)) + { + ret = GLEW_ATI_vertex_streams; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"EXT_", 4)) + { +#ifdef GL_EXT_422_pixels + if (_glewStrSame3(&pos, &len, (const GLubyte*)"422_pixels", 10)) + { + ret = GLEW_EXT_422_pixels; + continue; + } +#endif +#ifdef GL_EXT_Cg_shader + if (_glewStrSame3(&pos, &len, (const GLubyte*)"Cg_shader", 9)) + { + ret = GLEW_EXT_Cg_shader; + continue; + } +#endif +#ifdef GL_EXT_abgr + if (_glewStrSame3(&pos, &len, (const GLubyte*)"abgr", 4)) + { + ret = GLEW_EXT_abgr; + continue; + } +#endif +#ifdef GL_EXT_bgra + if (_glewStrSame3(&pos, &len, (const GLubyte*)"bgra", 4)) + { + ret = GLEW_EXT_bgra; + continue; + } +#endif +#ifdef GL_EXT_bindable_uniform + if (_glewStrSame3(&pos, &len, (const GLubyte*)"bindable_uniform", 16)) + { + ret = GLEW_EXT_bindable_uniform; + continue; + } +#endif +#ifdef GL_EXT_blend_color + if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_color", 11)) + { + ret = GLEW_EXT_blend_color; + continue; + } +#endif +#ifdef GL_EXT_blend_equation_separate + if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_equation_separate", 23)) + { + ret = GLEW_EXT_blend_equation_separate; + continue; + } +#endif +#ifdef GL_EXT_blend_func_separate + if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_func_separate", 19)) + { + ret = GLEW_EXT_blend_func_separate; + continue; + } +#endif +#ifdef GL_EXT_blend_logic_op + if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_logic_op", 14)) + { + ret = GLEW_EXT_blend_logic_op; + continue; + } +#endif +#ifdef GL_EXT_blend_minmax + if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_minmax", 12)) + { + ret = GLEW_EXT_blend_minmax; + continue; + } +#endif +#ifdef GL_EXT_blend_subtract + if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_subtract", 14)) + { + ret = GLEW_EXT_blend_subtract; + continue; + } +#endif +#ifdef GL_EXT_clip_volume_hint + if (_glewStrSame3(&pos, &len, (const GLubyte*)"clip_volume_hint", 16)) + { + ret = GLEW_EXT_clip_volume_hint; + continue; + } +#endif +#ifdef GL_EXT_cmyka + if (_glewStrSame3(&pos, &len, (const GLubyte*)"cmyka", 5)) + { + ret = GLEW_EXT_cmyka; + continue; + } +#endif +#ifdef GL_EXT_color_subtable + if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_subtable", 14)) + { + ret = GLEW_EXT_color_subtable; + continue; + } +#endif +#ifdef GL_EXT_compiled_vertex_array + if (_glewStrSame3(&pos, &len, (const GLubyte*)"compiled_vertex_array", 21)) + { + ret = GLEW_EXT_compiled_vertex_array; + continue; + } +#endif +#ifdef GL_EXT_convolution + if (_glewStrSame3(&pos, &len, (const GLubyte*)"convolution", 11)) + { + ret = GLEW_EXT_convolution; + continue; + } +#endif +#ifdef GL_EXT_coordinate_frame + if (_glewStrSame3(&pos, &len, (const GLubyte*)"coordinate_frame", 16)) + { + ret = GLEW_EXT_coordinate_frame; + continue; + } +#endif +#ifdef GL_EXT_copy_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_texture", 12)) + { + ret = GLEW_EXT_copy_texture; + continue; + } +#endif +#ifdef GL_EXT_cull_vertex + if (_glewStrSame3(&pos, &len, (const GLubyte*)"cull_vertex", 11)) + { + ret = GLEW_EXT_cull_vertex; + continue; + } +#endif +#ifdef GL_EXT_depth_bounds_test + if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_bounds_test", 17)) + { + ret = GLEW_EXT_depth_bounds_test; + continue; + } +#endif +#ifdef GL_EXT_draw_buffers2 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers2", 13)) + { + ret = GLEW_EXT_draw_buffers2; + continue; + } +#endif +#ifdef GL_EXT_draw_instanced + if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_instanced", 14)) + { + ret = GLEW_EXT_draw_instanced; + continue; + } +#endif +#ifdef GL_EXT_draw_range_elements + if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_range_elements", 19)) + { + ret = GLEW_EXT_draw_range_elements; + continue; + } +#endif +#ifdef GL_EXT_fog_coord + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_coord", 9)) + { + ret = GLEW_EXT_fog_coord; + continue; + } +#endif +#ifdef GL_EXT_fragment_lighting + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_lighting", 17)) + { + ret = GLEW_EXT_fragment_lighting; + continue; + } +#endif +#ifdef GL_EXT_framebuffer_blit + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_blit", 16)) + { + ret = GLEW_EXT_framebuffer_blit; + continue; + } +#endif +#ifdef GL_EXT_framebuffer_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_multisample", 23)) + { + ret = GLEW_EXT_framebuffer_multisample; + continue; + } +#endif +#ifdef GL_EXT_framebuffer_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_object", 18)) + { + ret = GLEW_EXT_framebuffer_object; + continue; + } +#endif +#ifdef GL_EXT_framebuffer_sRGB + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) + { + ret = GLEW_EXT_framebuffer_sRGB; + continue; + } +#endif +#ifdef GL_EXT_geometry_shader4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"geometry_shader4", 16)) + { + ret = GLEW_EXT_geometry_shader4; + continue; + } +#endif +#ifdef GL_EXT_gpu_program_parameters + if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program_parameters", 22)) + { + ret = GLEW_EXT_gpu_program_parameters; + continue; + } +#endif +#ifdef GL_EXT_gpu_shader4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_shader4", 11)) + { + ret = GLEW_EXT_gpu_shader4; + continue; + } +#endif +#ifdef GL_EXT_histogram + if (_glewStrSame3(&pos, &len, (const GLubyte*)"histogram", 9)) + { + ret = GLEW_EXT_histogram; + continue; + } +#endif +#ifdef GL_EXT_index_array_formats + if (_glewStrSame3(&pos, &len, (const GLubyte*)"index_array_formats", 19)) + { + ret = GLEW_EXT_index_array_formats; + continue; + } +#endif +#ifdef GL_EXT_index_func + if (_glewStrSame3(&pos, &len, (const GLubyte*)"index_func", 10)) + { + ret = GLEW_EXT_index_func; + continue; + } +#endif +#ifdef GL_EXT_index_material + if (_glewStrSame3(&pos, &len, (const GLubyte*)"index_material", 14)) + { + ret = GLEW_EXT_index_material; + continue; + } +#endif +#ifdef GL_EXT_index_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"index_texture", 13)) + { + ret = GLEW_EXT_index_texture; + continue; + } +#endif +#ifdef GL_EXT_light_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"light_texture", 13)) + { + ret = GLEW_EXT_light_texture; + continue; + } +#endif +#ifdef GL_EXT_misc_attribute + if (_glewStrSame3(&pos, &len, (const GLubyte*)"misc_attribute", 14)) + { + ret = GLEW_EXT_misc_attribute; + continue; + } +#endif +#ifdef GL_EXT_multi_draw_arrays + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multi_draw_arrays", 17)) + { + ret = GLEW_EXT_multi_draw_arrays; + continue; + } +#endif +#ifdef GL_EXT_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) + { + ret = GLEW_EXT_multisample; + continue; + } +#endif +#ifdef GL_EXT_packed_depth_stencil + if (_glewStrSame3(&pos, &len, (const GLubyte*)"packed_depth_stencil", 20)) + { + ret = GLEW_EXT_packed_depth_stencil; + continue; + } +#endif +#ifdef GL_EXT_packed_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"packed_float", 12)) + { + ret = GLEW_EXT_packed_float; + continue; + } +#endif +#ifdef GL_EXT_packed_pixels + if (_glewStrSame3(&pos, &len, (const GLubyte*)"packed_pixels", 13)) + { + ret = GLEW_EXT_packed_pixels; + continue; + } +#endif +#ifdef GL_EXT_paletted_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"paletted_texture", 16)) + { + ret = GLEW_EXT_paletted_texture; + continue; + } +#endif +#ifdef GL_EXT_pixel_buffer_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_buffer_object", 19)) + { + ret = GLEW_EXT_pixel_buffer_object; + continue; + } +#endif +#ifdef GL_EXT_pixel_transform + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_transform", 15)) + { + ret = GLEW_EXT_pixel_transform; + continue; + } +#endif +#ifdef GL_EXT_pixel_transform_color_table + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_transform_color_table", 27)) + { + ret = GLEW_EXT_pixel_transform_color_table; + continue; + } +#endif +#ifdef GL_EXT_point_parameters + if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_parameters", 16)) + { + ret = GLEW_EXT_point_parameters; + continue; + } +#endif +#ifdef GL_EXT_polygon_offset + if (_glewStrSame3(&pos, &len, (const GLubyte*)"polygon_offset", 14)) + { + ret = GLEW_EXT_polygon_offset; + continue; + } +#endif +#ifdef GL_EXT_rescale_normal + if (_glewStrSame3(&pos, &len, (const GLubyte*)"rescale_normal", 14)) + { + ret = GLEW_EXT_rescale_normal; + continue; + } +#endif +#ifdef GL_EXT_scene_marker + if (_glewStrSame3(&pos, &len, (const GLubyte*)"scene_marker", 12)) + { + ret = GLEW_EXT_scene_marker; + continue; + } +#endif +#ifdef GL_EXT_secondary_color + if (_glewStrSame3(&pos, &len, (const GLubyte*)"secondary_color", 15)) + { + ret = GLEW_EXT_secondary_color; + continue; + } +#endif +#ifdef GL_EXT_separate_specular_color + if (_glewStrSame3(&pos, &len, (const GLubyte*)"separate_specular_color", 23)) + { + ret = GLEW_EXT_separate_specular_color; + continue; + } +#endif +#ifdef GL_EXT_shadow_funcs + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow_funcs", 12)) + { + ret = GLEW_EXT_shadow_funcs; + continue; + } +#endif +#ifdef GL_EXT_shared_texture_palette + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shared_texture_palette", 22)) + { + ret = GLEW_EXT_shared_texture_palette; + continue; + } +#endif +#ifdef GL_EXT_stencil_clear_tag + if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_clear_tag", 17)) + { + ret = GLEW_EXT_stencil_clear_tag; + continue; + } +#endif +#ifdef GL_EXT_stencil_two_side + if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_two_side", 16)) + { + ret = GLEW_EXT_stencil_two_side; + continue; + } +#endif +#ifdef GL_EXT_stencil_wrap + if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_wrap", 12)) + { + ret = GLEW_EXT_stencil_wrap; + continue; + } +#endif +#ifdef GL_EXT_subtexture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"subtexture", 10)) + { + ret = GLEW_EXT_subtexture; + continue; + } +#endif +#ifdef GL_EXT_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture", 7)) + { + ret = GLEW_EXT_texture; + continue; + } +#endif +#ifdef GL_EXT_texture3D + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture3D", 9)) + { + ret = GLEW_EXT_texture3D; + continue; + } +#endif +#ifdef GL_EXT_texture_array + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_array", 13)) + { + ret = GLEW_EXT_texture_array; + continue; + } +#endif +#ifdef GL_EXT_texture_buffer_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_buffer_object", 21)) + { + ret = GLEW_EXT_texture_buffer_object; + continue; + } +#endif +#ifdef GL_EXT_texture_compression_dxt1 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_dxt1", 24)) + { + ret = GLEW_EXT_texture_compression_dxt1; + continue; + } +#endif +#ifdef GL_EXT_texture_compression_latc + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_latc", 24)) + { + ret = GLEW_EXT_texture_compression_latc; + continue; + } +#endif +#ifdef GL_EXT_texture_compression_rgtc + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_rgtc", 24)) + { + ret = GLEW_EXT_texture_compression_rgtc; + continue; + } +#endif +#ifdef GL_EXT_texture_compression_s3tc + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_s3tc", 24)) + { + ret = GLEW_EXT_texture_compression_s3tc; + continue; + } +#endif +#ifdef GL_EXT_texture_cube_map + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_cube_map", 16)) + { + ret = GLEW_EXT_texture_cube_map; + continue; + } +#endif +#ifdef GL_EXT_texture_edge_clamp + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_edge_clamp", 18)) + { + ret = GLEW_EXT_texture_edge_clamp; + continue; + } +#endif +#ifdef GL_EXT_texture_env + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env", 11)) + { + ret = GLEW_EXT_texture_env; + continue; + } +#endif +#ifdef GL_EXT_texture_env_add + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_add", 15)) + { + ret = GLEW_EXT_texture_env_add; + continue; + } +#endif +#ifdef GL_EXT_texture_env_combine + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine", 19)) + { + ret = GLEW_EXT_texture_env_combine; + continue; + } +#endif +#ifdef GL_EXT_texture_env_dot3 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_dot3", 16)) + { + ret = GLEW_EXT_texture_env_dot3; + continue; + } +#endif +#ifdef GL_EXT_texture_filter_anisotropic + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_filter_anisotropic", 26)) + { + ret = GLEW_EXT_texture_filter_anisotropic; + continue; + } +#endif +#ifdef GL_EXT_texture_integer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_integer", 15)) + { + ret = GLEW_EXT_texture_integer; + continue; + } +#endif +#ifdef GL_EXT_texture_lod_bias + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_lod_bias", 16)) + { + ret = GLEW_EXT_texture_lod_bias; + continue; + } +#endif +#ifdef GL_EXT_texture_mirror_clamp + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirror_clamp", 20)) + { + ret = GLEW_EXT_texture_mirror_clamp; + continue; + } +#endif +#ifdef GL_EXT_texture_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_object", 14)) + { + ret = GLEW_EXT_texture_object; + continue; + } +#endif +#ifdef GL_EXT_texture_perturb_normal + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_perturb_normal", 22)) + { + ret = GLEW_EXT_texture_perturb_normal; + continue; + } +#endif +#ifdef GL_EXT_texture_rectangle + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rectangle", 17)) + { + ret = GLEW_EXT_texture_rectangle; + continue; + } +#endif +#ifdef GL_EXT_texture_sRGB + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_sRGB", 12)) + { + ret = GLEW_EXT_texture_sRGB; + continue; + } +#endif +#ifdef GL_EXT_texture_shared_exponent + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_shared_exponent", 23)) + { + ret = GLEW_EXT_texture_shared_exponent; + continue; + } +#endif +#ifdef GL_EXT_timer_query + if (_glewStrSame3(&pos, &len, (const GLubyte*)"timer_query", 11)) + { + ret = GLEW_EXT_timer_query; + continue; + } +#endif +#ifdef GL_EXT_vertex_array + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array", 12)) + { + ret = GLEW_EXT_vertex_array; + continue; + } +#endif +#ifdef GL_EXT_vertex_shader + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader", 13)) + { + ret = GLEW_EXT_vertex_shader; + continue; + } +#endif +#ifdef GL_EXT_vertex_weighting + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_weighting", 16)) + { + ret = GLEW_EXT_vertex_weighting; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"GREMEDY_", 8)) + { +#ifdef GL_GREMEDY_frame_terminator + if (_glewStrSame3(&pos, &len, (const GLubyte*)"frame_terminator", 16)) + { + ret = GLEW_GREMEDY_frame_terminator; + continue; + } +#endif +#ifdef GL_GREMEDY_string_marker + if (_glewStrSame3(&pos, &len, (const GLubyte*)"string_marker", 13)) + { + ret = GLEW_GREMEDY_string_marker; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"HP_", 3)) + { +#ifdef GL_HP_convolution_border_modes + if (_glewStrSame3(&pos, &len, (const GLubyte*)"convolution_border_modes", 24)) + { + ret = GLEW_HP_convolution_border_modes; + continue; + } +#endif +#ifdef GL_HP_image_transform + if (_glewStrSame3(&pos, &len, (const GLubyte*)"image_transform", 15)) + { + ret = GLEW_HP_image_transform; + continue; + } +#endif +#ifdef GL_HP_occlusion_test + if (_glewStrSame3(&pos, &len, (const GLubyte*)"occlusion_test", 14)) + { + ret = GLEW_HP_occlusion_test; + continue; + } +#endif +#ifdef GL_HP_texture_lighting + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_lighting", 16)) + { + ret = GLEW_HP_texture_lighting; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"IBM_", 4)) + { +#ifdef GL_IBM_cull_vertex + if (_glewStrSame3(&pos, &len, (const GLubyte*)"cull_vertex", 11)) + { + ret = GLEW_IBM_cull_vertex; + continue; + } +#endif +#ifdef GL_IBM_multimode_draw_arrays + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multimode_draw_arrays", 21)) + { + ret = GLEW_IBM_multimode_draw_arrays; + continue; + } +#endif +#ifdef GL_IBM_rasterpos_clip + if (_glewStrSame3(&pos, &len, (const GLubyte*)"rasterpos_clip", 14)) + { + ret = GLEW_IBM_rasterpos_clip; + continue; + } +#endif +#ifdef GL_IBM_static_data + if (_glewStrSame3(&pos, &len, (const GLubyte*)"static_data", 11)) + { + ret = GLEW_IBM_static_data; + continue; + } +#endif +#ifdef GL_IBM_texture_mirrored_repeat + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirrored_repeat", 23)) + { + ret = GLEW_IBM_texture_mirrored_repeat; + continue; + } +#endif +#ifdef GL_IBM_vertex_array_lists + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_lists", 18)) + { + ret = GLEW_IBM_vertex_array_lists; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"INGR_", 5)) + { +#ifdef GL_INGR_color_clamp + if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_clamp", 11)) + { + ret = GLEW_INGR_color_clamp; + continue; + } +#endif +#ifdef GL_INGR_interlace_read + if (_glewStrSame3(&pos, &len, (const GLubyte*)"interlace_read", 14)) + { + ret = GLEW_INGR_interlace_read; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"INTEL_", 6)) + { +#ifdef GL_INTEL_parallel_arrays + if (_glewStrSame3(&pos, &len, (const GLubyte*)"parallel_arrays", 15)) + { + ret = GLEW_INTEL_parallel_arrays; + continue; + } +#endif +#ifdef GL_INTEL_texture_scissor + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_scissor", 15)) + { + ret = GLEW_INTEL_texture_scissor; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"KTX_", 4)) + { +#ifdef GL_KTX_buffer_region + if (_glewStrSame3(&pos, &len, (const GLubyte*)"buffer_region", 13)) + { + ret = GLEW_KTX_buffer_region; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"MESAX_", 6)) + { +#ifdef GL_MESAX_texture_stack + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_stack", 13)) + { + ret = GLEW_MESAX_texture_stack; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"MESA_", 5)) + { +#ifdef GL_MESA_pack_invert + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pack_invert", 11)) + { + ret = GLEW_MESA_pack_invert; + continue; + } +#endif +#ifdef GL_MESA_resize_buffers + if (_glewStrSame3(&pos, &len, (const GLubyte*)"resize_buffers", 14)) + { + ret = GLEW_MESA_resize_buffers; + continue; + } +#endif +#ifdef GL_MESA_window_pos + if (_glewStrSame3(&pos, &len, (const GLubyte*)"window_pos", 10)) + { + ret = GLEW_MESA_window_pos; + continue; + } +#endif +#ifdef GL_MESA_ycbcr_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"ycbcr_texture", 13)) + { + ret = GLEW_MESA_ycbcr_texture; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"NV_", 3)) + { +#ifdef GL_NV_blend_square + if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_square", 12)) + { + ret = GLEW_NV_blend_square; + continue; + } +#endif +#ifdef GL_NV_copy_depth_to_color + if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_depth_to_color", 19)) + { + ret = GLEW_NV_copy_depth_to_color; + continue; + } +#endif +#ifdef GL_NV_depth_buffer_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_buffer_float", 18)) + { + ret = GLEW_NV_depth_buffer_float; + continue; + } +#endif +#ifdef GL_NV_depth_clamp + if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_clamp", 11)) + { + ret = GLEW_NV_depth_clamp; + continue; + } +#endif +#ifdef GL_NV_depth_range_unclamped + if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_range_unclamped", 21)) + { + ret = GLEW_NV_depth_range_unclamped; + continue; + } +#endif +#ifdef GL_NV_evaluators + if (_glewStrSame3(&pos, &len, (const GLubyte*)"evaluators", 10)) + { + ret = GLEW_NV_evaluators; + continue; + } +#endif +#ifdef GL_NV_fence + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fence", 5)) + { + ret = GLEW_NV_fence; + continue; + } +#endif +#ifdef GL_NV_float_buffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"float_buffer", 12)) + { + ret = GLEW_NV_float_buffer; + continue; + } +#endif +#ifdef GL_NV_fog_distance + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_distance", 12)) + { + ret = GLEW_NV_fog_distance; + continue; + } +#endif +#ifdef GL_NV_fragment_program + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program", 16)) + { + ret = GLEW_NV_fragment_program; + continue; + } +#endif +#ifdef GL_NV_fragment_program2 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program2", 17)) + { + ret = GLEW_NV_fragment_program2; + continue; + } +#endif +#ifdef GL_NV_fragment_program4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program4", 17)) + { + ret = GLEW_NV_fragment_program4; + continue; + } +#endif +#ifdef GL_NV_fragment_program_option + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program_option", 23)) + { + ret = GLEW_NV_fragment_program_option; + continue; + } +#endif +#ifdef GL_NV_framebuffer_multisample_coverage + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_multisample_coverage", 32)) + { + ret = GLEW_NV_framebuffer_multisample_coverage; + continue; + } +#endif +#ifdef GL_NV_geometry_program4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"geometry_program4", 17)) + { + ret = GLEW_NV_geometry_program4; + continue; + } +#endif +#ifdef GL_NV_geometry_shader4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"geometry_shader4", 16)) + { + ret = GLEW_NV_geometry_shader4; + continue; + } +#endif +#ifdef GL_NV_gpu_program4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program4", 12)) + { + ret = GLEW_NV_gpu_program4; + continue; + } +#endif +#ifdef GL_NV_half_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"half_float", 10)) + { + ret = GLEW_NV_half_float; + continue; + } +#endif +#ifdef GL_NV_light_max_exponent + if (_glewStrSame3(&pos, &len, (const GLubyte*)"light_max_exponent", 18)) + { + ret = GLEW_NV_light_max_exponent; + continue; + } +#endif +#ifdef GL_NV_multisample_filter_hint + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample_filter_hint", 23)) + { + ret = GLEW_NV_multisample_filter_hint; + continue; + } +#endif +#ifdef GL_NV_occlusion_query + if (_glewStrSame3(&pos, &len, (const GLubyte*)"occlusion_query", 15)) + { + ret = GLEW_NV_occlusion_query; + continue; + } +#endif +#ifdef GL_NV_packed_depth_stencil + if (_glewStrSame3(&pos, &len, (const GLubyte*)"packed_depth_stencil", 20)) + { + ret = GLEW_NV_packed_depth_stencil; + continue; + } +#endif +#ifdef GL_NV_parameter_buffer_object + if (_glewStrSame3(&pos, &len, (const GLubyte*)"parameter_buffer_object", 23)) + { + ret = GLEW_NV_parameter_buffer_object; + continue; + } +#endif +#ifdef GL_NV_pixel_data_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_data_range", 16)) + { + ret = GLEW_NV_pixel_data_range; + continue; + } +#endif +#ifdef GL_NV_point_sprite + if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_sprite", 12)) + { + ret = GLEW_NV_point_sprite; + continue; + } +#endif +#ifdef GL_NV_primitive_restart + if (_glewStrSame3(&pos, &len, (const GLubyte*)"primitive_restart", 17)) + { + ret = GLEW_NV_primitive_restart; + continue; + } +#endif +#ifdef GL_NV_register_combiners + if (_glewStrSame3(&pos, &len, (const GLubyte*)"register_combiners", 18)) + { + ret = GLEW_NV_register_combiners; + continue; + } +#endif +#ifdef GL_NV_register_combiners2 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"register_combiners2", 19)) + { + ret = GLEW_NV_register_combiners2; + continue; + } +#endif +#ifdef GL_NV_texgen_emboss + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texgen_emboss", 13)) + { + ret = GLEW_NV_texgen_emboss; + continue; + } +#endif +#ifdef GL_NV_texgen_reflection + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texgen_reflection", 17)) + { + ret = GLEW_NV_texgen_reflection; + continue; + } +#endif +#ifdef GL_NV_texture_compression_vtc + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_vtc", 23)) + { + ret = GLEW_NV_texture_compression_vtc; + continue; + } +#endif +#ifdef GL_NV_texture_env_combine4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine4", 20)) + { + ret = GLEW_NV_texture_env_combine4; + continue; + } +#endif +#ifdef GL_NV_texture_expand_normal + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_expand_normal", 21)) + { + ret = GLEW_NV_texture_expand_normal; + continue; + } +#endif +#ifdef GL_NV_texture_rectangle + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rectangle", 17)) + { + ret = GLEW_NV_texture_rectangle; + continue; + } +#endif +#ifdef GL_NV_texture_shader + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_shader", 14)) + { + ret = GLEW_NV_texture_shader; + continue; + } +#endif +#ifdef GL_NV_texture_shader2 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_shader2", 15)) + { + ret = GLEW_NV_texture_shader2; + continue; + } +#endif +#ifdef GL_NV_texture_shader3 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_shader3", 15)) + { + ret = GLEW_NV_texture_shader3; + continue; + } +#endif +#ifdef GL_NV_transform_feedback + if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback", 18)) + { + ret = GLEW_NV_transform_feedback; + continue; + } +#endif +#ifdef GL_NV_vertex_array_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range", 18)) + { + ret = GLEW_NV_vertex_array_range; + continue; + } +#endif +#ifdef GL_NV_vertex_array_range2 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range2", 19)) + { + ret = GLEW_NV_vertex_array_range2; + continue; + } +#endif +#ifdef GL_NV_vertex_program + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program", 14)) + { + ret = GLEW_NV_vertex_program; + continue; + } +#endif +#ifdef GL_NV_vertex_program1_1 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program1_1", 17)) + { + ret = GLEW_NV_vertex_program1_1; + continue; + } +#endif +#ifdef GL_NV_vertex_program2 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program2", 15)) + { + ret = GLEW_NV_vertex_program2; + continue; + } +#endif +#ifdef GL_NV_vertex_program2_option + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program2_option", 22)) + { + ret = GLEW_NV_vertex_program2_option; + continue; + } +#endif +#ifdef GL_NV_vertex_program3 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program3", 15)) + { + ret = GLEW_NV_vertex_program3; + continue; + } +#endif +#ifdef GL_NV_vertex_program4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program4", 15)) + { + ret = GLEW_NV_vertex_program4; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"OES_", 4)) + { +#ifdef GL_OES_byte_coordinates + if (_glewStrSame3(&pos, &len, (const GLubyte*)"byte_coordinates", 16)) + { + ret = GLEW_OES_byte_coordinates; + continue; + } +#endif +#ifdef GL_OES_compressed_paletted_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"compressed_paletted_texture", 27)) + { + ret = GLEW_OES_compressed_paletted_texture; + continue; + } +#endif +#ifdef GL_OES_read_format + if (_glewStrSame3(&pos, &len, (const GLubyte*)"read_format", 11)) + { + ret = GLEW_OES_read_format; + continue; + } +#endif +#ifdef GL_OES_single_precision + if (_glewStrSame3(&pos, &len, (const GLubyte*)"single_precision", 16)) + { + ret = GLEW_OES_single_precision; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"OML_", 4)) + { +#ifdef GL_OML_interlace + if (_glewStrSame3(&pos, &len, (const GLubyte*)"interlace", 9)) + { + ret = GLEW_OML_interlace; + continue; + } +#endif +#ifdef GL_OML_resample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"resample", 8)) + { + ret = GLEW_OML_resample; + continue; + } +#endif +#ifdef GL_OML_subsample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"subsample", 9)) + { + ret = GLEW_OML_subsample; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"PGI_", 4)) + { +#ifdef GL_PGI_misc_hints + if (_glewStrSame3(&pos, &len, (const GLubyte*)"misc_hints", 10)) + { + ret = GLEW_PGI_misc_hints; + continue; + } +#endif +#ifdef GL_PGI_vertex_hints + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_hints", 12)) + { + ret = GLEW_PGI_vertex_hints; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"REND_", 5)) + { +#ifdef GL_REND_screen_coordinates + if (_glewStrSame3(&pos, &len, (const GLubyte*)"screen_coordinates", 18)) + { + ret = GLEW_REND_screen_coordinates; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"S3_", 3)) + { +#ifdef GL_S3_s3tc + if (_glewStrSame3(&pos, &len, (const GLubyte*)"s3tc", 4)) + { + ret = GLEW_S3_s3tc; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGIS_", 5)) + { +#ifdef GL_SGIS_color_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_range", 11)) + { + ret = GLEW_SGIS_color_range; + continue; + } +#endif +#ifdef GL_SGIS_detail_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"detail_texture", 14)) + { + ret = GLEW_SGIS_detail_texture; + continue; + } +#endif +#ifdef GL_SGIS_fog_function + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_function", 12)) + { + ret = GLEW_SGIS_fog_function; + continue; + } +#endif +#ifdef GL_SGIS_generate_mipmap + if (_glewStrSame3(&pos, &len, (const GLubyte*)"generate_mipmap", 15)) + { + ret = GLEW_SGIS_generate_mipmap; + continue; + } +#endif +#ifdef GL_SGIS_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) + { + ret = GLEW_SGIS_multisample; + continue; + } +#endif +#ifdef GL_SGIS_pixel_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_texture", 13)) + { + ret = GLEW_SGIS_pixel_texture; + continue; + } +#endif +#ifdef GL_SGIS_sharpen_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"sharpen_texture", 15)) + { + ret = GLEW_SGIS_sharpen_texture; + continue; + } +#endif +#ifdef GL_SGIS_texture4D + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture4D", 9)) + { + ret = GLEW_SGIS_texture4D; + continue; + } +#endif +#ifdef GL_SGIS_texture_border_clamp + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_border_clamp", 20)) + { + ret = GLEW_SGIS_texture_border_clamp; + continue; + } +#endif +#ifdef GL_SGIS_texture_edge_clamp + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_edge_clamp", 18)) + { + ret = GLEW_SGIS_texture_edge_clamp; + continue; + } +#endif +#ifdef GL_SGIS_texture_filter4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_filter4", 15)) + { + ret = GLEW_SGIS_texture_filter4; + continue; + } +#endif +#ifdef GL_SGIS_texture_lod + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_lod", 11)) + { + ret = GLEW_SGIS_texture_lod; + continue; + } +#endif +#ifdef GL_SGIS_texture_select + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_select", 14)) + { + ret = GLEW_SGIS_texture_select; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGIX_", 5)) + { +#ifdef GL_SGIX_async + if (_glewStrSame3(&pos, &len, (const GLubyte*)"async", 5)) + { + ret = GLEW_SGIX_async; + continue; + } +#endif +#ifdef GL_SGIX_async_histogram + if (_glewStrSame3(&pos, &len, (const GLubyte*)"async_histogram", 15)) + { + ret = GLEW_SGIX_async_histogram; + continue; + } +#endif +#ifdef GL_SGIX_async_pixel + if (_glewStrSame3(&pos, &len, (const GLubyte*)"async_pixel", 11)) + { + ret = GLEW_SGIX_async_pixel; + continue; + } +#endif +#ifdef GL_SGIX_blend_alpha_minmax + if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_alpha_minmax", 18)) + { + ret = GLEW_SGIX_blend_alpha_minmax; + continue; + } +#endif +#ifdef GL_SGIX_clipmap + if (_glewStrSame3(&pos, &len, (const GLubyte*)"clipmap", 7)) + { + ret = GLEW_SGIX_clipmap; + continue; + } +#endif +#ifdef GL_SGIX_depth_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_texture", 13)) + { + ret = GLEW_SGIX_depth_texture; + continue; + } +#endif +#ifdef GL_SGIX_flush_raster + if (_glewStrSame3(&pos, &len, (const GLubyte*)"flush_raster", 12)) + { + ret = GLEW_SGIX_flush_raster; + continue; + } +#endif +#ifdef GL_SGIX_fog_offset + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_offset", 10)) + { + ret = GLEW_SGIX_fog_offset; + continue; + } +#endif +#ifdef GL_SGIX_fog_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_texture", 11)) + { + ret = GLEW_SGIX_fog_texture; + continue; + } +#endif +#ifdef GL_SGIX_fragment_specular_lighting + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_specular_lighting", 26)) + { + ret = GLEW_SGIX_fragment_specular_lighting; + continue; + } +#endif +#ifdef GL_SGIX_framezoom + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framezoom", 9)) + { + ret = GLEW_SGIX_framezoom; + continue; + } +#endif +#ifdef GL_SGIX_interlace + if (_glewStrSame3(&pos, &len, (const GLubyte*)"interlace", 9)) + { + ret = GLEW_SGIX_interlace; + continue; + } +#endif +#ifdef GL_SGIX_ir_instrument1 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"ir_instrument1", 14)) + { + ret = GLEW_SGIX_ir_instrument1; + continue; + } +#endif +#ifdef GL_SGIX_list_priority + if (_glewStrSame3(&pos, &len, (const GLubyte*)"list_priority", 13)) + { + ret = GLEW_SGIX_list_priority; + continue; + } +#endif +#ifdef GL_SGIX_pixel_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_texture", 13)) + { + ret = GLEW_SGIX_pixel_texture; + continue; + } +#endif +#ifdef GL_SGIX_pixel_texture_bits + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_texture_bits", 18)) + { + ret = GLEW_SGIX_pixel_texture_bits; + continue; + } +#endif +#ifdef GL_SGIX_reference_plane + if (_glewStrSame3(&pos, &len, (const GLubyte*)"reference_plane", 15)) + { + ret = GLEW_SGIX_reference_plane; + continue; + } +#endif +#ifdef GL_SGIX_resample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"resample", 8)) + { + ret = GLEW_SGIX_resample; + continue; + } +#endif +#ifdef GL_SGIX_shadow + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow", 6)) + { + ret = GLEW_SGIX_shadow; + continue; + } +#endif +#ifdef GL_SGIX_shadow_ambient + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow_ambient", 14)) + { + ret = GLEW_SGIX_shadow_ambient; + continue; + } +#endif +#ifdef GL_SGIX_sprite + if (_glewStrSame3(&pos, &len, (const GLubyte*)"sprite", 6)) + { + ret = GLEW_SGIX_sprite; + continue; + } +#endif +#ifdef GL_SGIX_tag_sample_buffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"tag_sample_buffer", 17)) + { + ret = GLEW_SGIX_tag_sample_buffer; + continue; + } +#endif +#ifdef GL_SGIX_texture_add_env + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_add_env", 15)) + { + ret = GLEW_SGIX_texture_add_env; + continue; + } +#endif +#ifdef GL_SGIX_texture_coordinate_clamp + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_coordinate_clamp", 24)) + { + ret = GLEW_SGIX_texture_coordinate_clamp; + continue; + } +#endif +#ifdef GL_SGIX_texture_lod_bias + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_lod_bias", 16)) + { + ret = GLEW_SGIX_texture_lod_bias; + continue; + } +#endif +#ifdef GL_SGIX_texture_multi_buffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_multi_buffer", 20)) + { + ret = GLEW_SGIX_texture_multi_buffer; + continue; + } +#endif +#ifdef GL_SGIX_texture_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_range", 13)) + { + ret = GLEW_SGIX_texture_range; + continue; + } +#endif +#ifdef GL_SGIX_texture_scale_bias + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_scale_bias", 18)) + { + ret = GLEW_SGIX_texture_scale_bias; + continue; + } +#endif +#ifdef GL_SGIX_vertex_preclip + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_preclip", 14)) + { + ret = GLEW_SGIX_vertex_preclip; + continue; + } +#endif +#ifdef GL_SGIX_vertex_preclip_hint + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_preclip_hint", 19)) + { + ret = GLEW_SGIX_vertex_preclip_hint; + continue; + } +#endif +#ifdef GL_SGIX_ycrcb + if (_glewStrSame3(&pos, &len, (const GLubyte*)"ycrcb", 5)) + { + ret = GLEW_SGIX_ycrcb; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGI_", 4)) + { +#ifdef GL_SGI_color_matrix + if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_matrix", 12)) + { + ret = GLEW_SGI_color_matrix; + continue; + } +#endif +#ifdef GL_SGI_color_table + if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_table", 11)) + { + ret = GLEW_SGI_color_table; + continue; + } +#endif +#ifdef GL_SGI_texture_color_table + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_color_table", 19)) + { + ret = GLEW_SGI_texture_color_table; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"SUNX_", 5)) + { +#ifdef GL_SUNX_constant_data + if (_glewStrSame3(&pos, &len, (const GLubyte*)"constant_data", 13)) + { + ret = GLEW_SUNX_constant_data; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"SUN_", 4)) + { +#ifdef GL_SUN_convolution_border_modes + if (_glewStrSame3(&pos, &len, (const GLubyte*)"convolution_border_modes", 24)) + { + ret = GLEW_SUN_convolution_border_modes; + continue; + } +#endif +#ifdef GL_SUN_global_alpha + if (_glewStrSame3(&pos, &len, (const GLubyte*)"global_alpha", 12)) + { + ret = GLEW_SUN_global_alpha; + continue; + } +#endif +#ifdef GL_SUN_mesh_array + if (_glewStrSame3(&pos, &len, (const GLubyte*)"mesh_array", 10)) + { + ret = GLEW_SUN_mesh_array; + continue; + } +#endif +#ifdef GL_SUN_read_video_pixels + if (_glewStrSame3(&pos, &len, (const GLubyte*)"read_video_pixels", 17)) + { + ret = GLEW_SUN_read_video_pixels; + continue; + } +#endif +#ifdef GL_SUN_slice_accum + if (_glewStrSame3(&pos, &len, (const GLubyte*)"slice_accum", 11)) + { + ret = GLEW_SUN_slice_accum; + continue; + } +#endif +#ifdef GL_SUN_triangle_list + if (_glewStrSame3(&pos, &len, (const GLubyte*)"triangle_list", 13)) + { + ret = GLEW_SUN_triangle_list; + continue; + } +#endif +#ifdef GL_SUN_vertex + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex", 6)) + { + ret = GLEW_SUN_vertex; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"WIN_", 4)) + { +#ifdef GL_WIN_phong_shading + if (_glewStrSame3(&pos, &len, (const GLubyte*)"phong_shading", 13)) + { + ret = GLEW_WIN_phong_shading; + continue; + } +#endif +#ifdef GL_WIN_specular_fog + if (_glewStrSame3(&pos, &len, (const GLubyte*)"specular_fog", 12)) + { + ret = GLEW_WIN_specular_fog; + continue; + } +#endif +#ifdef GL_WIN_swap_hint + if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_hint", 9)) + { + ret = GLEW_WIN_swap_hint; + continue; + } +#endif + } + } + ret = (len == 0); + } + return ret; +} + +#if defined(_WIN32) + +#if defined(GLEW_MX) +GLboolean wglewContextIsSupported (WGLEWContext* ctx, const char* name) +#else +GLboolean wglewIsSupported (const char* name) +#endif +{ + GLubyte* pos = (GLubyte*)name; + GLuint len = _glewStrLen(pos); + GLboolean ret = GL_TRUE; + while (ret && len > 0) + { + if (_glewStrSame1(&pos, &len, (const GLubyte*)"WGL_", 4)) + { + if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DFX_", 5)) + { +#ifdef WGL_3DFX_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) + { + ret = WGLEW_3DFX_multisample; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DL_", 4)) + { +#ifdef WGL_3DL_stereo_control + if (_glewStrSame3(&pos, &len, (const GLubyte*)"stereo_control", 14)) + { + ret = WGLEW_3DL_stereo_control; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"ARB_", 4)) + { +#ifdef WGL_ARB_buffer_region + if (_glewStrSame3(&pos, &len, (const GLubyte*)"buffer_region", 13)) + { + ret = WGLEW_ARB_buffer_region; + continue; + } +#endif +#ifdef WGL_ARB_extensions_string + if (_glewStrSame3(&pos, &len, (const GLubyte*)"extensions_string", 17)) + { + ret = WGLEW_ARB_extensions_string; + continue; + } +#endif +#ifdef WGL_ARB_make_current_read + if (_glewStrSame3(&pos, &len, (const GLubyte*)"make_current_read", 17)) + { + ret = WGLEW_ARB_make_current_read; + continue; + } +#endif +#ifdef WGL_ARB_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) + { + ret = WGLEW_ARB_multisample; + continue; + } +#endif +#ifdef WGL_ARB_pbuffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pbuffer", 7)) + { + ret = WGLEW_ARB_pbuffer; + continue; + } +#endif +#ifdef WGL_ARB_pixel_format + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format", 12)) + { + ret = WGLEW_ARB_pixel_format; + continue; + } +#endif +#ifdef WGL_ARB_pixel_format_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format_float", 18)) + { + ret = WGLEW_ARB_pixel_format_float; + continue; + } +#endif +#ifdef WGL_ARB_render_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_texture", 14)) + { + ret = WGLEW_ARB_render_texture; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATI_", 4)) + { +#ifdef WGL_ATI_pixel_format_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format_float", 18)) + { + ret = WGLEW_ATI_pixel_format_float; + continue; + } +#endif +#ifdef WGL_ATI_render_texture_rectangle + if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_texture_rectangle", 24)) + { + ret = WGLEW_ATI_render_texture_rectangle; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"EXT_", 4)) + { +#ifdef WGL_EXT_depth_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_float", 11)) + { + ret = WGLEW_EXT_depth_float; + continue; + } +#endif +#ifdef WGL_EXT_display_color_table + if (_glewStrSame3(&pos, &len, (const GLubyte*)"display_color_table", 19)) + { + ret = WGLEW_EXT_display_color_table; + continue; + } +#endif +#ifdef WGL_EXT_extensions_string + if (_glewStrSame3(&pos, &len, (const GLubyte*)"extensions_string", 17)) + { + ret = WGLEW_EXT_extensions_string; + continue; + } +#endif +#ifdef WGL_EXT_framebuffer_sRGB + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) + { + ret = WGLEW_EXT_framebuffer_sRGB; + continue; + } +#endif +#ifdef WGL_EXT_make_current_read + if (_glewStrSame3(&pos, &len, (const GLubyte*)"make_current_read", 17)) + { + ret = WGLEW_EXT_make_current_read; + continue; + } +#endif +#ifdef WGL_EXT_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) + { + ret = WGLEW_EXT_multisample; + continue; + } +#endif +#ifdef WGL_EXT_pbuffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pbuffer", 7)) + { + ret = WGLEW_EXT_pbuffer; + continue; + } +#endif +#ifdef WGL_EXT_pixel_format + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format", 12)) + { + ret = WGLEW_EXT_pixel_format; + continue; + } +#endif +#ifdef WGL_EXT_pixel_format_packed_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format_packed_float", 25)) + { + ret = WGLEW_EXT_pixel_format_packed_float; + continue; + } +#endif +#ifdef WGL_EXT_swap_control + if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control", 12)) + { + ret = WGLEW_EXT_swap_control; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"I3D_", 4)) + { +#ifdef WGL_I3D_digital_video_control + if (_glewStrSame3(&pos, &len, (const GLubyte*)"digital_video_control", 21)) + { + ret = WGLEW_I3D_digital_video_control; + continue; + } +#endif +#ifdef WGL_I3D_gamma + if (_glewStrSame3(&pos, &len, (const GLubyte*)"gamma", 5)) + { + ret = WGLEW_I3D_gamma; + continue; + } +#endif +#ifdef WGL_I3D_genlock + if (_glewStrSame3(&pos, &len, (const GLubyte*)"genlock", 7)) + { + ret = WGLEW_I3D_genlock; + continue; + } +#endif +#ifdef WGL_I3D_image_buffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"image_buffer", 12)) + { + ret = WGLEW_I3D_image_buffer; + continue; + } +#endif +#ifdef WGL_I3D_swap_frame_lock + if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_frame_lock", 15)) + { + ret = WGLEW_I3D_swap_frame_lock; + continue; + } +#endif +#ifdef WGL_I3D_swap_frame_usage + if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_frame_usage", 16)) + { + ret = WGLEW_I3D_swap_frame_usage; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"NV_", 3)) + { +#ifdef WGL_NV_float_buffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"float_buffer", 12)) + { + ret = WGLEW_NV_float_buffer; + continue; + } +#endif +#ifdef WGL_NV_gpu_affinity + if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_affinity", 12)) + { + ret = WGLEW_NV_gpu_affinity; + continue; + } +#endif +#ifdef WGL_NV_render_depth_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_depth_texture", 20)) + { + ret = WGLEW_NV_render_depth_texture; + continue; + } +#endif +#ifdef WGL_NV_render_texture_rectangle + if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_texture_rectangle", 24)) + { + ret = WGLEW_NV_render_texture_rectangle; + continue; + } +#endif +#ifdef WGL_NV_vertex_array_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range", 18)) + { + ret = WGLEW_NV_vertex_array_range; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"OML_", 4)) + { +#ifdef WGL_OML_sync_control + if (_glewStrSame3(&pos, &len, (const GLubyte*)"sync_control", 12)) + { + ret = WGLEW_OML_sync_control; + continue; + } +#endif + } + } + ret = (len == 0); + } + return ret; +} + +#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) + +#if defined(GLEW_MX) +GLboolean glxewContextIsSupported (GLXEWContext* ctx, const char* name) +#else +GLboolean glxewIsSupported (const char* name) +#endif +{ + GLubyte* pos = (GLubyte*)name; + GLuint len = _glewStrLen(pos); + GLboolean ret = GL_TRUE; + while (ret && len > 0) + { + if(_glewStrSame1(&pos, &len, (const GLubyte*)"GLX_", 4)) + { + if (_glewStrSame2(&pos, &len, (const GLubyte*)"VERSION_", 8)) + { +#ifdef GLX_VERSION_1_2 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_2", 3)) + { + ret = GLXEW_VERSION_1_2; + continue; + } +#endif +#ifdef GLX_VERSION_1_3 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_3", 3)) + { + ret = GLXEW_VERSION_1_3; + continue; + } +#endif +#ifdef GLX_VERSION_1_4 + if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_4", 3)) + { + ret = GLXEW_VERSION_1_4; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DFX_", 5)) + { +#ifdef GLX_3DFX_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) + { + ret = GLXEW_3DFX_multisample; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"ARB_", 4)) + { +#ifdef GLX_ARB_fbconfig_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fbconfig_float", 14)) + { + ret = GLXEW_ARB_fbconfig_float; + continue; + } +#endif +#ifdef GLX_ARB_get_proc_address + if (_glewStrSame3(&pos, &len, (const GLubyte*)"get_proc_address", 16)) + { + ret = GLXEW_ARB_get_proc_address; + continue; + } +#endif +#ifdef GLX_ARB_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) + { + ret = GLXEW_ARB_multisample; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATI_", 4)) + { +#ifdef GLX_ATI_pixel_format_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format_float", 18)) + { + ret = GLXEW_ATI_pixel_format_float; + continue; + } +#endif +#ifdef GLX_ATI_render_texture + if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_texture", 14)) + { + ret = GLXEW_ATI_render_texture; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"EXT_", 4)) + { +#ifdef GLX_EXT_fbconfig_packed_float + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fbconfig_packed_float", 21)) + { + ret = GLXEW_EXT_fbconfig_packed_float; + continue; + } +#endif +#ifdef GLX_EXT_framebuffer_sRGB + if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) + { + ret = GLXEW_EXT_framebuffer_sRGB; + continue; + } +#endif +#ifdef GLX_EXT_import_context + if (_glewStrSame3(&pos, &len, (const GLubyte*)"import_context", 14)) + { + ret = GLXEW_EXT_import_context; + continue; + } +#endif +#ifdef GLX_EXT_scene_marker + if (_glewStrSame3(&pos, &len, (const GLubyte*)"scene_marker", 12)) + { + ret = GLXEW_EXT_scene_marker; + continue; + } +#endif +#ifdef GLX_EXT_texture_from_pixmap + if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_from_pixmap", 19)) + { + ret = GLXEW_EXT_texture_from_pixmap; + continue; + } +#endif +#ifdef GLX_EXT_visual_info + if (_glewStrSame3(&pos, &len, (const GLubyte*)"visual_info", 11)) + { + ret = GLXEW_EXT_visual_info; + continue; + } +#endif +#ifdef GLX_EXT_visual_rating + if (_glewStrSame3(&pos, &len, (const GLubyte*)"visual_rating", 13)) + { + ret = GLXEW_EXT_visual_rating; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"MESA_", 5)) + { +#ifdef GLX_MESA_agp_offset + if (_glewStrSame3(&pos, &len, (const GLubyte*)"agp_offset", 10)) + { + ret = GLXEW_MESA_agp_offset; + continue; + } +#endif +#ifdef GLX_MESA_copy_sub_buffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_sub_buffer", 15)) + { + ret = GLXEW_MESA_copy_sub_buffer; + continue; + } +#endif +#ifdef GLX_MESA_pixmap_colormap + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixmap_colormap", 15)) + { + ret = GLXEW_MESA_pixmap_colormap; + continue; + } +#endif +#ifdef GLX_MESA_release_buffers + if (_glewStrSame3(&pos, &len, (const GLubyte*)"release_buffers", 15)) + { + ret = GLXEW_MESA_release_buffers; + continue; + } +#endif +#ifdef GLX_MESA_set_3dfx_mode + if (_glewStrSame3(&pos, &len, (const GLubyte*)"set_3dfx_mode", 13)) + { + ret = GLXEW_MESA_set_3dfx_mode; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"NV_", 3)) + { +#ifdef GLX_NV_float_buffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"float_buffer", 12)) + { + ret = GLXEW_NV_float_buffer; + continue; + } +#endif +#ifdef GLX_NV_vertex_array_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range", 18)) + { + ret = GLXEW_NV_vertex_array_range; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"OML_", 4)) + { +#ifdef GLX_OML_swap_method + if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_method", 11)) + { + ret = GLXEW_OML_swap_method; + continue; + } +#endif +#if defined(GLX_OML_sync_control) && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +#include + if (_glewStrSame3(&pos, &len, (const GLubyte*)"sync_control", 12)) + { + ret = GLXEW_OML_sync_control; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGIS_", 5)) + { +#ifdef GLX_SGIS_blended_overlay + if (_glewStrSame3(&pos, &len, (const GLubyte*)"blended_overlay", 15)) + { + ret = GLXEW_SGIS_blended_overlay; + continue; + } +#endif +#ifdef GLX_SGIS_color_range + if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_range", 11)) + { + ret = GLXEW_SGIS_color_range; + continue; + } +#endif +#ifdef GLX_SGIS_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) + { + ret = GLXEW_SGIS_multisample; + continue; + } +#endif +#ifdef GLX_SGIS_shared_multisample + if (_glewStrSame3(&pos, &len, (const GLubyte*)"shared_multisample", 18)) + { + ret = GLXEW_SGIS_shared_multisample; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGIX_", 5)) + { +#ifdef GLX_SGIX_fbconfig + if (_glewStrSame3(&pos, &len, (const GLubyte*)"fbconfig", 8)) + { + ret = GLXEW_SGIX_fbconfig; + continue; + } +#endif +#ifdef GLX_SGIX_hyperpipe + if (_glewStrSame3(&pos, &len, (const GLubyte*)"hyperpipe", 9)) + { + ret = GLXEW_SGIX_hyperpipe; + continue; + } +#endif +#ifdef GLX_SGIX_pbuffer + if (_glewStrSame3(&pos, &len, (const GLubyte*)"pbuffer", 7)) + { + ret = GLXEW_SGIX_pbuffer; + continue; + } +#endif +#ifdef GLX_SGIX_swap_barrier + if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_barrier", 12)) + { + ret = GLXEW_SGIX_swap_barrier; + continue; + } +#endif +#ifdef GLX_SGIX_swap_group + if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_group", 10)) + { + ret = GLXEW_SGIX_swap_group; + continue; + } +#endif +#ifdef GLX_SGIX_video_resize + if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_resize", 12)) + { + ret = GLXEW_SGIX_video_resize; + continue; + } +#endif +#ifdef GLX_SGIX_visual_select_group + if (_glewStrSame3(&pos, &len, (const GLubyte*)"visual_select_group", 19)) + { + ret = GLXEW_SGIX_visual_select_group; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGI_", 4)) + { +#ifdef GLX_SGI_cushion + if (_glewStrSame3(&pos, &len, (const GLubyte*)"cushion", 7)) + { + ret = GLXEW_SGI_cushion; + continue; + } +#endif +#ifdef GLX_SGI_make_current_read + if (_glewStrSame3(&pos, &len, (const GLubyte*)"make_current_read", 17)) + { + ret = GLXEW_SGI_make_current_read; + continue; + } +#endif +#ifdef GLX_SGI_swap_control + if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control", 12)) + { + ret = GLXEW_SGI_swap_control; + continue; + } +#endif +#ifdef GLX_SGI_video_sync + if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_sync", 10)) + { + ret = GLXEW_SGI_video_sync; + continue; + } +#endif + } + if (_glewStrSame2(&pos, &len, (const GLubyte*)"SUN_", 4)) + { +#ifdef GLX_SUN_get_transparent_index + if (_glewStrSame3(&pos, &len, (const GLubyte*)"get_transparent_index", 21)) + { + ret = GLXEW_SUN_get_transparent_index; + continue; + } +#endif +#ifdef GLX_SUN_video_resize + if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_resize", 12)) + { + ret = GLXEW_SUN_video_resize; + continue; + } +#endif + } + } + ret = (len == 0); + } + return ret; +} + +#endif /* _WIN32 */ diff --git a/3rdparty/libprojectm/glew.h b/3rdparty/libprojectm/glew.h new file mode 100644 index 000000000..2c9e06aa7 --- /dev/null +++ b/3rdparty/libprojectm/glew.h @@ -0,0 +1,10783 @@ +/* +** The OpenGL Extension Wrangler Library +** Copyright (C) 2002-2008, Milan Ikits +** Copyright (C) 2002-2008, Marcelo E. Magallon +** Copyright (C) 2002, Lev Povalahev +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are met: +** +** * Redistributions of source code must retain the above copyright notice, +** this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright notice, +** this list of conditions and the following disclaimer in the documentation +** and/or other materials provided with the distribution. +** * The name of the author may be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +** THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + * Mesa 3-D graphics library + * Version: 7.0 + * + * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* +** Copyright (c) 2007 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +#ifndef __glew_h__ +#define __glew_h__ +#define __GLEW_H__ + +#if defined(__gl_h_) || defined(__GL_H__) +#error gl.h included before glew.h +#endif +#if defined(__glext_h_) || defined(__GLEXT_H_) +#error glext.h included before glew.h +#endif +#if defined(__gl_ATI_h_) +#error glATI.h included before glew.h +#endif + +#define __gl_h_ +#define __GL_H__ +#define __glext_h_ +#define __GLEXT_H_ +#define __gl_ATI_h_ + +#if defined(_WIN32) + +/* + * GLEW does not include to avoid name space pollution. + * GL needs GLAPI and GLAPIENTRY, GLU needs APIENTRY, CALLBACK, and wchar_t + * defined properly. + */ +/* */ +#ifndef APIENTRY +#define GLEW_APIENTRY_DEFINED +# if defined(__MINGW32__) +# define APIENTRY __stdcall +# elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__) +# define APIENTRY __stdcall +# else +# define APIENTRY +# endif +#endif +#ifndef GLAPI +# if defined(__MINGW32__) +# define GLAPI extern +# endif +#endif +/* */ +#ifndef CALLBACK +#define GLEW_CALLBACK_DEFINED +# if defined(__MINGW32__) +# define CALLBACK __attribute__ ((__stdcall__)) +# elif (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) +# define CALLBACK __stdcall +# else +# define CALLBACK +# endif +#endif +/* and */ +#ifndef WINGDIAPI +#define GLEW_WINGDIAPI_DEFINED +#define WINGDIAPI __declspec(dllimport) +#endif +/* */ +#if (defined(_MSC_VER) || defined(__BORLANDC__)) && !defined(_WCHAR_T_DEFINED) +typedef unsigned short wchar_t; +# define _WCHAR_T_DEFINED +#endif +/* */ +#if !defined(_W64) +# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 +# define _W64 __w64 +# else +# define _W64 +# endif +#endif +#if !defined(_PTRDIFF_T_DEFINED) && !defined(_PTRDIFF_T_) +# ifdef _WIN64 +typedef __int64 ptrdiff_t; +# else +typedef _W64 int ptrdiff_t; +# endif +# define _PTRDIFF_T_DEFINED +# define _PTRDIFF_T_ +#endif + +#ifndef GLAPI +# if defined(__MINGW32__) +# define GLAPI extern +# else +# define GLAPI WINGDIAPI +# endif +#endif + +#ifndef GLAPIENTRY +#define GLAPIENTRY APIENTRY +#endif + +/* + * GLEW_STATIC needs to be set when using the static version. + * GLEW_BUILD is set when building the DLL version. + */ +#ifdef GLEW_STATIC +# define GLEWAPI extern +#else +# ifdef GLEW_BUILD +# define GLEWAPI extern __declspec(dllexport) +# else +# define GLEWAPI extern __declspec(dllimport) +# endif +#endif + +#else /* _UNIX */ + +/* + * Needed for ptrdiff_t in turn needed by VBO. This is defined by ISO + * C. On my system, this amounts to _3 lines_ of included code, all of + * them pretty much harmless. If you know of a way of detecting 32 vs + * 64 _targets_ at compile time you are free to replace this with + * something that's portable. For now, _this_ is the portable solution. + * (mem, 2004-01-04) + */ + +#include + +#define GLEW_APIENTRY_DEFINED +#define APIENTRY +#define GLEWAPI extern + +/* */ +#ifndef GLAPI +#define GLAPI extern +#endif +#ifndef GLAPIENTRY +#define GLAPIENTRY +#endif + +#endif /* _WIN32 */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* ----------------------------- GL_VERSION_1_1 ---------------------------- */ + +#ifndef GL_VERSION_1_1 +#define GL_VERSION_1_1 1 + +#if defined(__APPLE__) +typedef unsigned long GLenum; +typedef unsigned long GLbitfield; +typedef unsigned long GLuint; +typedef long GLint; +typedef long GLsizei; +#else +typedef unsigned int GLenum; +typedef unsigned int GLbitfield; +typedef unsigned int GLuint; +typedef int GLint; +typedef int GLsizei; +#endif +typedef unsigned char GLboolean; +typedef signed char GLbyte; +typedef short GLshort; +typedef unsigned char GLubyte; +typedef unsigned short GLushort; +typedef unsigned long GLulong; +typedef float GLfloat; +typedef float GLclampf; +typedef double GLdouble; +typedef double GLclampd; +typedef void GLvoid; +#if defined(_MSC_VER) && _MSC_VER < 1400 +typedef __int64 GLint64EXT; +typedef unsigned __int64 GLuint64EXT; +#else +typedef signed long long GLint64EXT; +typedef unsigned long long GLuint64EXT; +#endif + +#define GL_ACCUM 0x0100 +#define GL_LOAD 0x0101 +#define GL_RETURN 0x0102 +#define GL_MULT 0x0103 +#define GL_ADD 0x0104 +#define GL_NEVER 0x0200 +#define GL_LESS 0x0201 +#define GL_EQUAL 0x0202 +#define GL_LEQUAL 0x0203 +#define GL_GREATER 0x0204 +#define GL_NOTEQUAL 0x0205 +#define GL_GEQUAL 0x0206 +#define GL_ALWAYS 0x0207 +#define GL_CURRENT_BIT 0x00000001 +#define GL_POINT_BIT 0x00000002 +#define GL_LINE_BIT 0x00000004 +#define GL_POLYGON_BIT 0x00000008 +#define GL_POLYGON_STIPPLE_BIT 0x00000010 +#define GL_PIXEL_MODE_BIT 0x00000020 +#define GL_LIGHTING_BIT 0x00000040 +#define GL_FOG_BIT 0x00000080 +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_ACCUM_BUFFER_BIT 0x00000200 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_VIEWPORT_BIT 0x00000800 +#define GL_TRANSFORM_BIT 0x00001000 +#define GL_ENABLE_BIT 0x00002000 +#define GL_COLOR_BUFFER_BIT 0x00004000 +#define GL_HINT_BIT 0x00008000 +#define GL_EVAL_BIT 0x00010000 +#define GL_LIST_BIT 0x00020000 +#define GL_TEXTURE_BIT 0x00040000 +#define GL_SCISSOR_BIT 0x00080000 +#define GL_ALL_ATTRIB_BITS 0x000fffff +#define GL_POINTS 0x0000 +#define GL_LINES 0x0001 +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_STRIP 0x0003 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_FAN 0x0006 +#define GL_QUADS 0x0007 +#define GL_QUAD_STRIP 0x0008 +#define GL_POLYGON 0x0009 +#define GL_ZERO 0 +#define GL_ONE 1 +#define GL_SRC_COLOR 0x0300 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_SRC_ALPHA 0x0302 +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_DST_ALPHA 0x0304 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 +#define GL_DST_COLOR 0x0306 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_SRC_ALPHA_SATURATE 0x0308 +#define GL_TRUE 1 +#define GL_FALSE 0 +#define GL_CLIP_PLANE0 0x3000 +#define GL_CLIP_PLANE1 0x3001 +#define GL_CLIP_PLANE2 0x3002 +#define GL_CLIP_PLANE3 0x3003 +#define GL_CLIP_PLANE4 0x3004 +#define GL_CLIP_PLANE5 0x3005 +#define GL_BYTE 0x1400 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_SHORT 0x1402 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_INT 0x1404 +#define GL_UNSIGNED_INT 0x1405 +#define GL_FLOAT 0x1406 +#define GL_2_BYTES 0x1407 +#define GL_3_BYTES 0x1408 +#define GL_4_BYTES 0x1409 +#define GL_DOUBLE 0x140A +#define GL_NONE 0 +#define GL_FRONT_LEFT 0x0400 +#define GL_FRONT_RIGHT 0x0401 +#define GL_BACK_LEFT 0x0402 +#define GL_BACK_RIGHT 0x0403 +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#define GL_LEFT 0x0406 +#define GL_RIGHT 0x0407 +#define GL_FRONT_AND_BACK 0x0408 +#define GL_AUX0 0x0409 +#define GL_AUX1 0x040A +#define GL_AUX2 0x040B +#define GL_AUX3 0x040C +#define GL_NO_ERROR 0 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVALID_OPERATION 0x0502 +#define GL_STACK_OVERFLOW 0x0503 +#define GL_STACK_UNDERFLOW 0x0504 +#define GL_OUT_OF_MEMORY 0x0505 +#define GL_2D 0x0600 +#define GL_3D 0x0601 +#define GL_3D_COLOR 0x0602 +#define GL_3D_COLOR_TEXTURE 0x0603 +#define GL_4D_COLOR_TEXTURE 0x0604 +#define GL_PASS_THROUGH_TOKEN 0x0700 +#define GL_POINT_TOKEN 0x0701 +#define GL_LINE_TOKEN 0x0702 +#define GL_POLYGON_TOKEN 0x0703 +#define GL_BITMAP_TOKEN 0x0704 +#define GL_DRAW_PIXEL_TOKEN 0x0705 +#define GL_COPY_PIXEL_TOKEN 0x0706 +#define GL_LINE_RESET_TOKEN 0x0707 +#define GL_EXP 0x0800 +#define GL_EXP2 0x0801 +#define GL_CW 0x0900 +#define GL_CCW 0x0901 +#define GL_COEFF 0x0A00 +#define GL_ORDER 0x0A01 +#define GL_DOMAIN 0x0A02 +#define GL_CURRENT_COLOR 0x0B00 +#define GL_CURRENT_INDEX 0x0B01 +#define GL_CURRENT_NORMAL 0x0B02 +#define GL_CURRENT_TEXTURE_COORDS 0x0B03 +#define GL_CURRENT_RASTER_COLOR 0x0B04 +#define GL_CURRENT_RASTER_INDEX 0x0B05 +#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 +#define GL_CURRENT_RASTER_POSITION 0x0B07 +#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 +#define GL_CURRENT_RASTER_DISTANCE 0x0B09 +#define GL_POINT_SMOOTH 0x0B10 +#define GL_POINT_SIZE 0x0B11 +#define GL_POINT_SIZE_RANGE 0x0B12 +#define GL_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_LINE_SMOOTH 0x0B20 +#define GL_LINE_WIDTH 0x0B21 +#define GL_LINE_WIDTH_RANGE 0x0B22 +#define GL_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_LINE_STIPPLE 0x0B24 +#define GL_LINE_STIPPLE_PATTERN 0x0B25 +#define GL_LINE_STIPPLE_REPEAT 0x0B26 +#define GL_LIST_MODE 0x0B30 +#define GL_MAX_LIST_NESTING 0x0B31 +#define GL_LIST_BASE 0x0B32 +#define GL_LIST_INDEX 0x0B33 +#define GL_POLYGON_MODE 0x0B40 +#define GL_POLYGON_SMOOTH 0x0B41 +#define GL_POLYGON_STIPPLE 0x0B42 +#define GL_EDGE_FLAG 0x0B43 +#define GL_CULL_FACE 0x0B44 +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_FRONT_FACE 0x0B46 +#define GL_LIGHTING 0x0B50 +#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 +#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 +#define GL_LIGHT_MODEL_AMBIENT 0x0B53 +#define GL_SHADE_MODEL 0x0B54 +#define GL_COLOR_MATERIAL_FACE 0x0B55 +#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 +#define GL_COLOR_MATERIAL 0x0B57 +#define GL_FOG 0x0B60 +#define GL_FOG_INDEX 0x0B61 +#define GL_FOG_DENSITY 0x0B62 +#define GL_FOG_START 0x0B63 +#define GL_FOG_END 0x0B64 +#define GL_FOG_MODE 0x0B65 +#define GL_FOG_COLOR 0x0B66 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_TEST 0x0B71 +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_ACCUM_CLEAR_VALUE 0x0B80 +#define GL_STENCIL_TEST 0x0B90 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_MATRIX_MODE 0x0BA0 +#define GL_NORMALIZE 0x0BA1 +#define GL_VIEWPORT 0x0BA2 +#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 +#define GL_PROJECTION_STACK_DEPTH 0x0BA4 +#define GL_TEXTURE_STACK_DEPTH 0x0BA5 +#define GL_MODELVIEW_MATRIX 0x0BA6 +#define GL_PROJECTION_MATRIX 0x0BA7 +#define GL_TEXTURE_MATRIX 0x0BA8 +#define GL_ATTRIB_STACK_DEPTH 0x0BB0 +#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 +#define GL_ALPHA_TEST 0x0BC0 +#define GL_ALPHA_TEST_FUNC 0x0BC1 +#define GL_ALPHA_TEST_REF 0x0BC2 +#define GL_DITHER 0x0BD0 +#define GL_BLEND_DST 0x0BE0 +#define GL_BLEND_SRC 0x0BE1 +#define GL_BLEND 0x0BE2 +#define GL_LOGIC_OP_MODE 0x0BF0 +#define GL_INDEX_LOGIC_OP 0x0BF1 +#define GL_COLOR_LOGIC_OP 0x0BF2 +#define GL_AUX_BUFFERS 0x0C00 +#define GL_DRAW_BUFFER 0x0C01 +#define GL_READ_BUFFER 0x0C02 +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_INDEX_CLEAR_VALUE 0x0C20 +#define GL_INDEX_WRITEMASK 0x0C21 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_INDEX_MODE 0x0C30 +#define GL_RGBA_MODE 0x0C31 +#define GL_DOUBLEBUFFER 0x0C32 +#define GL_STEREO 0x0C33 +#define GL_RENDER_MODE 0x0C40 +#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 +#define GL_POINT_SMOOTH_HINT 0x0C51 +#define GL_LINE_SMOOTH_HINT 0x0C52 +#define GL_POLYGON_SMOOTH_HINT 0x0C53 +#define GL_FOG_HINT 0x0C54 +#define GL_TEXTURE_GEN_S 0x0C60 +#define GL_TEXTURE_GEN_T 0x0C61 +#define GL_TEXTURE_GEN_R 0x0C62 +#define GL_TEXTURE_GEN_Q 0x0C63 +#define GL_PIXEL_MAP_I_TO_I 0x0C70 +#define GL_PIXEL_MAP_S_TO_S 0x0C71 +#define GL_PIXEL_MAP_I_TO_R 0x0C72 +#define GL_PIXEL_MAP_I_TO_G 0x0C73 +#define GL_PIXEL_MAP_I_TO_B 0x0C74 +#define GL_PIXEL_MAP_I_TO_A 0x0C75 +#define GL_PIXEL_MAP_R_TO_R 0x0C76 +#define GL_PIXEL_MAP_G_TO_G 0x0C77 +#define GL_PIXEL_MAP_B_TO_B 0x0C78 +#define GL_PIXEL_MAP_A_TO_A 0x0C79 +#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 +#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 +#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 +#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 +#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 +#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 +#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 +#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 +#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 +#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 +#define GL_UNPACK_SWAP_BYTES 0x0CF0 +#define GL_UNPACK_LSB_FIRST 0x0CF1 +#define GL_UNPACK_ROW_LENGTH 0x0CF2 +#define GL_UNPACK_SKIP_ROWS 0x0CF3 +#define GL_UNPACK_SKIP_PIXELS 0x0CF4 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_PACK_SWAP_BYTES 0x0D00 +#define GL_PACK_LSB_FIRST 0x0D01 +#define GL_PACK_ROW_LENGTH 0x0D02 +#define GL_PACK_SKIP_ROWS 0x0D03 +#define GL_PACK_SKIP_PIXELS 0x0D04 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_MAP_COLOR 0x0D10 +#define GL_MAP_STENCIL 0x0D11 +#define GL_INDEX_SHIFT 0x0D12 +#define GL_INDEX_OFFSET 0x0D13 +#define GL_RED_SCALE 0x0D14 +#define GL_RED_BIAS 0x0D15 +#define GL_ZOOM_X 0x0D16 +#define GL_ZOOM_Y 0x0D17 +#define GL_GREEN_SCALE 0x0D18 +#define GL_GREEN_BIAS 0x0D19 +#define GL_BLUE_SCALE 0x0D1A +#define GL_BLUE_BIAS 0x0D1B +#define GL_ALPHA_SCALE 0x0D1C +#define GL_ALPHA_BIAS 0x0D1D +#define GL_DEPTH_SCALE 0x0D1E +#define GL_DEPTH_BIAS 0x0D1F +#define GL_MAX_EVAL_ORDER 0x0D30 +#define GL_MAX_LIGHTS 0x0D31 +#define GL_MAX_CLIP_PLANES 0x0D32 +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 +#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 +#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 +#define GL_MAX_NAME_STACK_DEPTH 0x0D37 +#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 +#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_INDEX_BITS 0x0D51 +#define GL_RED_BITS 0x0D52 +#define GL_GREEN_BITS 0x0D53 +#define GL_BLUE_BITS 0x0D54 +#define GL_ALPHA_BITS 0x0D55 +#define GL_DEPTH_BITS 0x0D56 +#define GL_STENCIL_BITS 0x0D57 +#define GL_ACCUM_RED_BITS 0x0D58 +#define GL_ACCUM_GREEN_BITS 0x0D59 +#define GL_ACCUM_BLUE_BITS 0x0D5A +#define GL_ACCUM_ALPHA_BITS 0x0D5B +#define GL_NAME_STACK_DEPTH 0x0D70 +#define GL_AUTO_NORMAL 0x0D80 +#define GL_MAP1_COLOR_4 0x0D90 +#define GL_MAP1_INDEX 0x0D91 +#define GL_MAP1_NORMAL 0x0D92 +#define GL_MAP1_TEXTURE_COORD_1 0x0D93 +#define GL_MAP1_TEXTURE_COORD_2 0x0D94 +#define GL_MAP1_TEXTURE_COORD_3 0x0D95 +#define GL_MAP1_TEXTURE_COORD_4 0x0D96 +#define GL_MAP1_VERTEX_3 0x0D97 +#define GL_MAP1_VERTEX_4 0x0D98 +#define GL_MAP2_COLOR_4 0x0DB0 +#define GL_MAP2_INDEX 0x0DB1 +#define GL_MAP2_NORMAL 0x0DB2 +#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 +#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 +#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 +#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 +#define GL_MAP2_VERTEX_3 0x0DB7 +#define GL_MAP2_VERTEX_4 0x0DB8 +#define GL_MAP1_GRID_DOMAIN 0x0DD0 +#define GL_MAP1_GRID_SEGMENTS 0x0DD1 +#define GL_MAP2_GRID_DOMAIN 0x0DD2 +#define GL_MAP2_GRID_SEGMENTS 0x0DD3 +#define GL_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 +#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 +#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 +#define GL_SELECTION_BUFFER_POINTER 0x0DF3 +#define GL_SELECTION_BUFFER_SIZE 0x0DF4 +#define GL_TEXTURE_WIDTH 0x1000 +#define GL_TEXTURE_HEIGHT 0x1001 +#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 +#define GL_TEXTURE_BORDER_COLOR 0x1004 +#define GL_TEXTURE_BORDER 0x1005 +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 +#define GL_LIGHT0 0x4000 +#define GL_LIGHT1 0x4001 +#define GL_LIGHT2 0x4002 +#define GL_LIGHT3 0x4003 +#define GL_LIGHT4 0x4004 +#define GL_LIGHT5 0x4005 +#define GL_LIGHT6 0x4006 +#define GL_LIGHT7 0x4007 +#define GL_AMBIENT 0x1200 +#define GL_DIFFUSE 0x1201 +#define GL_SPECULAR 0x1202 +#define GL_POSITION 0x1203 +#define GL_SPOT_DIRECTION 0x1204 +#define GL_SPOT_EXPONENT 0x1205 +#define GL_SPOT_CUTOFF 0x1206 +#define GL_CONSTANT_ATTENUATION 0x1207 +#define GL_LINEAR_ATTENUATION 0x1208 +#define GL_QUADRATIC_ATTENUATION 0x1209 +#define GL_COMPILE 0x1300 +#define GL_COMPILE_AND_EXECUTE 0x1301 +#define GL_CLEAR 0x1500 +#define GL_AND 0x1501 +#define GL_AND_REVERSE 0x1502 +#define GL_COPY 0x1503 +#define GL_AND_INVERTED 0x1504 +#define GL_NOOP 0x1505 +#define GL_XOR 0x1506 +#define GL_OR 0x1507 +#define GL_NOR 0x1508 +#define GL_EQUIV 0x1509 +#define GL_INVERT 0x150A +#define GL_OR_REVERSE 0x150B +#define GL_COPY_INVERTED 0x150C +#define GL_OR_INVERTED 0x150D +#define GL_NAND 0x150E +#define GL_SET 0x150F +#define GL_EMISSION 0x1600 +#define GL_SHININESS 0x1601 +#define GL_AMBIENT_AND_DIFFUSE 0x1602 +#define GL_COLOR_INDEXES 0x1603 +#define GL_MODELVIEW 0x1700 +#define GL_PROJECTION 0x1701 +#define GL_TEXTURE 0x1702 +#define GL_COLOR 0x1800 +#define GL_DEPTH 0x1801 +#define GL_STENCIL 0x1802 +#define GL_COLOR_INDEX 0x1900 +#define GL_STENCIL_INDEX 0x1901 +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_RED 0x1903 +#define GL_GREEN 0x1904 +#define GL_BLUE 0x1905 +#define GL_ALPHA 0x1906 +#define GL_RGB 0x1907 +#define GL_RGBA 0x1908 +#define GL_LUMINANCE 0x1909 +#define GL_LUMINANCE_ALPHA 0x190A +#define GL_BITMAP 0x1A00 +#define GL_POINT 0x1B00 +#define GL_LINE 0x1B01 +#define GL_FILL 0x1B02 +#define GL_RENDER 0x1C00 +#define GL_FEEDBACK 0x1C01 +#define GL_SELECT 0x1C02 +#define GL_FLAT 0x1D00 +#define GL_SMOOTH 0x1D01 +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 +#define GL_S 0x2000 +#define GL_T 0x2001 +#define GL_R 0x2002 +#define GL_Q 0x2003 +#define GL_MODULATE 0x2100 +#define GL_DECAL 0x2101 +#define GL_TEXTURE_ENV_MODE 0x2200 +#define GL_TEXTURE_ENV_COLOR 0x2201 +#define GL_TEXTURE_ENV 0x2300 +#define GL_EYE_LINEAR 0x2400 +#define GL_OBJECT_LINEAR 0x2401 +#define GL_SPHERE_MAP 0x2402 +#define GL_TEXTURE_GEN_MODE 0x2500 +#define GL_OBJECT_PLANE 0x2501 +#define GL_EYE_PLANE 0x2502 +#define GL_NEAREST 0x2600 +#define GL_LINEAR 0x2601 +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 +#define GL_CLAMP 0x2900 +#define GL_REPEAT 0x2901 +#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 +#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 +#define GL_CLIENT_ALL_ATTRIB_BITS 0xffffffff +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +#define GL_POLYGON_OFFSET_POINT 0x2A01 +#define GL_POLYGON_OFFSET_LINE 0x2A02 +#define GL_POLYGON_OFFSET_FILL 0x8037 +#define GL_ALPHA4 0x803B +#define GL_ALPHA8 0x803C +#define GL_ALPHA12 0x803D +#define GL_ALPHA16 0x803E +#define GL_LUMINANCE4 0x803F +#define GL_LUMINANCE8 0x8040 +#define GL_LUMINANCE12 0x8041 +#define GL_LUMINANCE16 0x8042 +#define GL_LUMINANCE4_ALPHA4 0x8043 +#define GL_LUMINANCE6_ALPHA2 0x8044 +#define GL_LUMINANCE8_ALPHA8 0x8045 +#define GL_LUMINANCE12_ALPHA4 0x8046 +#define GL_LUMINANCE12_ALPHA12 0x8047 +#define GL_LUMINANCE16_ALPHA16 0x8048 +#define GL_INTENSITY 0x8049 +#define GL_INTENSITY4 0x804A +#define GL_INTENSITY8 0x804B +#define GL_INTENSITY12 0x804C +#define GL_INTENSITY16 0x804D +#define GL_R3_G3_B2 0x2A10 +#define GL_RGB4 0x804F +#define GL_RGB5 0x8050 +#define GL_RGB8 0x8051 +#define GL_RGB10 0x8052 +#define GL_RGB12 0x8053 +#define GL_RGB16 0x8054 +#define GL_RGBA2 0x8055 +#define GL_RGBA4 0x8056 +#define GL_RGB5_A1 0x8057 +#define GL_RGBA8 0x8058 +#define GL_RGB10_A2 0x8059 +#define GL_RGBA12 0x805A +#define GL_RGBA16 0x805B +#define GL_TEXTURE_RED_SIZE 0x805C +#define GL_TEXTURE_GREEN_SIZE 0x805D +#define GL_TEXTURE_BLUE_SIZE 0x805E +#define GL_TEXTURE_ALPHA_SIZE 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE 0x8061 +#define GL_PROXY_TEXTURE_1D 0x8063 +#define GL_PROXY_TEXTURE_2D 0x8064 +#define GL_TEXTURE_PRIORITY 0x8066 +#define GL_TEXTURE_RESIDENT 0x8067 +#define GL_TEXTURE_BINDING_1D 0x8068 +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_VERTEX_ARRAY 0x8074 +#define GL_NORMAL_ARRAY 0x8075 +#define GL_COLOR_ARRAY 0x8076 +#define GL_INDEX_ARRAY 0x8077 +#define GL_TEXTURE_COORD_ARRAY 0x8078 +#define GL_EDGE_FLAG_ARRAY 0x8079 +#define GL_VERTEX_ARRAY_SIZE 0x807A +#define GL_VERTEX_ARRAY_TYPE 0x807B +#define GL_VERTEX_ARRAY_STRIDE 0x807C +#define GL_NORMAL_ARRAY_TYPE 0x807E +#define GL_NORMAL_ARRAY_STRIDE 0x807F +#define GL_COLOR_ARRAY_SIZE 0x8081 +#define GL_COLOR_ARRAY_TYPE 0x8082 +#define GL_COLOR_ARRAY_STRIDE 0x8083 +#define GL_INDEX_ARRAY_TYPE 0x8085 +#define GL_INDEX_ARRAY_STRIDE 0x8086 +#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A +#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C +#define GL_VERTEX_ARRAY_POINTER 0x808E +#define GL_NORMAL_ARRAY_POINTER 0x808F +#define GL_COLOR_ARRAY_POINTER 0x8090 +#define GL_INDEX_ARRAY_POINTER 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 +#define GL_V2F 0x2A20 +#define GL_V3F 0x2A21 +#define GL_C4UB_V2F 0x2A22 +#define GL_C4UB_V3F 0x2A23 +#define GL_C3F_V3F 0x2A24 +#define GL_N3F_V3F 0x2A25 +#define GL_C4F_N3F_V3F 0x2A26 +#define GL_T2F_V3F 0x2A27 +#define GL_T4F_V4F 0x2A28 +#define GL_T2F_C4UB_V3F 0x2A29 +#define GL_T2F_C3F_V3F 0x2A2A +#define GL_T2F_N3F_V3F 0x2A2B +#define GL_T2F_C4F_N3F_V3F 0x2A2C +#define GL_T4F_C4F_N3F_V4F 0x2A2D +#define GL_LOGIC_OP GL_INDEX_LOGIC_OP +#define GL_TEXTURE_COMPONENTS GL_TEXTURE_INTERNAL_FORMAT +#define GL_COLOR_INDEX1_EXT 0x80E2 +#define GL_COLOR_INDEX2_EXT 0x80E3 +#define GL_COLOR_INDEX4_EXT 0x80E4 +#define GL_COLOR_INDEX8_EXT 0x80E5 +#define GL_COLOR_INDEX12_EXT 0x80E6 +#define GL_COLOR_INDEX16_EXT 0x80E7 + +GLAPI void GLAPIENTRY glAccum (GLenum op, GLfloat value); +GLAPI void GLAPIENTRY glAlphaFunc (GLenum func, GLclampf ref); +GLAPI GLboolean GLAPIENTRY glAreTexturesResident (GLsizei n, const GLuint *textures, GLboolean *residences); +GLAPI void GLAPIENTRY glArrayElement (GLint i); +GLAPI void GLAPIENTRY glBegin (GLenum mode); +GLAPI void GLAPIENTRY glBindTexture (GLenum target, GLuint texture); +GLAPI void GLAPIENTRY glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap); +GLAPI void GLAPIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); +GLAPI void GLAPIENTRY glCallList (GLuint list); +GLAPI void GLAPIENTRY glCallLists (GLsizei n, GLenum type, const GLvoid *lists); +GLAPI void GLAPIENTRY glClear (GLbitfield mask); +GLAPI void GLAPIENTRY glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI void GLAPIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +GLAPI void GLAPIENTRY glClearDepth (GLclampd depth); +GLAPI void GLAPIENTRY glClearIndex (GLfloat c); +GLAPI void GLAPIENTRY glClearStencil (GLint s); +GLAPI void GLAPIENTRY glClipPlane (GLenum plane, const GLdouble *equation); +GLAPI void GLAPIENTRY glColor3b (GLbyte red, GLbyte green, GLbyte blue); +GLAPI void GLAPIENTRY glColor3bv (const GLbyte *v); +GLAPI void GLAPIENTRY glColor3d (GLdouble red, GLdouble green, GLdouble blue); +GLAPI void GLAPIENTRY glColor3dv (const GLdouble *v); +GLAPI void GLAPIENTRY glColor3f (GLfloat red, GLfloat green, GLfloat blue); +GLAPI void GLAPIENTRY glColor3fv (const GLfloat *v); +GLAPI void GLAPIENTRY glColor3i (GLint red, GLint green, GLint blue); +GLAPI void GLAPIENTRY glColor3iv (const GLint *v); +GLAPI void GLAPIENTRY glColor3s (GLshort red, GLshort green, GLshort blue); +GLAPI void GLAPIENTRY glColor3sv (const GLshort *v); +GLAPI void GLAPIENTRY glColor3ub (GLubyte red, GLubyte green, GLubyte blue); +GLAPI void GLAPIENTRY glColor3ubv (const GLubyte *v); +GLAPI void GLAPIENTRY glColor3ui (GLuint red, GLuint green, GLuint blue); +GLAPI void GLAPIENTRY glColor3uiv (const GLuint *v); +GLAPI void GLAPIENTRY glColor3us (GLushort red, GLushort green, GLushort blue); +GLAPI void GLAPIENTRY glColor3usv (const GLushort *v); +GLAPI void GLAPIENTRY glColor4b (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); +GLAPI void GLAPIENTRY glColor4bv (const GLbyte *v); +GLAPI void GLAPIENTRY glColor4d (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); +GLAPI void GLAPIENTRY glColor4dv (const GLdouble *v); +GLAPI void GLAPIENTRY glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI void GLAPIENTRY glColor4fv (const GLfloat *v); +GLAPI void GLAPIENTRY glColor4i (GLint red, GLint green, GLint blue, GLint alpha); +GLAPI void GLAPIENTRY glColor4iv (const GLint *v); +GLAPI void GLAPIENTRY glColor4s (GLshort red, GLshort green, GLshort blue, GLshort alpha); +GLAPI void GLAPIENTRY glColor4sv (const GLshort *v); +GLAPI void GLAPIENTRY glColor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); +GLAPI void GLAPIENTRY glColor4ubv (const GLubyte *v); +GLAPI void GLAPIENTRY glColor4ui (GLuint red, GLuint green, GLuint blue, GLuint alpha); +GLAPI void GLAPIENTRY glColor4uiv (const GLuint *v); +GLAPI void GLAPIENTRY glColor4us (GLushort red, GLushort green, GLushort blue, GLushort alpha); +GLAPI void GLAPIENTRY glColor4usv (const GLushort *v); +GLAPI void GLAPIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +GLAPI void GLAPIENTRY glColorMaterial (GLenum face, GLenum mode); +GLAPI void GLAPIENTRY glColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void GLAPIENTRY glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); +GLAPI void GLAPIENTRY glCopyTexImage1D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void GLAPIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void GLAPIENTRY glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void GLAPIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void GLAPIENTRY glCullFace (GLenum mode); +GLAPI void GLAPIENTRY glDeleteLists (GLuint list, GLsizei range); +GLAPI void GLAPIENTRY glDeleteTextures (GLsizei n, const GLuint *textures); +GLAPI void GLAPIENTRY glDepthFunc (GLenum func); +GLAPI void GLAPIENTRY glDepthMask (GLboolean flag); +GLAPI void GLAPIENTRY glDepthRange (GLclampd zNear, GLclampd zFar); +GLAPI void GLAPIENTRY glDisable (GLenum cap); +GLAPI void GLAPIENTRY glDisableClientState (GLenum array); +GLAPI void GLAPIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); +GLAPI void GLAPIENTRY glDrawBuffer (GLenum mode); +GLAPI void GLAPIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); +GLAPI void GLAPIENTRY glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void GLAPIENTRY glEdgeFlag (GLboolean flag); +GLAPI void GLAPIENTRY glEdgeFlagPointer (GLsizei stride, const GLvoid *pointer); +GLAPI void GLAPIENTRY glEdgeFlagv (const GLboolean *flag); +GLAPI void GLAPIENTRY glEnable (GLenum cap); +GLAPI void GLAPIENTRY glEnableClientState (GLenum array); +GLAPI void GLAPIENTRY glEnd (void); +GLAPI void GLAPIENTRY glEndList (void); +GLAPI void GLAPIENTRY glEvalCoord1d (GLdouble u); +GLAPI void GLAPIENTRY glEvalCoord1dv (const GLdouble *u); +GLAPI void GLAPIENTRY glEvalCoord1f (GLfloat u); +GLAPI void GLAPIENTRY glEvalCoord1fv (const GLfloat *u); +GLAPI void GLAPIENTRY glEvalCoord2d (GLdouble u, GLdouble v); +GLAPI void GLAPIENTRY glEvalCoord2dv (const GLdouble *u); +GLAPI void GLAPIENTRY glEvalCoord2f (GLfloat u, GLfloat v); +GLAPI void GLAPIENTRY glEvalCoord2fv (const GLfloat *u); +GLAPI void GLAPIENTRY glEvalMesh1 (GLenum mode, GLint i1, GLint i2); +GLAPI void GLAPIENTRY glEvalMesh2 (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); +GLAPI void GLAPIENTRY glEvalPoint1 (GLint i); +GLAPI void GLAPIENTRY glEvalPoint2 (GLint i, GLint j); +GLAPI void GLAPIENTRY glFeedbackBuffer (GLsizei size, GLenum type, GLfloat *buffer); +GLAPI void GLAPIENTRY glFinish (void); +GLAPI void GLAPIENTRY glFlush (void); +GLAPI void GLAPIENTRY glFogf (GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glFogfv (GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glFogi (GLenum pname, GLint param); +GLAPI void GLAPIENTRY glFogiv (GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glFrontFace (GLenum mode); +GLAPI void GLAPIENTRY glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI GLuint GLAPIENTRY glGenLists (GLsizei range); +GLAPI void GLAPIENTRY glGenTextures (GLsizei n, GLuint *textures); +GLAPI void GLAPIENTRY glGetBooleanv (GLenum pname, GLboolean *params); +GLAPI void GLAPIENTRY glGetClipPlane (GLenum plane, GLdouble *equation); +GLAPI void GLAPIENTRY glGetDoublev (GLenum pname, GLdouble *params); +GLAPI GLenum GLAPIENTRY glGetError (void); +GLAPI void GLAPIENTRY glGetFloatv (GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetIntegerv (GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glGetLightfv (GLenum light, GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetLightiv (GLenum light, GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glGetMapdv (GLenum target, GLenum query, GLdouble *v); +GLAPI void GLAPIENTRY glGetMapfv (GLenum target, GLenum query, GLfloat *v); +GLAPI void GLAPIENTRY glGetMapiv (GLenum target, GLenum query, GLint *v); +GLAPI void GLAPIENTRY glGetMaterialfv (GLenum face, GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetMaterialiv (GLenum face, GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glGetPixelMapfv (GLenum map, GLfloat *values); +GLAPI void GLAPIENTRY glGetPixelMapuiv (GLenum map, GLuint *values); +GLAPI void GLAPIENTRY glGetPixelMapusv (GLenum map, GLushort *values); +GLAPI void GLAPIENTRY glGetPointerv (GLenum pname, GLvoid* *params); +GLAPI void GLAPIENTRY glGetPolygonStipple (GLubyte *mask); +GLAPI const GLubyte * GLAPIENTRY glGetString (GLenum name); +GLAPI void GLAPIENTRY glGetTexEnvfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetTexEnviv (GLenum target, GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glGetTexGendv (GLenum coord, GLenum pname, GLdouble *params); +GLAPI void GLAPIENTRY glGetTexGenfv (GLenum coord, GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetTexGeniv (GLenum coord, GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); +GLAPI void GLAPIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void GLAPIENTRY glHint (GLenum target, GLenum mode); +GLAPI void GLAPIENTRY glIndexMask (GLuint mask); +GLAPI void GLAPIENTRY glIndexPointer (GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void GLAPIENTRY glIndexd (GLdouble c); +GLAPI void GLAPIENTRY glIndexdv (const GLdouble *c); +GLAPI void GLAPIENTRY glIndexf (GLfloat c); +GLAPI void GLAPIENTRY glIndexfv (const GLfloat *c); +GLAPI void GLAPIENTRY glIndexi (GLint c); +GLAPI void GLAPIENTRY glIndexiv (const GLint *c); +GLAPI void GLAPIENTRY glIndexs (GLshort c); +GLAPI void GLAPIENTRY glIndexsv (const GLshort *c); +GLAPI void GLAPIENTRY glIndexub (GLubyte c); +GLAPI void GLAPIENTRY glIndexubv (const GLubyte *c); +GLAPI void GLAPIENTRY glInitNames (void); +GLAPI void GLAPIENTRY glInterleavedArrays (GLenum format, GLsizei stride, const GLvoid *pointer); +GLAPI GLboolean GLAPIENTRY glIsEnabled (GLenum cap); +GLAPI GLboolean GLAPIENTRY glIsList (GLuint list); +GLAPI GLboolean GLAPIENTRY glIsTexture (GLuint texture); +GLAPI void GLAPIENTRY glLightModelf (GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glLightModelfv (GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glLightModeli (GLenum pname, GLint param); +GLAPI void GLAPIENTRY glLightModeliv (GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glLightf (GLenum light, GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glLightfv (GLenum light, GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glLighti (GLenum light, GLenum pname, GLint param); +GLAPI void GLAPIENTRY glLightiv (GLenum light, GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glLineStipple (GLint factor, GLushort pattern); +GLAPI void GLAPIENTRY glLineWidth (GLfloat width); +GLAPI void GLAPIENTRY glListBase (GLuint base); +GLAPI void GLAPIENTRY glLoadIdentity (void); +GLAPI void GLAPIENTRY glLoadMatrixd (const GLdouble *m); +GLAPI void GLAPIENTRY glLoadMatrixf (const GLfloat *m); +GLAPI void GLAPIENTRY glLoadName (GLuint name); +GLAPI void GLAPIENTRY glLogicOp (GLenum opcode); +GLAPI void GLAPIENTRY glMap1d (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); +GLAPI void GLAPIENTRY glMap1f (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); +GLAPI void GLAPIENTRY glMap2d (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); +GLAPI void GLAPIENTRY glMap2f (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); +GLAPI void GLAPIENTRY glMapGrid1d (GLint un, GLdouble u1, GLdouble u2); +GLAPI void GLAPIENTRY glMapGrid1f (GLint un, GLfloat u1, GLfloat u2); +GLAPI void GLAPIENTRY glMapGrid2d (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); +GLAPI void GLAPIENTRY glMapGrid2f (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); +GLAPI void GLAPIENTRY glMaterialf (GLenum face, GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glMaterialfv (GLenum face, GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glMateriali (GLenum face, GLenum pname, GLint param); +GLAPI void GLAPIENTRY glMaterialiv (GLenum face, GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glMatrixMode (GLenum mode); +GLAPI void GLAPIENTRY glMultMatrixd (const GLdouble *m); +GLAPI void GLAPIENTRY glMultMatrixf (const GLfloat *m); +GLAPI void GLAPIENTRY glNewList (GLuint list, GLenum mode); +GLAPI void GLAPIENTRY glNormal3b (GLbyte nx, GLbyte ny, GLbyte nz); +GLAPI void GLAPIENTRY glNormal3bv (const GLbyte *v); +GLAPI void GLAPIENTRY glNormal3d (GLdouble nx, GLdouble ny, GLdouble nz); +GLAPI void GLAPIENTRY glNormal3dv (const GLdouble *v); +GLAPI void GLAPIENTRY glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz); +GLAPI void GLAPIENTRY glNormal3fv (const GLfloat *v); +GLAPI void GLAPIENTRY glNormal3i (GLint nx, GLint ny, GLint nz); +GLAPI void GLAPIENTRY glNormal3iv (const GLint *v); +GLAPI void GLAPIENTRY glNormal3s (GLshort nx, GLshort ny, GLshort nz); +GLAPI void GLAPIENTRY glNormal3sv (const GLshort *v); +GLAPI void GLAPIENTRY glNormalPointer (GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void GLAPIENTRY glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI void GLAPIENTRY glPassThrough (GLfloat token); +GLAPI void GLAPIENTRY glPixelMapfv (GLenum map, GLsizei mapsize, const GLfloat *values); +GLAPI void GLAPIENTRY glPixelMapuiv (GLenum map, GLsizei mapsize, const GLuint *values); +GLAPI void GLAPIENTRY glPixelMapusv (GLenum map, GLsizei mapsize, const GLushort *values); +GLAPI void GLAPIENTRY glPixelStoref (GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glPixelStorei (GLenum pname, GLint param); +GLAPI void GLAPIENTRY glPixelTransferf (GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glPixelTransferi (GLenum pname, GLint param); +GLAPI void GLAPIENTRY glPixelZoom (GLfloat xfactor, GLfloat yfactor); +GLAPI void GLAPIENTRY glPointSize (GLfloat size); +GLAPI void GLAPIENTRY glPolygonMode (GLenum face, GLenum mode); +GLAPI void GLAPIENTRY glPolygonOffset (GLfloat factor, GLfloat units); +GLAPI void GLAPIENTRY glPolygonStipple (const GLubyte *mask); +GLAPI void GLAPIENTRY glPopAttrib (void); +GLAPI void GLAPIENTRY glPopClientAttrib (void); +GLAPI void GLAPIENTRY glPopMatrix (void); +GLAPI void GLAPIENTRY glPopName (void); +GLAPI void GLAPIENTRY glPrioritizeTextures (GLsizei n, const GLuint *textures, const GLclampf *priorities); +GLAPI void GLAPIENTRY glPushAttrib (GLbitfield mask); +GLAPI void GLAPIENTRY glPushClientAttrib (GLbitfield mask); +GLAPI void GLAPIENTRY glPushMatrix (void); +GLAPI void GLAPIENTRY glPushName (GLuint name); +GLAPI void GLAPIENTRY glRasterPos2d (GLdouble x, GLdouble y); +GLAPI void GLAPIENTRY glRasterPos2dv (const GLdouble *v); +GLAPI void GLAPIENTRY glRasterPos2f (GLfloat x, GLfloat y); +GLAPI void GLAPIENTRY glRasterPos2fv (const GLfloat *v); +GLAPI void GLAPIENTRY glRasterPos2i (GLint x, GLint y); +GLAPI void GLAPIENTRY glRasterPos2iv (const GLint *v); +GLAPI void GLAPIENTRY glRasterPos2s (GLshort x, GLshort y); +GLAPI void GLAPIENTRY glRasterPos2sv (const GLshort *v); +GLAPI void GLAPIENTRY glRasterPos3d (GLdouble x, GLdouble y, GLdouble z); +GLAPI void GLAPIENTRY glRasterPos3dv (const GLdouble *v); +GLAPI void GLAPIENTRY glRasterPos3f (GLfloat x, GLfloat y, GLfloat z); +GLAPI void GLAPIENTRY glRasterPos3fv (const GLfloat *v); +GLAPI void GLAPIENTRY glRasterPos3i (GLint x, GLint y, GLint z); +GLAPI void GLAPIENTRY glRasterPos3iv (const GLint *v); +GLAPI void GLAPIENTRY glRasterPos3s (GLshort x, GLshort y, GLshort z); +GLAPI void GLAPIENTRY glRasterPos3sv (const GLshort *v); +GLAPI void GLAPIENTRY glRasterPos4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void GLAPIENTRY glRasterPos4dv (const GLdouble *v); +GLAPI void GLAPIENTRY glRasterPos4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void GLAPIENTRY glRasterPos4fv (const GLfloat *v); +GLAPI void GLAPIENTRY glRasterPos4i (GLint x, GLint y, GLint z, GLint w); +GLAPI void GLAPIENTRY glRasterPos4iv (const GLint *v); +GLAPI void GLAPIENTRY glRasterPos4s (GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void GLAPIENTRY glRasterPos4sv (const GLshort *v); +GLAPI void GLAPIENTRY glReadBuffer (GLenum mode); +GLAPI void GLAPIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); +GLAPI void GLAPIENTRY glRectd (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); +GLAPI void GLAPIENTRY glRectdv (const GLdouble *v1, const GLdouble *v2); +GLAPI void GLAPIENTRY glRectf (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); +GLAPI void GLAPIENTRY glRectfv (const GLfloat *v1, const GLfloat *v2); +GLAPI void GLAPIENTRY glRecti (GLint x1, GLint y1, GLint x2, GLint y2); +GLAPI void GLAPIENTRY glRectiv (const GLint *v1, const GLint *v2); +GLAPI void GLAPIENTRY glRects (GLshort x1, GLshort y1, GLshort x2, GLshort y2); +GLAPI void GLAPIENTRY glRectsv (const GLshort *v1, const GLshort *v2); +GLAPI GLint GLAPIENTRY glRenderMode (GLenum mode); +GLAPI void GLAPIENTRY glRotated (GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +GLAPI void GLAPIENTRY glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +GLAPI void GLAPIENTRY glScaled (GLdouble x, GLdouble y, GLdouble z); +GLAPI void GLAPIENTRY glScalef (GLfloat x, GLfloat y, GLfloat z); +GLAPI void GLAPIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void GLAPIENTRY glSelectBuffer (GLsizei size, GLuint *buffer); +GLAPI void GLAPIENTRY glShadeModel (GLenum mode); +GLAPI void GLAPIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); +GLAPI void GLAPIENTRY glStencilMask (GLuint mask); +GLAPI void GLAPIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); +GLAPI void GLAPIENTRY glTexCoord1d (GLdouble s); +GLAPI void GLAPIENTRY glTexCoord1dv (const GLdouble *v); +GLAPI void GLAPIENTRY glTexCoord1f (GLfloat s); +GLAPI void GLAPIENTRY glTexCoord1fv (const GLfloat *v); +GLAPI void GLAPIENTRY glTexCoord1i (GLint s); +GLAPI void GLAPIENTRY glTexCoord1iv (const GLint *v); +GLAPI void GLAPIENTRY glTexCoord1s (GLshort s); +GLAPI void GLAPIENTRY glTexCoord1sv (const GLshort *v); +GLAPI void GLAPIENTRY glTexCoord2d (GLdouble s, GLdouble t); +GLAPI void GLAPIENTRY glTexCoord2dv (const GLdouble *v); +GLAPI void GLAPIENTRY glTexCoord2f (GLfloat s, GLfloat t); +GLAPI void GLAPIENTRY glTexCoord2fv (const GLfloat *v); +GLAPI void GLAPIENTRY glTexCoord2i (GLint s, GLint t); +GLAPI void GLAPIENTRY glTexCoord2iv (const GLint *v); +GLAPI void GLAPIENTRY glTexCoord2s (GLshort s, GLshort t); +GLAPI void GLAPIENTRY glTexCoord2sv (const GLshort *v); +GLAPI void GLAPIENTRY glTexCoord3d (GLdouble s, GLdouble t, GLdouble r); +GLAPI void GLAPIENTRY glTexCoord3dv (const GLdouble *v); +GLAPI void GLAPIENTRY glTexCoord3f (GLfloat s, GLfloat t, GLfloat r); +GLAPI void GLAPIENTRY glTexCoord3fv (const GLfloat *v); +GLAPI void GLAPIENTRY glTexCoord3i (GLint s, GLint t, GLint r); +GLAPI void GLAPIENTRY glTexCoord3iv (const GLint *v); +GLAPI void GLAPIENTRY glTexCoord3s (GLshort s, GLshort t, GLshort r); +GLAPI void GLAPIENTRY glTexCoord3sv (const GLshort *v); +GLAPI void GLAPIENTRY glTexCoord4d (GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void GLAPIENTRY glTexCoord4dv (const GLdouble *v); +GLAPI void GLAPIENTRY glTexCoord4f (GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void GLAPIENTRY glTexCoord4fv (const GLfloat *v); +GLAPI void GLAPIENTRY glTexCoord4i (GLint s, GLint t, GLint r, GLint q); +GLAPI void GLAPIENTRY glTexCoord4iv (const GLint *v); +GLAPI void GLAPIENTRY glTexCoord4s (GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void GLAPIENTRY glTexCoord4sv (const GLshort *v); +GLAPI void GLAPIENTRY glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void GLAPIENTRY glTexEnvf (GLenum target, GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glTexEnvfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glTexEnvi (GLenum target, GLenum pname, GLint param); +GLAPI void GLAPIENTRY glTexEnviv (GLenum target, GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glTexGend (GLenum coord, GLenum pname, GLdouble param); +GLAPI void GLAPIENTRY glTexGendv (GLenum coord, GLenum pname, const GLdouble *params); +GLAPI void GLAPIENTRY glTexGenf (GLenum coord, GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glTexGenfv (GLenum coord, GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glTexGeni (GLenum coord, GLenum pname, GLint param); +GLAPI void GLAPIENTRY glTexGeniv (GLenum coord, GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void GLAPIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void GLAPIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); +GLAPI void GLAPIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void GLAPIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); +GLAPI void GLAPIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params); +GLAPI void GLAPIENTRY glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void GLAPIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); +GLAPI void GLAPIENTRY glTranslated (GLdouble x, GLdouble y, GLdouble z); +GLAPI void GLAPIENTRY glTranslatef (GLfloat x, GLfloat y, GLfloat z); +GLAPI void GLAPIENTRY glVertex2d (GLdouble x, GLdouble y); +GLAPI void GLAPIENTRY glVertex2dv (const GLdouble *v); +GLAPI void GLAPIENTRY glVertex2f (GLfloat x, GLfloat y); +GLAPI void GLAPIENTRY glVertex2fv (const GLfloat *v); +GLAPI void GLAPIENTRY glVertex2i (GLint x, GLint y); +GLAPI void GLAPIENTRY glVertex2iv (const GLint *v); +GLAPI void GLAPIENTRY glVertex2s (GLshort x, GLshort y); +GLAPI void GLAPIENTRY glVertex2sv (const GLshort *v); +GLAPI void GLAPIENTRY glVertex3d (GLdouble x, GLdouble y, GLdouble z); +GLAPI void GLAPIENTRY glVertex3dv (const GLdouble *v); +GLAPI void GLAPIENTRY glVertex3f (GLfloat x, GLfloat y, GLfloat z); +GLAPI void GLAPIENTRY glVertex3fv (const GLfloat *v); +GLAPI void GLAPIENTRY glVertex3i (GLint x, GLint y, GLint z); +GLAPI void GLAPIENTRY glVertex3iv (const GLint *v); +GLAPI void GLAPIENTRY glVertex3s (GLshort x, GLshort y, GLshort z); +GLAPI void GLAPIENTRY glVertex3sv (const GLshort *v); +GLAPI void GLAPIENTRY glVertex4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void GLAPIENTRY glVertex4dv (const GLdouble *v); +GLAPI void GLAPIENTRY glVertex4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void GLAPIENTRY glVertex4fv (const GLfloat *v); +GLAPI void GLAPIENTRY glVertex4i (GLint x, GLint y, GLint z, GLint w); +GLAPI void GLAPIENTRY glVertex4iv (const GLint *v); +GLAPI void GLAPIENTRY glVertex4s (GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void GLAPIENTRY glVertex4sv (const GLshort *v); +GLAPI void GLAPIENTRY glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void GLAPIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); + +#define GLEW_VERSION_1_1 GLEW_GET_VAR(__GLEW_VERSION_1_1) + +#endif /* GL_VERSION_1_1 */ + +/* ---------------------------------- GLU ---------------------------------- */ + +/* this is where we can safely include GLU */ +#if defined(__APPLE__) && defined(__MACH__) +#include +#else +#include +#endif + +/* ----------------------------- GL_VERSION_1_2 ---------------------------- */ + +#ifndef GL_VERSION_1_2 +#define GL_VERSION_1_2 1 + +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_RESCALE_NORMAL 0x803A +#define GL_TEXTURE_BINDING_3D 0x806A +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_TEXTURE_3D 0x806F +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E + +typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); +typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); + +#define glCopyTexSubImage3D GLEW_GET_FUN(__glewCopyTexSubImage3D) +#define glDrawRangeElements GLEW_GET_FUN(__glewDrawRangeElements) +#define glTexImage3D GLEW_GET_FUN(__glewTexImage3D) +#define glTexSubImage3D GLEW_GET_FUN(__glewTexSubImage3D) + +#define GLEW_VERSION_1_2 GLEW_GET_VAR(__GLEW_VERSION_1_2) + +#endif /* GL_VERSION_1_2 */ + +/* ----------------------------- GL_VERSION_1_3 ---------------------------- */ + +#ifndef GL_VERSION_1_3 +#define GL_VERSION_1_3 1 + +#define GL_MULTISAMPLE 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_CLAMP_TO_BORDER 0x812D +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +#define GL_SUBTRACT 0x84E7 +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_INTENSITY 0x84EC +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_NORMAL_MAP 0x8511 +#define GL_REFLECTION_MAP 0x8512 +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +#define GL_COMBINE 0x8570 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMBINE_ALPHA 0x8572 +#define GL_RGB_SCALE 0x8573 +#define GL_ADD_SIGNED 0x8574 +#define GL_INTERPOLATE 0x8575 +#define GL_CONSTANT 0x8576 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PREVIOUS 0x8578 +#define GL_SOURCE0_RGB 0x8580 +#define GL_SOURCE1_RGB 0x8581 +#define GL_SOURCE2_RGB 0x8582 +#define GL_SOURCE0_ALPHA 0x8588 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE2_ALPHA 0x858A +#define GL_OPERAND0_RGB 0x8590 +#define GL_OPERAND1_RGB 0x8591 +#define GL_OPERAND2_RGB 0x8592 +#define GL_OPERAND0_ALPHA 0x8598 +#define GL_OPERAND1_ALPHA 0x8599 +#define GL_OPERAND2_ALPHA 0x859A +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGBA 0x86AF +#define GL_MULTISAMPLE_BIT 0x20000000 + +typedef void (GLAPIENTRY * PFNGLACTIVETEXTUREPROC) (GLenum texture); +typedef void (GLAPIENTRY * PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint lod, GLvoid *img); +typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble m[16]); +typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat m[16]); +typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble m[16]); +typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat m[16]); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); + +#define glActiveTexture GLEW_GET_FUN(__glewActiveTexture) +#define glClientActiveTexture GLEW_GET_FUN(__glewClientActiveTexture) +#define glCompressedTexImage1D GLEW_GET_FUN(__glewCompressedTexImage1D) +#define glCompressedTexImage2D GLEW_GET_FUN(__glewCompressedTexImage2D) +#define glCompressedTexImage3D GLEW_GET_FUN(__glewCompressedTexImage3D) +#define glCompressedTexSubImage1D GLEW_GET_FUN(__glewCompressedTexSubImage1D) +#define glCompressedTexSubImage2D GLEW_GET_FUN(__glewCompressedTexSubImage2D) +#define glCompressedTexSubImage3D GLEW_GET_FUN(__glewCompressedTexSubImage3D) +#define glGetCompressedTexImage GLEW_GET_FUN(__glewGetCompressedTexImage) +#define glLoadTransposeMatrixd GLEW_GET_FUN(__glewLoadTransposeMatrixd) +#define glLoadTransposeMatrixf GLEW_GET_FUN(__glewLoadTransposeMatrixf) +#define glMultTransposeMatrixd GLEW_GET_FUN(__glewMultTransposeMatrixd) +#define glMultTransposeMatrixf GLEW_GET_FUN(__glewMultTransposeMatrixf) +#define glMultiTexCoord1d GLEW_GET_FUN(__glewMultiTexCoord1d) +#define glMultiTexCoord1dv GLEW_GET_FUN(__glewMultiTexCoord1dv) +#define glMultiTexCoord1f GLEW_GET_FUN(__glewMultiTexCoord1f) +#define glMultiTexCoord1fv GLEW_GET_FUN(__glewMultiTexCoord1fv) +#define glMultiTexCoord1i GLEW_GET_FUN(__glewMultiTexCoord1i) +#define glMultiTexCoord1iv GLEW_GET_FUN(__glewMultiTexCoord1iv) +#define glMultiTexCoord1s GLEW_GET_FUN(__glewMultiTexCoord1s) +#define glMultiTexCoord1sv GLEW_GET_FUN(__glewMultiTexCoord1sv) +#define glMultiTexCoord2d GLEW_GET_FUN(__glewMultiTexCoord2d) +#define glMultiTexCoord2dv GLEW_GET_FUN(__glewMultiTexCoord2dv) +#define glMultiTexCoord2f GLEW_GET_FUN(__glewMultiTexCoord2f) +#define glMultiTexCoord2fv GLEW_GET_FUN(__glewMultiTexCoord2fv) +#define glMultiTexCoord2i GLEW_GET_FUN(__glewMultiTexCoord2i) +#define glMultiTexCoord2iv GLEW_GET_FUN(__glewMultiTexCoord2iv) +#define glMultiTexCoord2s GLEW_GET_FUN(__glewMultiTexCoord2s) +#define glMultiTexCoord2sv GLEW_GET_FUN(__glewMultiTexCoord2sv) +#define glMultiTexCoord3d GLEW_GET_FUN(__glewMultiTexCoord3d) +#define glMultiTexCoord3dv GLEW_GET_FUN(__glewMultiTexCoord3dv) +#define glMultiTexCoord3f GLEW_GET_FUN(__glewMultiTexCoord3f) +#define glMultiTexCoord3fv GLEW_GET_FUN(__glewMultiTexCoord3fv) +#define glMultiTexCoord3i GLEW_GET_FUN(__glewMultiTexCoord3i) +#define glMultiTexCoord3iv GLEW_GET_FUN(__glewMultiTexCoord3iv) +#define glMultiTexCoord3s GLEW_GET_FUN(__glewMultiTexCoord3s) +#define glMultiTexCoord3sv GLEW_GET_FUN(__glewMultiTexCoord3sv) +#define glMultiTexCoord4d GLEW_GET_FUN(__glewMultiTexCoord4d) +#define glMultiTexCoord4dv GLEW_GET_FUN(__glewMultiTexCoord4dv) +#define glMultiTexCoord4f GLEW_GET_FUN(__glewMultiTexCoord4f) +#define glMultiTexCoord4fv GLEW_GET_FUN(__glewMultiTexCoord4fv) +#define glMultiTexCoord4i GLEW_GET_FUN(__glewMultiTexCoord4i) +#define glMultiTexCoord4iv GLEW_GET_FUN(__glewMultiTexCoord4iv) +#define glMultiTexCoord4s GLEW_GET_FUN(__glewMultiTexCoord4s) +#define glMultiTexCoord4sv GLEW_GET_FUN(__glewMultiTexCoord4sv) +#define glSampleCoverage GLEW_GET_FUN(__glewSampleCoverage) + +#define GLEW_VERSION_1_3 GLEW_GET_VAR(__GLEW_VERSION_1_3) + +#endif /* GL_VERSION_1_3 */ + +/* ----------------------------- GL_VERSION_1_4 ---------------------------- */ + +#ifndef GL_VERSION_1_4 +#define GL_VERSION_1_4 1 + +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_POINT_SIZE_MIN 0x8126 +#define GL_POINT_SIZE_MAX 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 +#define GL_POINT_DISTANCE_ATTENUATION 0x8129 +#define GL_GENERATE_MIPMAP 0x8191 +#define GL_GENERATE_MIPMAP_HINT 0x8192 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT24 0x81A6 +#define GL_DEPTH_COMPONENT32 0x81A7 +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_FOG_COORDINATE_SOURCE 0x8450 +#define GL_FOG_COORDINATE 0x8451 +#define GL_FRAGMENT_DEPTH 0x8452 +#define GL_CURRENT_FOG_COORDINATE 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 +#define GL_FOG_COORDINATE_ARRAY 0x8457 +#define GL_COLOR_SUM 0x8458 +#define GL_CURRENT_SECONDARY_COLOR 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D +#define GL_SECONDARY_COLOR_ARRAY 0x845E +#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD +#define GL_TEXTURE_FILTER_CONTROL 0x8500 +#define GL_TEXTURE_LOD_BIAS 0x8501 +#define GL_INCR_WRAP 0x8507 +#define GL_DECR_WRAP 0x8508 +#define GL_TEXTURE_DEPTH_SIZE 0x884A +#define GL_DEPTH_TEXTURE_MODE 0x884B +#define GL_TEXTURE_COMPARE_MODE 0x884C +#define GL_TEXTURE_COMPARE_FUNC 0x884D +#define GL_COMPARE_R_TO_TEXTURE 0x884E + +typedef void (GLAPIENTRY * PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONPROC) (GLenum mode); +typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (GLAPIENTRY * PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); +typedef void (GLAPIENTRY * PFNGLFOGCOORDDPROC) (GLdouble coord); +typedef void (GLAPIENTRY * PFNGLFOGCOORDDVPROC) (const GLdouble *coord); +typedef void (GLAPIENTRY * PFNGLFOGCOORDFPROC) (GLfloat coord); +typedef void (GLAPIENTRY * PFNGLFOGCOORDFVPROC) (const GLfloat *coord); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount); +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFVPROC) (GLenum pname, GLfloat *params); +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERIVPROC) (GLenum pname, GLint *params); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DVPROC) (const GLdouble *p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FVPROC) (const GLfloat *p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IVPROC) (const GLint *p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SVPROC) (const GLshort *p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DVPROC) (const GLdouble *p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FVPROC) (const GLfloat *p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IVPROC) (const GLint *p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVPROC) (const GLshort *p); + +#define glBlendColor GLEW_GET_FUN(__glewBlendColor) +#define glBlendEquation GLEW_GET_FUN(__glewBlendEquation) +#define glBlendFuncSeparate GLEW_GET_FUN(__glewBlendFuncSeparate) +#define glFogCoordPointer GLEW_GET_FUN(__glewFogCoordPointer) +#define glFogCoordd GLEW_GET_FUN(__glewFogCoordd) +#define glFogCoorddv GLEW_GET_FUN(__glewFogCoorddv) +#define glFogCoordf GLEW_GET_FUN(__glewFogCoordf) +#define glFogCoordfv GLEW_GET_FUN(__glewFogCoordfv) +#define glMultiDrawArrays GLEW_GET_FUN(__glewMultiDrawArrays) +#define glMultiDrawElements GLEW_GET_FUN(__glewMultiDrawElements) +#define glPointParameterf GLEW_GET_FUN(__glewPointParameterf) +#define glPointParameterfv GLEW_GET_FUN(__glewPointParameterfv) +#define glPointParameteri GLEW_GET_FUN(__glewPointParameteri) +#define glPointParameteriv GLEW_GET_FUN(__glewPointParameteriv) +#define glSecondaryColor3b GLEW_GET_FUN(__glewSecondaryColor3b) +#define glSecondaryColor3bv GLEW_GET_FUN(__glewSecondaryColor3bv) +#define glSecondaryColor3d GLEW_GET_FUN(__glewSecondaryColor3d) +#define glSecondaryColor3dv GLEW_GET_FUN(__glewSecondaryColor3dv) +#define glSecondaryColor3f GLEW_GET_FUN(__glewSecondaryColor3f) +#define glSecondaryColor3fv GLEW_GET_FUN(__glewSecondaryColor3fv) +#define glSecondaryColor3i GLEW_GET_FUN(__glewSecondaryColor3i) +#define glSecondaryColor3iv GLEW_GET_FUN(__glewSecondaryColor3iv) +#define glSecondaryColor3s GLEW_GET_FUN(__glewSecondaryColor3s) +#define glSecondaryColor3sv GLEW_GET_FUN(__glewSecondaryColor3sv) +#define glSecondaryColor3ub GLEW_GET_FUN(__glewSecondaryColor3ub) +#define glSecondaryColor3ubv GLEW_GET_FUN(__glewSecondaryColor3ubv) +#define glSecondaryColor3ui GLEW_GET_FUN(__glewSecondaryColor3ui) +#define glSecondaryColor3uiv GLEW_GET_FUN(__glewSecondaryColor3uiv) +#define glSecondaryColor3us GLEW_GET_FUN(__glewSecondaryColor3us) +#define glSecondaryColor3usv GLEW_GET_FUN(__glewSecondaryColor3usv) +#define glSecondaryColorPointer GLEW_GET_FUN(__glewSecondaryColorPointer) +#define glWindowPos2d GLEW_GET_FUN(__glewWindowPos2d) +#define glWindowPos2dv GLEW_GET_FUN(__glewWindowPos2dv) +#define glWindowPos2f GLEW_GET_FUN(__glewWindowPos2f) +#define glWindowPos2fv GLEW_GET_FUN(__glewWindowPos2fv) +#define glWindowPos2i GLEW_GET_FUN(__glewWindowPos2i) +#define glWindowPos2iv GLEW_GET_FUN(__glewWindowPos2iv) +#define glWindowPos2s GLEW_GET_FUN(__glewWindowPos2s) +#define glWindowPos2sv GLEW_GET_FUN(__glewWindowPos2sv) +#define glWindowPos3d GLEW_GET_FUN(__glewWindowPos3d) +#define glWindowPos3dv GLEW_GET_FUN(__glewWindowPos3dv) +#define glWindowPos3f GLEW_GET_FUN(__glewWindowPos3f) +#define glWindowPos3fv GLEW_GET_FUN(__glewWindowPos3fv) +#define glWindowPos3i GLEW_GET_FUN(__glewWindowPos3i) +#define glWindowPos3iv GLEW_GET_FUN(__glewWindowPos3iv) +#define glWindowPos3s GLEW_GET_FUN(__glewWindowPos3s) +#define glWindowPos3sv GLEW_GET_FUN(__glewWindowPos3sv) + +#define GLEW_VERSION_1_4 GLEW_GET_VAR(__GLEW_VERSION_1_4) + +#endif /* GL_VERSION_1_4 */ + +/* ----------------------------- GL_VERSION_1_5 ---------------------------- */ + +#ifndef GL_VERSION_1_5 +#define GL_VERSION_1_5 1 + +#define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE +#define GL_FOG_COORD GL_FOG_COORDINATE +#define GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY +#define GL_SRC0_RGB GL_SOURCE0_RGB +#define GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER +#define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE +#define GL_SRC1_ALPHA GL_SOURCE1_ALPHA +#define GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE +#define GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE +#define GL_SRC0_ALPHA GL_SOURCE0_ALPHA +#define GL_SRC1_RGB GL_SOURCE1_RGB +#define GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING +#define GL_SRC2_ALPHA GL_SOURCE2_ALPHA +#define GL_SRC2_RGB GL_SOURCE2_RGB +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_USAGE 0x8765 +#define GL_QUERY_COUNTER_BITS 0x8864 +#define GL_CURRENT_QUERY 0x8865 +#define GL_QUERY_RESULT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE 0x8867 +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 +#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F +#define GL_READ_ONLY 0x88B8 +#define GL_WRITE_ONLY 0x88B9 +#define GL_READ_WRITE 0x88BA +#define GL_BUFFER_ACCESS 0x88BB +#define GL_BUFFER_MAPPED 0x88BC +#define GL_BUFFER_MAP_POINTER 0x88BD +#define GL_STREAM_DRAW 0x88E0 +#define GL_STREAM_READ 0x88E1 +#define GL_STREAM_COPY 0x88E2 +#define GL_STATIC_DRAW 0x88E4 +#define GL_STATIC_READ 0x88E5 +#define GL_STATIC_COPY 0x88E6 +#define GL_DYNAMIC_DRAW 0x88E8 +#define GL_DYNAMIC_READ 0x88E9 +#define GL_DYNAMIC_COPY 0x88EA +#define GL_SAMPLES_PASSED 0x8914 + +typedef ptrdiff_t GLsizeiptr; +typedef ptrdiff_t GLintptr; + +typedef void (GLAPIENTRY * PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); +typedef void (GLAPIENTRY * PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); +typedef void (GLAPIENTRY * PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); +typedef void (GLAPIENTRY * PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); +typedef void (GLAPIENTRY * PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint* buffers); +typedef void (GLAPIENTRY * PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint* ids); +typedef void (GLAPIENTRY * PFNGLENDQUERYPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLGENBUFFERSPROC) (GLsizei n, GLuint* buffers); +typedef void (GLAPIENTRY * PFNGLGENQUERIESPROC) (GLsizei n, GLuint* ids); +typedef void (GLAPIENTRY * PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid** params); +typedef void (GLAPIENTRY * PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); +typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint* params); +typedef void (GLAPIENTRY * PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint* params); +typedef GLboolean (GLAPIENTRY * PFNGLISBUFFERPROC) (GLuint buffer); +typedef GLboolean (GLAPIENTRY * PFNGLISQUERYPROC) (GLuint id); +typedef GLvoid* (GLAPIENTRY * PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); +typedef GLboolean (GLAPIENTRY * PFNGLUNMAPBUFFERPROC) (GLenum target); + +#define glBeginQuery GLEW_GET_FUN(__glewBeginQuery) +#define glBindBuffer GLEW_GET_FUN(__glewBindBuffer) +#define glBufferData GLEW_GET_FUN(__glewBufferData) +#define glBufferSubData GLEW_GET_FUN(__glewBufferSubData) +#define glDeleteBuffers GLEW_GET_FUN(__glewDeleteBuffers) +#define glDeleteQueries GLEW_GET_FUN(__glewDeleteQueries) +#define glEndQuery GLEW_GET_FUN(__glewEndQuery) +#define glGenBuffers GLEW_GET_FUN(__glewGenBuffers) +#define glGenQueries GLEW_GET_FUN(__glewGenQueries) +#define glGetBufferParameteriv GLEW_GET_FUN(__glewGetBufferParameteriv) +#define glGetBufferPointerv GLEW_GET_FUN(__glewGetBufferPointerv) +#define glGetBufferSubData GLEW_GET_FUN(__glewGetBufferSubData) +#define glGetQueryObjectiv GLEW_GET_FUN(__glewGetQueryObjectiv) +#define glGetQueryObjectuiv GLEW_GET_FUN(__glewGetQueryObjectuiv) +#define glGetQueryiv GLEW_GET_FUN(__glewGetQueryiv) +#define glIsBuffer GLEW_GET_FUN(__glewIsBuffer) +#define glIsQuery GLEW_GET_FUN(__glewIsQuery) +#define glMapBuffer GLEW_GET_FUN(__glewMapBuffer) +#define glUnmapBuffer GLEW_GET_FUN(__glewUnmapBuffer) + +#define GLEW_VERSION_1_5 GLEW_GET_VAR(__GLEW_VERSION_1_5) + +#endif /* GL_VERSION_1_5 */ + +/* ----------------------------- GL_VERSION_2_0 ---------------------------- */ + +#ifndef GL_VERSION_2_0 +#define GL_VERSION_2_0 1 + +#define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_MAX_DRAW_BUFFERS 0x8824 +#define GL_DRAW_BUFFER0 0x8825 +#define GL_DRAW_BUFFER1 0x8826 +#define GL_DRAW_BUFFER2 0x8827 +#define GL_DRAW_BUFFER3 0x8828 +#define GL_DRAW_BUFFER4 0x8829 +#define GL_DRAW_BUFFER5 0x882A +#define GL_DRAW_BUFFER6 0x882B +#define GL_DRAW_BUFFER7 0x882C +#define GL_DRAW_BUFFER8 0x882D +#define GL_DRAW_BUFFER9 0x882E +#define GL_DRAW_BUFFER10 0x882F +#define GL_DRAW_BUFFER11 0x8830 +#define GL_DRAW_BUFFER12 0x8831 +#define GL_DRAW_BUFFER13 0x8832 +#define GL_DRAW_BUFFER14 0x8833 +#define GL_DRAW_BUFFER15 0x8834 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_POINT_SPRITE 0x8861 +#define GL_COORD_REPLACE 0x8862 +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_MAX_TEXTURE_COORDS 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A +#define GL_MAX_VARYING_FLOATS 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_SHADER_TYPE 0x8B4F +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_DELETE_STATUS 0x8B80 +#define GL_COMPILE_STATUS 0x8B81 +#define GL_LINK_STATUS 0x8B82 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 +#define GL_LOWER_LEFT 0x8CA1 +#define GL_UPPER_LEFT 0x8CA2 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 + +typedef char GLchar; + +typedef void (GLAPIENTRY * PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (GLAPIENTRY * PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar* name); +typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum, GLenum); +typedef void (GLAPIENTRY * PFNGLCOMPILESHADERPROC) (GLuint shader); +typedef GLuint (GLAPIENTRY * PFNGLCREATEPROGRAMPROC) (void); +typedef GLuint (GLAPIENTRY * PFNGLCREATESHADERPROC) (GLenum type); +typedef void (GLAPIENTRY * PFNGLDELETEPROGRAMPROC) (GLuint program); +typedef void (GLAPIENTRY * PFNGLDELETESHADERPROC) (GLuint shader); +typedef void (GLAPIENTRY * PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (GLAPIENTRY * PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint); +typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum* bufs); +typedef void (GLAPIENTRY * PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint); +typedef void (GLAPIENTRY * PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei maxLength, GLsizei* length, GLint* size, GLenum* type, GLchar* name); +typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei maxLength, GLsizei* length, GLint* size, GLenum* type, GLchar* name); +typedef void (GLAPIENTRY * PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei* count, GLuint* shaders); +typedef GLint (GLAPIENTRY * PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar* name); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint* param); +typedef void (GLAPIENTRY * PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); +typedef void (GLAPIENTRY * PFNGLGETSHADERSOURCEPROC) (GLint obj, GLsizei maxLength, GLsizei* length, GLchar* source); +typedef void (GLAPIENTRY * PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint* param); +typedef GLint (GLAPIENTRY * PFNGLGETUNIFORMLOCATIONPROC) (GLint programObj, const GLchar* name); +typedef void (GLAPIENTRY * PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint, GLenum, GLvoid*); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBDVPROC) (GLuint, GLenum, GLdouble*); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBFVPROC) (GLuint, GLenum, GLfloat*); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIVPROC) (GLuint, GLenum, GLint*); +typedef GLboolean (GLAPIENTRY * PFNGLISPROGRAMPROC) (GLuint program); +typedef GLboolean (GLAPIENTRY * PFNGLISSHADERPROC) (GLuint shader); +typedef void (GLAPIENTRY * PFNGLLINKPROGRAMPROC) (GLuint program); +typedef void (GLAPIENTRY * PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar** strings, const GLint* lengths); +typedef void (GLAPIENTRY * PFNGLSTENCILFUNCSEPARATEPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +typedef void (GLAPIENTRY * PFNGLSTENCILMASKSEPARATEPROC) (GLenum, GLuint); +typedef void (GLAPIENTRY * PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (GLAPIENTRY * PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); +typedef void (GLAPIENTRY * PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM1IPROC) (GLint location, GLint v0); +typedef void (GLAPIENTRY * PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (GLAPIENTRY * PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); +typedef void (GLAPIENTRY * PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (GLAPIENTRY * PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (GLAPIENTRY * PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (GLAPIENTRY * PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (GLAPIENTRY * PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint* value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUSEPROGRAMPROC) (GLuint program); +typedef void (GLAPIENTRY * PFNGLVALIDATEPROGRAMPROC) (GLuint program); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* pointer); + +#define glAttachShader GLEW_GET_FUN(__glewAttachShader) +#define glBindAttribLocation GLEW_GET_FUN(__glewBindAttribLocation) +#define glBlendEquationSeparate GLEW_GET_FUN(__glewBlendEquationSeparate) +#define glCompileShader GLEW_GET_FUN(__glewCompileShader) +#define glCreateProgram GLEW_GET_FUN(__glewCreateProgram) +#define glCreateShader GLEW_GET_FUN(__glewCreateShader) +#define glDeleteProgram GLEW_GET_FUN(__glewDeleteProgram) +#define glDeleteShader GLEW_GET_FUN(__glewDeleteShader) +#define glDetachShader GLEW_GET_FUN(__glewDetachShader) +#define glDisableVertexAttribArray GLEW_GET_FUN(__glewDisableVertexAttribArray) +#define glDrawBuffers GLEW_GET_FUN(__glewDrawBuffers) +#define glEnableVertexAttribArray GLEW_GET_FUN(__glewEnableVertexAttribArray) +#define glGetActiveAttrib GLEW_GET_FUN(__glewGetActiveAttrib) +#define glGetActiveUniform GLEW_GET_FUN(__glewGetActiveUniform) +#define glGetAttachedShaders GLEW_GET_FUN(__glewGetAttachedShaders) +#define glGetAttribLocation GLEW_GET_FUN(__glewGetAttribLocation) +#define glGetProgramInfoLog GLEW_GET_FUN(__glewGetProgramInfoLog) +#define glGetProgramiv GLEW_GET_FUN(__glewGetProgramiv) +#define glGetShaderInfoLog GLEW_GET_FUN(__glewGetShaderInfoLog) +#define glGetShaderSource GLEW_GET_FUN(__glewGetShaderSource) +#define glGetShaderiv GLEW_GET_FUN(__glewGetShaderiv) +#define glGetUniformLocation GLEW_GET_FUN(__glewGetUniformLocation) +#define glGetUniformfv GLEW_GET_FUN(__glewGetUniformfv) +#define glGetUniformiv GLEW_GET_FUN(__glewGetUniformiv) +#define glGetVertexAttribPointerv GLEW_GET_FUN(__glewGetVertexAttribPointerv) +#define glGetVertexAttribdv GLEW_GET_FUN(__glewGetVertexAttribdv) +#define glGetVertexAttribfv GLEW_GET_FUN(__glewGetVertexAttribfv) +#define glGetVertexAttribiv GLEW_GET_FUN(__glewGetVertexAttribiv) +#define glIsProgram GLEW_GET_FUN(__glewIsProgram) +#define glIsShader GLEW_GET_FUN(__glewIsShader) +#define glLinkProgram GLEW_GET_FUN(__glewLinkProgram) +#define glShaderSource GLEW_GET_FUN(__glewShaderSource) +#define glStencilFuncSeparate GLEW_GET_FUN(__glewStencilFuncSeparate) +#define glStencilMaskSeparate GLEW_GET_FUN(__glewStencilMaskSeparate) +#define glStencilOpSeparate GLEW_GET_FUN(__glewStencilOpSeparate) +#define glUniform1f GLEW_GET_FUN(__glewUniform1f) +#define glUniform1fv GLEW_GET_FUN(__glewUniform1fv) +#define glUniform1i GLEW_GET_FUN(__glewUniform1i) +#define glUniform1iv GLEW_GET_FUN(__glewUniform1iv) +#define glUniform2f GLEW_GET_FUN(__glewUniform2f) +#define glUniform2fv GLEW_GET_FUN(__glewUniform2fv) +#define glUniform2i GLEW_GET_FUN(__glewUniform2i) +#define glUniform2iv GLEW_GET_FUN(__glewUniform2iv) +#define glUniform3f GLEW_GET_FUN(__glewUniform3f) +#define glUniform3fv GLEW_GET_FUN(__glewUniform3fv) +#define glUniform3i GLEW_GET_FUN(__glewUniform3i) +#define glUniform3iv GLEW_GET_FUN(__glewUniform3iv) +#define glUniform4f GLEW_GET_FUN(__glewUniform4f) +#define glUniform4fv GLEW_GET_FUN(__glewUniform4fv) +#define glUniform4i GLEW_GET_FUN(__glewUniform4i) +#define glUniform4iv GLEW_GET_FUN(__glewUniform4iv) +#define glUniformMatrix2fv GLEW_GET_FUN(__glewUniformMatrix2fv) +#define glUniformMatrix3fv GLEW_GET_FUN(__glewUniformMatrix3fv) +#define glUniformMatrix4fv GLEW_GET_FUN(__glewUniformMatrix4fv) +#define glUseProgram GLEW_GET_FUN(__glewUseProgram) +#define glValidateProgram GLEW_GET_FUN(__glewValidateProgram) +#define glVertexAttrib1d GLEW_GET_FUN(__glewVertexAttrib1d) +#define glVertexAttrib1dv GLEW_GET_FUN(__glewVertexAttrib1dv) +#define glVertexAttrib1f GLEW_GET_FUN(__glewVertexAttrib1f) +#define glVertexAttrib1fv GLEW_GET_FUN(__glewVertexAttrib1fv) +#define glVertexAttrib1s GLEW_GET_FUN(__glewVertexAttrib1s) +#define glVertexAttrib1sv GLEW_GET_FUN(__glewVertexAttrib1sv) +#define glVertexAttrib2d GLEW_GET_FUN(__glewVertexAttrib2d) +#define glVertexAttrib2dv GLEW_GET_FUN(__glewVertexAttrib2dv) +#define glVertexAttrib2f GLEW_GET_FUN(__glewVertexAttrib2f) +#define glVertexAttrib2fv GLEW_GET_FUN(__glewVertexAttrib2fv) +#define glVertexAttrib2s GLEW_GET_FUN(__glewVertexAttrib2s) +#define glVertexAttrib2sv GLEW_GET_FUN(__glewVertexAttrib2sv) +#define glVertexAttrib3d GLEW_GET_FUN(__glewVertexAttrib3d) +#define glVertexAttrib3dv GLEW_GET_FUN(__glewVertexAttrib3dv) +#define glVertexAttrib3f GLEW_GET_FUN(__glewVertexAttrib3f) +#define glVertexAttrib3fv GLEW_GET_FUN(__glewVertexAttrib3fv) +#define glVertexAttrib3s GLEW_GET_FUN(__glewVertexAttrib3s) +#define glVertexAttrib3sv GLEW_GET_FUN(__glewVertexAttrib3sv) +#define glVertexAttrib4Nbv GLEW_GET_FUN(__glewVertexAttrib4Nbv) +#define glVertexAttrib4Niv GLEW_GET_FUN(__glewVertexAttrib4Niv) +#define glVertexAttrib4Nsv GLEW_GET_FUN(__glewVertexAttrib4Nsv) +#define glVertexAttrib4Nub GLEW_GET_FUN(__glewVertexAttrib4Nub) +#define glVertexAttrib4Nubv GLEW_GET_FUN(__glewVertexAttrib4Nubv) +#define glVertexAttrib4Nuiv GLEW_GET_FUN(__glewVertexAttrib4Nuiv) +#define glVertexAttrib4Nusv GLEW_GET_FUN(__glewVertexAttrib4Nusv) +#define glVertexAttrib4bv GLEW_GET_FUN(__glewVertexAttrib4bv) +#define glVertexAttrib4d GLEW_GET_FUN(__glewVertexAttrib4d) +#define glVertexAttrib4dv GLEW_GET_FUN(__glewVertexAttrib4dv) +#define glVertexAttrib4f GLEW_GET_FUN(__glewVertexAttrib4f) +#define glVertexAttrib4fv GLEW_GET_FUN(__glewVertexAttrib4fv) +#define glVertexAttrib4iv GLEW_GET_FUN(__glewVertexAttrib4iv) +#define glVertexAttrib4s GLEW_GET_FUN(__glewVertexAttrib4s) +#define glVertexAttrib4sv GLEW_GET_FUN(__glewVertexAttrib4sv) +#define glVertexAttrib4ubv GLEW_GET_FUN(__glewVertexAttrib4ubv) +#define glVertexAttrib4uiv GLEW_GET_FUN(__glewVertexAttrib4uiv) +#define glVertexAttrib4usv GLEW_GET_FUN(__glewVertexAttrib4usv) +#define glVertexAttribPointer GLEW_GET_FUN(__glewVertexAttribPointer) + +#define GLEW_VERSION_2_0 GLEW_GET_VAR(__GLEW_VERSION_2_0) + +#endif /* GL_VERSION_2_0 */ + +/* ----------------------------- GL_VERSION_2_1 ---------------------------- */ + +#ifndef GL_VERSION_2_1 +#define GL_VERSION_2_1 1 + +#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F +#define GL_PIXEL_PACK_BUFFER 0x88EB +#define GL_PIXEL_UNPACK_BUFFER 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF +#define GL_FLOAT_MAT2x3 0x8B65 +#define GL_FLOAT_MAT2x4 0x8B66 +#define GL_FLOAT_MAT3x2 0x8B67 +#define GL_FLOAT_MAT3x4 0x8B68 +#define GL_FLOAT_MAT4x2 0x8B69 +#define GL_FLOAT_MAT4x3 0x8B6A +#define GL_SRGB 0x8C40 +#define GL_SRGB8 0x8C41 +#define GL_SRGB_ALPHA 0x8C42 +#define GL_SRGB8_ALPHA8 0x8C43 +#define GL_SLUMINANCE_ALPHA 0x8C44 +#define GL_SLUMINANCE8_ALPHA8 0x8C45 +#define GL_SLUMINANCE 0x8C46 +#define GL_SLUMINANCE8 0x8C47 +#define GL_COMPRESSED_SRGB 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 +#define GL_COMPRESSED_SLUMINANCE 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B + +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); + +#define glUniformMatrix2x3fv GLEW_GET_FUN(__glewUniformMatrix2x3fv) +#define glUniformMatrix2x4fv GLEW_GET_FUN(__glewUniformMatrix2x4fv) +#define glUniformMatrix3x2fv GLEW_GET_FUN(__glewUniformMatrix3x2fv) +#define glUniformMatrix3x4fv GLEW_GET_FUN(__glewUniformMatrix3x4fv) +#define glUniformMatrix4x2fv GLEW_GET_FUN(__glewUniformMatrix4x2fv) +#define glUniformMatrix4x3fv GLEW_GET_FUN(__glewUniformMatrix4x3fv) + +#define GLEW_VERSION_2_1 GLEW_GET_VAR(__GLEW_VERSION_2_1) + +#endif /* GL_VERSION_2_1 */ + +/* -------------------------- GL_3DFX_multisample -------------------------- */ + +#ifndef GL_3DFX_multisample +#define GL_3DFX_multisample 1 + +#define GL_MULTISAMPLE_3DFX 0x86B2 +#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 +#define GL_SAMPLES_3DFX 0x86B4 +#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 + +#define GLEW_3DFX_multisample GLEW_GET_VAR(__GLEW_3DFX_multisample) + +#endif /* GL_3DFX_multisample */ + +/* ---------------------------- GL_3DFX_tbuffer ---------------------------- */ + +#ifndef GL_3DFX_tbuffer +#define GL_3DFX_tbuffer 1 + +typedef void (GLAPIENTRY * PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); + +#define glTbufferMask3DFX GLEW_GET_FUN(__glewTbufferMask3DFX) + +#define GLEW_3DFX_tbuffer GLEW_GET_VAR(__GLEW_3DFX_tbuffer) + +#endif /* GL_3DFX_tbuffer */ + +/* -------------------- GL_3DFX_texture_compression_FXT1 ------------------- */ + +#ifndef GL_3DFX_texture_compression_FXT1 +#define GL_3DFX_texture_compression_FXT1 1 + +#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 +#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 + +#define GLEW_3DFX_texture_compression_FXT1 GLEW_GET_VAR(__GLEW_3DFX_texture_compression_FXT1) + +#endif /* GL_3DFX_texture_compression_FXT1 */ + +/* ------------------------ GL_APPLE_client_storage ------------------------ */ + +#ifndef GL_APPLE_client_storage +#define GL_APPLE_client_storage 1 + +#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 + +#define GLEW_APPLE_client_storage GLEW_GET_VAR(__GLEW_APPLE_client_storage) + +#endif /* GL_APPLE_client_storage */ + +/* ------------------------- GL_APPLE_element_array ------------------------ */ + +#ifndef GL_APPLE_element_array +#define GL_APPLE_element_array 1 + +#define GL_ELEMENT_ARRAY_APPLE 0x8768 +#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8769 +#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x876A + +typedef void (GLAPIENTRY * PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +typedef void (GLAPIENTRY * PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const void* pointer); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint* first, const GLsizei *count, GLsizei primcount); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint* first, const GLsizei *count, GLsizei primcount); + +#define glDrawElementArrayAPPLE GLEW_GET_FUN(__glewDrawElementArrayAPPLE) +#define glDrawRangeElementArrayAPPLE GLEW_GET_FUN(__glewDrawRangeElementArrayAPPLE) +#define glElementPointerAPPLE GLEW_GET_FUN(__glewElementPointerAPPLE) +#define glMultiDrawElementArrayAPPLE GLEW_GET_FUN(__glewMultiDrawElementArrayAPPLE) +#define glMultiDrawRangeElementArrayAPPLE GLEW_GET_FUN(__glewMultiDrawRangeElementArrayAPPLE) + +#define GLEW_APPLE_element_array GLEW_GET_VAR(__GLEW_APPLE_element_array) + +#endif /* GL_APPLE_element_array */ + +/* ----------------------------- GL_APPLE_fence ---------------------------- */ + +#ifndef GL_APPLE_fence +#define GL_APPLE_fence 1 + +#define GL_DRAW_PIXELS_APPLE 0x8A0A +#define GL_FENCE_APPLE 0x8A0B + +typedef void (GLAPIENTRY * PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint* fences); +typedef void (GLAPIENTRY * PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); +typedef void (GLAPIENTRY * PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); +typedef void (GLAPIENTRY * PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint* fences); +typedef GLboolean (GLAPIENTRY * PFNGLISFENCEAPPLEPROC) (GLuint fence); +typedef void (GLAPIENTRY * PFNGLSETFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (GLAPIENTRY * PFNGLTESTFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (GLAPIENTRY * PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); + +#define glDeleteFencesAPPLE GLEW_GET_FUN(__glewDeleteFencesAPPLE) +#define glFinishFenceAPPLE GLEW_GET_FUN(__glewFinishFenceAPPLE) +#define glFinishObjectAPPLE GLEW_GET_FUN(__glewFinishObjectAPPLE) +#define glGenFencesAPPLE GLEW_GET_FUN(__glewGenFencesAPPLE) +#define glIsFenceAPPLE GLEW_GET_FUN(__glewIsFenceAPPLE) +#define glSetFenceAPPLE GLEW_GET_FUN(__glewSetFenceAPPLE) +#define glTestFenceAPPLE GLEW_GET_FUN(__glewTestFenceAPPLE) +#define glTestObjectAPPLE GLEW_GET_FUN(__glewTestObjectAPPLE) + +#define GLEW_APPLE_fence GLEW_GET_VAR(__GLEW_APPLE_fence) + +#endif /* GL_APPLE_fence */ + +/* ------------------------- GL_APPLE_float_pixels ------------------------- */ + +#ifndef GL_APPLE_float_pixels +#define GL_APPLE_float_pixels 1 + +#define GL_HALF_APPLE 0x140B +#define GL_RGBA_FLOAT32_APPLE 0x8814 +#define GL_RGB_FLOAT32_APPLE 0x8815 +#define GL_ALPHA_FLOAT32_APPLE 0x8816 +#define GL_INTENSITY_FLOAT32_APPLE 0x8817 +#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 +#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 +#define GL_RGBA_FLOAT16_APPLE 0x881A +#define GL_RGB_FLOAT16_APPLE 0x881B +#define GL_ALPHA_FLOAT16_APPLE 0x881C +#define GL_INTENSITY_FLOAT16_APPLE 0x881D +#define GL_LUMINANCE_FLOAT16_APPLE 0x881E +#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F +#define GL_COLOR_FLOAT_APPLE 0x8A0F + +#define GLEW_APPLE_float_pixels GLEW_GET_VAR(__GLEW_APPLE_float_pixels) + +#endif /* GL_APPLE_float_pixels */ + +/* ---------------------- GL_APPLE_flush_buffer_range ---------------------- */ + +#ifndef GL_APPLE_flush_buffer_range +#define GL_APPLE_flush_buffer_range 1 + +#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 +#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 + +typedef void (GLAPIENTRY * PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); + +#define glBufferParameteriAPPLE GLEW_GET_FUN(__glewBufferParameteriAPPLE) +#define glFlushMappedBufferRangeAPPLE GLEW_GET_FUN(__glewFlushMappedBufferRangeAPPLE) + +#define GLEW_APPLE_flush_buffer_range GLEW_GET_VAR(__GLEW_APPLE_flush_buffer_range) + +#endif /* GL_APPLE_flush_buffer_range */ + +/* ------------------------- GL_APPLE_pixel_buffer ------------------------- */ + +#ifndef GL_APPLE_pixel_buffer +#define GL_APPLE_pixel_buffer 1 + +#define GL_MIN_PBUFFER_VIEWPORT_DIMS_APPLE 0x8A10 + +#define GLEW_APPLE_pixel_buffer GLEW_GET_VAR(__GLEW_APPLE_pixel_buffer) + +#endif /* GL_APPLE_pixel_buffer */ + +/* ------------------------ GL_APPLE_specular_vector ----------------------- */ + +#ifndef GL_APPLE_specular_vector +#define GL_APPLE_specular_vector 1 + +#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 + +#define GLEW_APPLE_specular_vector GLEW_GET_VAR(__GLEW_APPLE_specular_vector) + +#endif /* GL_APPLE_specular_vector */ + +/* ------------------------- GL_APPLE_texture_range ------------------------ */ + +#ifndef GL_APPLE_texture_range +#define GL_APPLE_texture_range 1 + +#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 +#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 +#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC +#define GL_STORAGE_PRIVATE_APPLE 0x85BD +#define GL_STORAGE_CACHED_APPLE 0x85BE +#define GL_STORAGE_SHARED_APPLE 0x85BF + +typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, GLvoid **params); +typedef void (GLAPIENTRY * PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, GLvoid *pointer); + +#define glGetTexParameterPointervAPPLE GLEW_GET_FUN(__glewGetTexParameterPointervAPPLE) +#define glTextureRangeAPPLE GLEW_GET_FUN(__glewTextureRangeAPPLE) + +#define GLEW_APPLE_texture_range GLEW_GET_VAR(__GLEW_APPLE_texture_range) + +#endif /* GL_APPLE_texture_range */ + +/* ------------------------ GL_APPLE_transform_hint ------------------------ */ + +#ifndef GL_APPLE_transform_hint +#define GL_APPLE_transform_hint 1 + +#define GL_TRANSFORM_HINT_APPLE 0x85B1 + +#define GLEW_APPLE_transform_hint GLEW_GET_VAR(__GLEW_APPLE_transform_hint) + +#endif /* GL_APPLE_transform_hint */ + +/* ---------------------- GL_APPLE_vertex_array_object --------------------- */ + +#ifndef GL_APPLE_vertex_array_object +#define GL_APPLE_vertex_array_object 1 + +#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 + +typedef void (GLAPIENTRY * PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); +typedef void (GLAPIENTRY * PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint* arrays); +typedef void (GLAPIENTRY * PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint* arrays); +typedef GLboolean (GLAPIENTRY * PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); + +#define glBindVertexArrayAPPLE GLEW_GET_FUN(__glewBindVertexArrayAPPLE) +#define glDeleteVertexArraysAPPLE GLEW_GET_FUN(__glewDeleteVertexArraysAPPLE) +#define glGenVertexArraysAPPLE GLEW_GET_FUN(__glewGenVertexArraysAPPLE) +#define glIsVertexArrayAPPLE GLEW_GET_FUN(__glewIsVertexArrayAPPLE) + +#define GLEW_APPLE_vertex_array_object GLEW_GET_VAR(__GLEW_APPLE_vertex_array_object) + +#endif /* GL_APPLE_vertex_array_object */ + +/* ---------------------- GL_APPLE_vertex_array_range ---------------------- */ + +#ifndef GL_APPLE_vertex_array_range +#define GL_APPLE_vertex_array_range 1 + +#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E +#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F +#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_APPLE 0x8520 +#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 +#define GL_STORAGE_CACHED_APPLE 0x85BE +#define GL_STORAGE_SHARED_APPLE 0x85BF + +typedef void (GLAPIENTRY * PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void* pointer); +typedef void (GLAPIENTRY * PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void* pointer); + +#define glFlushVertexArrayRangeAPPLE GLEW_GET_FUN(__glewFlushVertexArrayRangeAPPLE) +#define glVertexArrayParameteriAPPLE GLEW_GET_FUN(__glewVertexArrayParameteriAPPLE) +#define glVertexArrayRangeAPPLE GLEW_GET_FUN(__glewVertexArrayRangeAPPLE) + +#define GLEW_APPLE_vertex_array_range GLEW_GET_VAR(__GLEW_APPLE_vertex_array_range) + +#endif /* GL_APPLE_vertex_array_range */ + +/* --------------------------- GL_APPLE_ycbcr_422 -------------------------- */ + +#ifndef GL_APPLE_ycbcr_422 +#define GL_APPLE_ycbcr_422 1 + +#define GL_YCBCR_422_APPLE 0x85B9 +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB + +#define GLEW_APPLE_ycbcr_422 GLEW_GET_VAR(__GLEW_APPLE_ycbcr_422) + +#endif /* GL_APPLE_ycbcr_422 */ + +/* ----------------------- GL_ARB_color_buffer_float ----------------------- */ + +#ifndef GL_ARB_color_buffer_float +#define GL_ARB_color_buffer_float 1 + +#define GL_RGBA_FLOAT_MODE_ARB 0x8820 +#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A +#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B +#define GL_CLAMP_READ_COLOR_ARB 0x891C +#define GL_FIXED_ONLY_ARB 0x891D + +typedef void (GLAPIENTRY * PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); + +#define glClampColorARB GLEW_GET_FUN(__glewClampColorARB) + +#define GLEW_ARB_color_buffer_float GLEW_GET_VAR(__GLEW_ARB_color_buffer_float) + +#endif /* GL_ARB_color_buffer_float */ + +/* -------------------------- GL_ARB_depth_texture ------------------------- */ + +#ifndef GL_ARB_depth_texture +#define GL_ARB_depth_texture 1 + +#define GL_DEPTH_COMPONENT16_ARB 0x81A5 +#define GL_DEPTH_COMPONENT24_ARB 0x81A6 +#define GL_DEPTH_COMPONENT32_ARB 0x81A7 +#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A +#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B + +#define GLEW_ARB_depth_texture GLEW_GET_VAR(__GLEW_ARB_depth_texture) + +#endif /* GL_ARB_depth_texture */ + +/* -------------------------- GL_ARB_draw_buffers -------------------------- */ + +#ifndef GL_ARB_draw_buffers +#define GL_ARB_draw_buffers 1 + +#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 +#define GL_DRAW_BUFFER0_ARB 0x8825 +#define GL_DRAW_BUFFER1_ARB 0x8826 +#define GL_DRAW_BUFFER2_ARB 0x8827 +#define GL_DRAW_BUFFER3_ARB 0x8828 +#define GL_DRAW_BUFFER4_ARB 0x8829 +#define GL_DRAW_BUFFER5_ARB 0x882A +#define GL_DRAW_BUFFER6_ARB 0x882B +#define GL_DRAW_BUFFER7_ARB 0x882C +#define GL_DRAW_BUFFER8_ARB 0x882D +#define GL_DRAW_BUFFER9_ARB 0x882E +#define GL_DRAW_BUFFER10_ARB 0x882F +#define GL_DRAW_BUFFER11_ARB 0x8830 +#define GL_DRAW_BUFFER12_ARB 0x8831 +#define GL_DRAW_BUFFER13_ARB 0x8832 +#define GL_DRAW_BUFFER14_ARB 0x8833 +#define GL_DRAW_BUFFER15_ARB 0x8834 + +typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum* bufs); + +#define glDrawBuffersARB GLEW_GET_FUN(__glewDrawBuffersARB) + +#define GLEW_ARB_draw_buffers GLEW_GET_VAR(__GLEW_ARB_draw_buffers) + +#endif /* GL_ARB_draw_buffers */ + +/* ------------------------ GL_ARB_fragment_program ------------------------ */ + +#ifndef GL_ARB_fragment_program +#define GL_ARB_fragment_program 1 + +#define GL_FRAGMENT_PROGRAM_ARB 0x8804 +#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 +#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 +#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 +#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 +#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 +#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A +#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B +#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C +#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D +#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E +#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F +#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 +#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 + +#define GLEW_ARB_fragment_program GLEW_GET_VAR(__GLEW_ARB_fragment_program) + +#endif /* GL_ARB_fragment_program */ + +/* --------------------- GL_ARB_fragment_program_shadow -------------------- */ + +#ifndef GL_ARB_fragment_program_shadow +#define GL_ARB_fragment_program_shadow 1 + +#define GLEW_ARB_fragment_program_shadow GLEW_GET_VAR(__GLEW_ARB_fragment_program_shadow) + +#endif /* GL_ARB_fragment_program_shadow */ + +/* ------------------------- GL_ARB_fragment_shader ------------------------ */ + +#ifndef GL_ARB_fragment_shader +#define GL_ARB_fragment_shader 1 + +#define GL_FRAGMENT_SHADER_ARB 0x8B30 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B + +#define GLEW_ARB_fragment_shader GLEW_GET_VAR(__GLEW_ARB_fragment_shader) + +#endif /* GL_ARB_fragment_shader */ + +/* ------------------------ GL_ARB_half_float_pixel ------------------------ */ + +#ifndef GL_ARB_half_float_pixel +#define GL_ARB_half_float_pixel 1 + +#define GL_HALF_FLOAT_ARB 0x140B + +#define GLEW_ARB_half_float_pixel GLEW_GET_VAR(__GLEW_ARB_half_float_pixel) + +#endif /* GL_ARB_half_float_pixel */ + +/* ----------------------------- GL_ARB_imaging ---------------------------- */ + +#ifndef GL_ARB_imaging +#define GL_ARB_imaging 1 + +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_BLEND_COLOR 0x8005 +#define GL_FUNC_ADD 0x8006 +#define GL_MIN 0x8007 +#define GL_MAX 0x8008 +#define GL_BLEND_EQUATION 0x8009 +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_CONVOLUTION_1D 0x8010 +#define GL_CONVOLUTION_2D 0x8011 +#define GL_SEPARABLE_2D 0x8012 +#define GL_CONVOLUTION_BORDER_MODE 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS 0x8015 +#define GL_REDUCE 0x8016 +#define GL_CONVOLUTION_FORMAT 0x8017 +#define GL_CONVOLUTION_WIDTH 0x8018 +#define GL_CONVOLUTION_HEIGHT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 +#define GL_HISTOGRAM 0x8024 +#define GL_PROXY_HISTOGRAM 0x8025 +#define GL_HISTOGRAM_WIDTH 0x8026 +#define GL_HISTOGRAM_FORMAT 0x8027 +#define GL_HISTOGRAM_RED_SIZE 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C +#define GL_HISTOGRAM_SINK 0x802D +#define GL_MINMAX 0x802E +#define GL_MINMAX_FORMAT 0x802F +#define GL_MINMAX_SINK 0x8030 +#define GL_TABLE_TOO_LARGE 0x8031 +#define GL_COLOR_MATRIX 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB +#define GL_COLOR_TABLE 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 +#define GL_PROXY_COLOR_TABLE 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 +#define GL_COLOR_TABLE_SCALE 0x80D6 +#define GL_COLOR_TABLE_BIAS 0x80D7 +#define GL_COLOR_TABLE_FORMAT 0x80D8 +#define GL_COLOR_TABLE_WIDTH 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF +#define GL_IGNORE_BORDER 0x8150 +#define GL_CONSTANT_BORDER 0x8151 +#define GL_WRAP_BORDER 0x8152 +#define GL_REPLICATE_BORDER 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR 0x8154 + +typedef void (GLAPIENTRY * PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); +typedef void (GLAPIENTRY * PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); +typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (GLAPIENTRY * PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY * PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); +typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); +typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); +typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (GLAPIENTRY * PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid *values); +typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (GLAPIENTRY * PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); +typedef void (GLAPIENTRY * PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (GLAPIENTRY * PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (GLAPIENTRY * PFNGLRESETHISTOGRAMPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLRESETMINMAXPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); + +#define glColorSubTable GLEW_GET_FUN(__glewColorSubTable) +#define glColorTable GLEW_GET_FUN(__glewColorTable) +#define glColorTableParameterfv GLEW_GET_FUN(__glewColorTableParameterfv) +#define glColorTableParameteriv GLEW_GET_FUN(__glewColorTableParameteriv) +#define glConvolutionFilter1D GLEW_GET_FUN(__glewConvolutionFilter1D) +#define glConvolutionFilter2D GLEW_GET_FUN(__glewConvolutionFilter2D) +#define glConvolutionParameterf GLEW_GET_FUN(__glewConvolutionParameterf) +#define glConvolutionParameterfv GLEW_GET_FUN(__glewConvolutionParameterfv) +#define glConvolutionParameteri GLEW_GET_FUN(__glewConvolutionParameteri) +#define glConvolutionParameteriv GLEW_GET_FUN(__glewConvolutionParameteriv) +#define glCopyColorSubTable GLEW_GET_FUN(__glewCopyColorSubTable) +#define glCopyColorTable GLEW_GET_FUN(__glewCopyColorTable) +#define glCopyConvolutionFilter1D GLEW_GET_FUN(__glewCopyConvolutionFilter1D) +#define glCopyConvolutionFilter2D GLEW_GET_FUN(__glewCopyConvolutionFilter2D) +#define glGetColorTable GLEW_GET_FUN(__glewGetColorTable) +#define glGetColorTableParameterfv GLEW_GET_FUN(__glewGetColorTableParameterfv) +#define glGetColorTableParameteriv GLEW_GET_FUN(__glewGetColorTableParameteriv) +#define glGetConvolutionFilter GLEW_GET_FUN(__glewGetConvolutionFilter) +#define glGetConvolutionParameterfv GLEW_GET_FUN(__glewGetConvolutionParameterfv) +#define glGetConvolutionParameteriv GLEW_GET_FUN(__glewGetConvolutionParameteriv) +#define glGetHistogram GLEW_GET_FUN(__glewGetHistogram) +#define glGetHistogramParameterfv GLEW_GET_FUN(__glewGetHistogramParameterfv) +#define glGetHistogramParameteriv GLEW_GET_FUN(__glewGetHistogramParameteriv) +#define glGetMinmax GLEW_GET_FUN(__glewGetMinmax) +#define glGetMinmaxParameterfv GLEW_GET_FUN(__glewGetMinmaxParameterfv) +#define glGetMinmaxParameteriv GLEW_GET_FUN(__glewGetMinmaxParameteriv) +#define glGetSeparableFilter GLEW_GET_FUN(__glewGetSeparableFilter) +#define glHistogram GLEW_GET_FUN(__glewHistogram) +#define glMinmax GLEW_GET_FUN(__glewMinmax) +#define glResetHistogram GLEW_GET_FUN(__glewResetHistogram) +#define glResetMinmax GLEW_GET_FUN(__glewResetMinmax) +#define glSeparableFilter2D GLEW_GET_FUN(__glewSeparableFilter2D) + +#define GLEW_ARB_imaging GLEW_GET_VAR(__GLEW_ARB_imaging) + +#endif /* GL_ARB_imaging */ + +/* ------------------------- GL_ARB_matrix_palette ------------------------- */ + +#ifndef GL_ARB_matrix_palette +#define GL_ARB_matrix_palette 1 + +#define GL_MATRIX_PALETTE_ARB 0x8840 +#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 +#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 +#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 +#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 +#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 +#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 +#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 +#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 +#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 + +typedef void (GLAPIENTRY * PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); +typedef void (GLAPIENTRY * PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer); +typedef void (GLAPIENTRY * PFNGLMATRIXINDEXUBVARBPROC) (GLint size, GLubyte *indices); +typedef void (GLAPIENTRY * PFNGLMATRIXINDEXUIVARBPROC) (GLint size, GLuint *indices); +typedef void (GLAPIENTRY * PFNGLMATRIXINDEXUSVARBPROC) (GLint size, GLushort *indices); + +#define glCurrentPaletteMatrixARB GLEW_GET_FUN(__glewCurrentPaletteMatrixARB) +#define glMatrixIndexPointerARB GLEW_GET_FUN(__glewMatrixIndexPointerARB) +#define glMatrixIndexubvARB GLEW_GET_FUN(__glewMatrixIndexubvARB) +#define glMatrixIndexuivARB GLEW_GET_FUN(__glewMatrixIndexuivARB) +#define glMatrixIndexusvARB GLEW_GET_FUN(__glewMatrixIndexusvARB) + +#define GLEW_ARB_matrix_palette GLEW_GET_VAR(__GLEW_ARB_matrix_palette) + +#endif /* GL_ARB_matrix_palette */ + +/* --------------------------- GL_ARB_multisample -------------------------- */ + +#ifndef GL_ARB_multisample +#define GL_ARB_multisample 1 + +#define GL_MULTISAMPLE_ARB 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F +#define GL_SAMPLE_COVERAGE_ARB 0x80A0 +#define GL_SAMPLE_BUFFERS_ARB 0x80A8 +#define GL_SAMPLES_ARB 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB +#define GL_MULTISAMPLE_BIT_ARB 0x20000000 + +typedef void (GLAPIENTRY * PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert); + +#define glSampleCoverageARB GLEW_GET_FUN(__glewSampleCoverageARB) + +#define GLEW_ARB_multisample GLEW_GET_VAR(__GLEW_ARB_multisample) + +#endif /* GL_ARB_multisample */ + +/* -------------------------- GL_ARB_multitexture -------------------------- */ + +#ifndef GL_ARB_multitexture +#define GL_ARB_multitexture 1 + +#define GL_TEXTURE0_ARB 0x84C0 +#define GL_TEXTURE1_ARB 0x84C1 +#define GL_TEXTURE2_ARB 0x84C2 +#define GL_TEXTURE3_ARB 0x84C3 +#define GL_TEXTURE4_ARB 0x84C4 +#define GL_TEXTURE5_ARB 0x84C5 +#define GL_TEXTURE6_ARB 0x84C6 +#define GL_TEXTURE7_ARB 0x84C7 +#define GL_TEXTURE8_ARB 0x84C8 +#define GL_TEXTURE9_ARB 0x84C9 +#define GL_TEXTURE10_ARB 0x84CA +#define GL_TEXTURE11_ARB 0x84CB +#define GL_TEXTURE12_ARB 0x84CC +#define GL_TEXTURE13_ARB 0x84CD +#define GL_TEXTURE14_ARB 0x84CE +#define GL_TEXTURE15_ARB 0x84CF +#define GL_TEXTURE16_ARB 0x84D0 +#define GL_TEXTURE17_ARB 0x84D1 +#define GL_TEXTURE18_ARB 0x84D2 +#define GL_TEXTURE19_ARB 0x84D3 +#define GL_TEXTURE20_ARB 0x84D4 +#define GL_TEXTURE21_ARB 0x84D5 +#define GL_TEXTURE22_ARB 0x84D6 +#define GL_TEXTURE23_ARB 0x84D7 +#define GL_TEXTURE24_ARB 0x84D8 +#define GL_TEXTURE25_ARB 0x84D9 +#define GL_TEXTURE26_ARB 0x84DA +#define GL_TEXTURE27_ARB 0x84DB +#define GL_TEXTURE28_ARB 0x84DC +#define GL_TEXTURE29_ARB 0x84DD +#define GL_TEXTURE30_ARB 0x84DE +#define GL_TEXTURE31_ARB 0x84DF +#define GL_ACTIVE_TEXTURE_ARB 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 +#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 + +typedef void (GLAPIENTRY * PFNGLACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (GLAPIENTRY * PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); + +#define glActiveTextureARB GLEW_GET_FUN(__glewActiveTextureARB) +#define glClientActiveTextureARB GLEW_GET_FUN(__glewClientActiveTextureARB) +#define glMultiTexCoord1dARB GLEW_GET_FUN(__glewMultiTexCoord1dARB) +#define glMultiTexCoord1dvARB GLEW_GET_FUN(__glewMultiTexCoord1dvARB) +#define glMultiTexCoord1fARB GLEW_GET_FUN(__glewMultiTexCoord1fARB) +#define glMultiTexCoord1fvARB GLEW_GET_FUN(__glewMultiTexCoord1fvARB) +#define glMultiTexCoord1iARB GLEW_GET_FUN(__glewMultiTexCoord1iARB) +#define glMultiTexCoord1ivARB GLEW_GET_FUN(__glewMultiTexCoord1ivARB) +#define glMultiTexCoord1sARB GLEW_GET_FUN(__glewMultiTexCoord1sARB) +#define glMultiTexCoord1svARB GLEW_GET_FUN(__glewMultiTexCoord1svARB) +#define glMultiTexCoord2dARB GLEW_GET_FUN(__glewMultiTexCoord2dARB) +#define glMultiTexCoord2dvARB GLEW_GET_FUN(__glewMultiTexCoord2dvARB) +#define glMultiTexCoord2fARB GLEW_GET_FUN(__glewMultiTexCoord2fARB) +#define glMultiTexCoord2fvARB GLEW_GET_FUN(__glewMultiTexCoord2fvARB) +#define glMultiTexCoord2iARB GLEW_GET_FUN(__glewMultiTexCoord2iARB) +#define glMultiTexCoord2ivARB GLEW_GET_FUN(__glewMultiTexCoord2ivARB) +#define glMultiTexCoord2sARB GLEW_GET_FUN(__glewMultiTexCoord2sARB) +#define glMultiTexCoord2svARB GLEW_GET_FUN(__glewMultiTexCoord2svARB) +#define glMultiTexCoord3dARB GLEW_GET_FUN(__glewMultiTexCoord3dARB) +#define glMultiTexCoord3dvARB GLEW_GET_FUN(__glewMultiTexCoord3dvARB) +#define glMultiTexCoord3fARB GLEW_GET_FUN(__glewMultiTexCoord3fARB) +#define glMultiTexCoord3fvARB GLEW_GET_FUN(__glewMultiTexCoord3fvARB) +#define glMultiTexCoord3iARB GLEW_GET_FUN(__glewMultiTexCoord3iARB) +#define glMultiTexCoord3ivARB GLEW_GET_FUN(__glewMultiTexCoord3ivARB) +#define glMultiTexCoord3sARB GLEW_GET_FUN(__glewMultiTexCoord3sARB) +#define glMultiTexCoord3svARB GLEW_GET_FUN(__glewMultiTexCoord3svARB) +#define glMultiTexCoord4dARB GLEW_GET_FUN(__glewMultiTexCoord4dARB) +#define glMultiTexCoord4dvARB GLEW_GET_FUN(__glewMultiTexCoord4dvARB) +#define glMultiTexCoord4fARB GLEW_GET_FUN(__glewMultiTexCoord4fARB) +#define glMultiTexCoord4fvARB GLEW_GET_FUN(__glewMultiTexCoord4fvARB) +#define glMultiTexCoord4iARB GLEW_GET_FUN(__glewMultiTexCoord4iARB) +#define glMultiTexCoord4ivARB GLEW_GET_FUN(__glewMultiTexCoord4ivARB) +#define glMultiTexCoord4sARB GLEW_GET_FUN(__glewMultiTexCoord4sARB) +#define glMultiTexCoord4svARB GLEW_GET_FUN(__glewMultiTexCoord4svARB) + +#define GLEW_ARB_multitexture GLEW_GET_VAR(__GLEW_ARB_multitexture) + +#endif /* GL_ARB_multitexture */ + +/* ------------------------- GL_ARB_occlusion_query ------------------------ */ + +#ifndef GL_ARB_occlusion_query +#define GL_ARB_occlusion_query 1 + +#define GL_QUERY_COUNTER_BITS_ARB 0x8864 +#define GL_CURRENT_QUERY_ARB 0x8865 +#define GL_QUERY_RESULT_ARB 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 +#define GL_SAMPLES_PASSED_ARB 0x8914 + +typedef void (GLAPIENTRY * PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); +typedef void (GLAPIENTRY * PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint* ids); +typedef void (GLAPIENTRY * PFNGLENDQUERYARBPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint* ids); +typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint* params); +typedef void (GLAPIENTRY * PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint* params); +typedef GLboolean (GLAPIENTRY * PFNGLISQUERYARBPROC) (GLuint id); + +#define glBeginQueryARB GLEW_GET_FUN(__glewBeginQueryARB) +#define glDeleteQueriesARB GLEW_GET_FUN(__glewDeleteQueriesARB) +#define glEndQueryARB GLEW_GET_FUN(__glewEndQueryARB) +#define glGenQueriesARB GLEW_GET_FUN(__glewGenQueriesARB) +#define glGetQueryObjectivARB GLEW_GET_FUN(__glewGetQueryObjectivARB) +#define glGetQueryObjectuivARB GLEW_GET_FUN(__glewGetQueryObjectuivARB) +#define glGetQueryivARB GLEW_GET_FUN(__glewGetQueryivARB) +#define glIsQueryARB GLEW_GET_FUN(__glewIsQueryARB) + +#define GLEW_ARB_occlusion_query GLEW_GET_VAR(__GLEW_ARB_occlusion_query) + +#endif /* GL_ARB_occlusion_query */ + +/* ----------------------- GL_ARB_pixel_buffer_object ---------------------- */ + +#ifndef GL_ARB_pixel_buffer_object +#define GL_ARB_pixel_buffer_object 1 + +#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF + +#define GLEW_ARB_pixel_buffer_object GLEW_GET_VAR(__GLEW_ARB_pixel_buffer_object) + +#endif /* GL_ARB_pixel_buffer_object */ + +/* ------------------------ GL_ARB_point_parameters ------------------------ */ + +#ifndef GL_ARB_point_parameters +#define GL_ARB_point_parameters 1 + +#define GL_POINT_SIZE_MIN_ARB 0x8126 +#define GL_POINT_SIZE_MAX_ARB 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 +#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 + +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, GLfloat* params); + +#define glPointParameterfARB GLEW_GET_FUN(__glewPointParameterfARB) +#define glPointParameterfvARB GLEW_GET_FUN(__glewPointParameterfvARB) + +#define GLEW_ARB_point_parameters GLEW_GET_VAR(__GLEW_ARB_point_parameters) + +#endif /* GL_ARB_point_parameters */ + +/* -------------------------- GL_ARB_point_sprite -------------------------- */ + +#ifndef GL_ARB_point_sprite +#define GL_ARB_point_sprite 1 + +#define GL_POINT_SPRITE_ARB 0x8861 +#define GL_COORD_REPLACE_ARB 0x8862 + +#define GLEW_ARB_point_sprite GLEW_GET_VAR(__GLEW_ARB_point_sprite) + +#endif /* GL_ARB_point_sprite */ + +/* ------------------------- GL_ARB_shader_objects ------------------------- */ + +#ifndef GL_ARB_shader_objects +#define GL_ARB_shader_objects 1 + +#define GL_PROGRAM_OBJECT_ARB 0x8B40 +#define GL_SHADER_OBJECT_ARB 0x8B48 +#define GL_OBJECT_TYPE_ARB 0x8B4E +#define GL_OBJECT_SUBTYPE_ARB 0x8B4F +#define GL_FLOAT_VEC2_ARB 0x8B50 +#define GL_FLOAT_VEC3_ARB 0x8B51 +#define GL_FLOAT_VEC4_ARB 0x8B52 +#define GL_INT_VEC2_ARB 0x8B53 +#define GL_INT_VEC3_ARB 0x8B54 +#define GL_INT_VEC4_ARB 0x8B55 +#define GL_BOOL_ARB 0x8B56 +#define GL_BOOL_VEC2_ARB 0x8B57 +#define GL_BOOL_VEC3_ARB 0x8B58 +#define GL_BOOL_VEC4_ARB 0x8B59 +#define GL_FLOAT_MAT2_ARB 0x8B5A +#define GL_FLOAT_MAT3_ARB 0x8B5B +#define GL_FLOAT_MAT4_ARB 0x8B5C +#define GL_SAMPLER_1D_ARB 0x8B5D +#define GL_SAMPLER_2D_ARB 0x8B5E +#define GL_SAMPLER_3D_ARB 0x8B5F +#define GL_SAMPLER_CUBE_ARB 0x8B60 +#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 +#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 +#define GL_SAMPLER_2D_RECT_ARB 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 +#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 +#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 +#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 +#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 +#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 +#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 +#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 +#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 +#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 + +typedef char GLcharARB; +typedef unsigned int GLhandleARB; + +typedef void (GLAPIENTRY * PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); +typedef void (GLAPIENTRY * PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); +typedef GLhandleARB (GLAPIENTRY * PFNGLCREATEPROGRAMOBJECTARBPROC) (void); +typedef GLhandleARB (GLAPIENTRY * PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); +typedef void (GLAPIENTRY * PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); +typedef void (GLAPIENTRY * PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); +typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei* length, GLint *size, GLenum *type, GLcharARB *name); +typedef void (GLAPIENTRY * PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei* count, GLhandleARB *obj); +typedef GLhandleARB (GLAPIENTRY * PFNGLGETHANDLEARBPROC) (GLenum pname); +typedef void (GLAPIENTRY * PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei* length, GLcharARB *infoLog); +typedef void (GLAPIENTRY * PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei* length, GLcharARB *source); +typedef GLint (GLAPIENTRY * PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB* name); +typedef void (GLAPIENTRY * PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint* params); +typedef void (GLAPIENTRY * PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (GLAPIENTRY * PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint *length); +typedef void (GLAPIENTRY * PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); +typedef void (GLAPIENTRY * PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); +typedef void (GLAPIENTRY * PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (GLAPIENTRY * PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); +typedef void (GLAPIENTRY * PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (GLAPIENTRY * PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (GLAPIENTRY * PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (GLAPIENTRY * PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (GLAPIENTRY * PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint* value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); +typedef void (GLAPIENTRY * PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); + +#define glAttachObjectARB GLEW_GET_FUN(__glewAttachObjectARB) +#define glCompileShaderARB GLEW_GET_FUN(__glewCompileShaderARB) +#define glCreateProgramObjectARB GLEW_GET_FUN(__glewCreateProgramObjectARB) +#define glCreateShaderObjectARB GLEW_GET_FUN(__glewCreateShaderObjectARB) +#define glDeleteObjectARB GLEW_GET_FUN(__glewDeleteObjectARB) +#define glDetachObjectARB GLEW_GET_FUN(__glewDetachObjectARB) +#define glGetActiveUniformARB GLEW_GET_FUN(__glewGetActiveUniformARB) +#define glGetAttachedObjectsARB GLEW_GET_FUN(__glewGetAttachedObjectsARB) +#define glGetHandleARB GLEW_GET_FUN(__glewGetHandleARB) +#define glGetInfoLogARB GLEW_GET_FUN(__glewGetInfoLogARB) +#define glGetObjectParameterfvARB GLEW_GET_FUN(__glewGetObjectParameterfvARB) +#define glGetObjectParameterivARB GLEW_GET_FUN(__glewGetObjectParameterivARB) +#define glGetShaderSourceARB GLEW_GET_FUN(__glewGetShaderSourceARB) +#define glGetUniformLocationARB GLEW_GET_FUN(__glewGetUniformLocationARB) +#define glGetUniformfvARB GLEW_GET_FUN(__glewGetUniformfvARB) +#define glGetUniformivARB GLEW_GET_FUN(__glewGetUniformivARB) +#define glLinkProgramARB GLEW_GET_FUN(__glewLinkProgramARB) +#define glShaderSourceARB GLEW_GET_FUN(__glewShaderSourceARB) +#define glUniform1fARB GLEW_GET_FUN(__glewUniform1fARB) +#define glUniform1fvARB GLEW_GET_FUN(__glewUniform1fvARB) +#define glUniform1iARB GLEW_GET_FUN(__glewUniform1iARB) +#define glUniform1ivARB GLEW_GET_FUN(__glewUniform1ivARB) +#define glUniform2fARB GLEW_GET_FUN(__glewUniform2fARB) +#define glUniform2fvARB GLEW_GET_FUN(__glewUniform2fvARB) +#define glUniform2iARB GLEW_GET_FUN(__glewUniform2iARB) +#define glUniform2ivARB GLEW_GET_FUN(__glewUniform2ivARB) +#define glUniform3fARB GLEW_GET_FUN(__glewUniform3fARB) +#define glUniform3fvARB GLEW_GET_FUN(__glewUniform3fvARB) +#define glUniform3iARB GLEW_GET_FUN(__glewUniform3iARB) +#define glUniform3ivARB GLEW_GET_FUN(__glewUniform3ivARB) +#define glUniform4fARB GLEW_GET_FUN(__glewUniform4fARB) +#define glUniform4fvARB GLEW_GET_FUN(__glewUniform4fvARB) +#define glUniform4iARB GLEW_GET_FUN(__glewUniform4iARB) +#define glUniform4ivARB GLEW_GET_FUN(__glewUniform4ivARB) +#define glUniformMatrix2fvARB GLEW_GET_FUN(__glewUniformMatrix2fvARB) +#define glUniformMatrix3fvARB GLEW_GET_FUN(__glewUniformMatrix3fvARB) +#define glUniformMatrix4fvARB GLEW_GET_FUN(__glewUniformMatrix4fvARB) +#define glUseProgramObjectARB GLEW_GET_FUN(__glewUseProgramObjectARB) +#define glValidateProgramARB GLEW_GET_FUN(__glewValidateProgramARB) + +#define GLEW_ARB_shader_objects GLEW_GET_VAR(__GLEW_ARB_shader_objects) + +#endif /* GL_ARB_shader_objects */ + +/* ---------------------- GL_ARB_shading_language_100 ---------------------- */ + +#ifndef GL_ARB_shading_language_100 +#define GL_ARB_shading_language_100 1 + +#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C + +#define GLEW_ARB_shading_language_100 GLEW_GET_VAR(__GLEW_ARB_shading_language_100) + +#endif /* GL_ARB_shading_language_100 */ + +/* ----------------------------- GL_ARB_shadow ----------------------------- */ + +#ifndef GL_ARB_shadow +#define GL_ARB_shadow 1 + +#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C +#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D +#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E + +#define GLEW_ARB_shadow GLEW_GET_VAR(__GLEW_ARB_shadow) + +#endif /* GL_ARB_shadow */ + +/* ------------------------- GL_ARB_shadow_ambient ------------------------- */ + +#ifndef GL_ARB_shadow_ambient +#define GL_ARB_shadow_ambient 1 + +#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF + +#define GLEW_ARB_shadow_ambient GLEW_GET_VAR(__GLEW_ARB_shadow_ambient) + +#endif /* GL_ARB_shadow_ambient */ + +/* ---------------------- GL_ARB_texture_border_clamp ---------------------- */ + +#ifndef GL_ARB_texture_border_clamp +#define GL_ARB_texture_border_clamp 1 + +#define GL_CLAMP_TO_BORDER_ARB 0x812D + +#define GLEW_ARB_texture_border_clamp GLEW_GET_VAR(__GLEW_ARB_texture_border_clamp) + +#endif /* GL_ARB_texture_border_clamp */ + +/* ----------------------- GL_ARB_texture_compression ---------------------- */ + +#ifndef GL_ARB_texture_compression +#define GL_ARB_texture_compression 1 + +#define GL_COMPRESSED_ALPHA_ARB 0x84E9 +#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB +#define GL_COMPRESSED_INTENSITY_ARB 0x84EC +#define GL_COMPRESSED_RGB_ARB 0x84ED +#define GL_COMPRESSED_RGBA_ARB 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 +#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 + +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data); +typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, void* img); + +#define glCompressedTexImage1DARB GLEW_GET_FUN(__glewCompressedTexImage1DARB) +#define glCompressedTexImage2DARB GLEW_GET_FUN(__glewCompressedTexImage2DARB) +#define glCompressedTexImage3DARB GLEW_GET_FUN(__glewCompressedTexImage3DARB) +#define glCompressedTexSubImage1DARB GLEW_GET_FUN(__glewCompressedTexSubImage1DARB) +#define glCompressedTexSubImage2DARB GLEW_GET_FUN(__glewCompressedTexSubImage2DARB) +#define glCompressedTexSubImage3DARB GLEW_GET_FUN(__glewCompressedTexSubImage3DARB) +#define glGetCompressedTexImageARB GLEW_GET_FUN(__glewGetCompressedTexImageARB) + +#define GLEW_ARB_texture_compression GLEW_GET_VAR(__GLEW_ARB_texture_compression) + +#endif /* GL_ARB_texture_compression */ + +/* ------------------------ GL_ARB_texture_cube_map ------------------------ */ + +#ifndef GL_ARB_texture_cube_map +#define GL_ARB_texture_cube_map 1 + +#define GL_NORMAL_MAP_ARB 0x8511 +#define GL_REFLECTION_MAP_ARB 0x8512 +#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C + +#define GLEW_ARB_texture_cube_map GLEW_GET_VAR(__GLEW_ARB_texture_cube_map) + +#endif /* GL_ARB_texture_cube_map */ + +/* ------------------------- GL_ARB_texture_env_add ------------------------ */ + +#ifndef GL_ARB_texture_env_add +#define GL_ARB_texture_env_add 1 + +#define GLEW_ARB_texture_env_add GLEW_GET_VAR(__GLEW_ARB_texture_env_add) + +#endif /* GL_ARB_texture_env_add */ + +/* ----------------------- GL_ARB_texture_env_combine ---------------------- */ + +#ifndef GL_ARB_texture_env_combine +#define GL_ARB_texture_env_combine 1 + +#define GL_SUBTRACT_ARB 0x84E7 +#define GL_COMBINE_ARB 0x8570 +#define GL_COMBINE_RGB_ARB 0x8571 +#define GL_COMBINE_ALPHA_ARB 0x8572 +#define GL_RGB_SCALE_ARB 0x8573 +#define GL_ADD_SIGNED_ARB 0x8574 +#define GL_INTERPOLATE_ARB 0x8575 +#define GL_CONSTANT_ARB 0x8576 +#define GL_PRIMARY_COLOR_ARB 0x8577 +#define GL_PREVIOUS_ARB 0x8578 +#define GL_SOURCE0_RGB_ARB 0x8580 +#define GL_SOURCE1_RGB_ARB 0x8581 +#define GL_SOURCE2_RGB_ARB 0x8582 +#define GL_SOURCE0_ALPHA_ARB 0x8588 +#define GL_SOURCE1_ALPHA_ARB 0x8589 +#define GL_SOURCE2_ALPHA_ARB 0x858A +#define GL_OPERAND0_RGB_ARB 0x8590 +#define GL_OPERAND1_RGB_ARB 0x8591 +#define GL_OPERAND2_RGB_ARB 0x8592 +#define GL_OPERAND0_ALPHA_ARB 0x8598 +#define GL_OPERAND1_ALPHA_ARB 0x8599 +#define GL_OPERAND2_ALPHA_ARB 0x859A + +#define GLEW_ARB_texture_env_combine GLEW_GET_VAR(__GLEW_ARB_texture_env_combine) + +#endif /* GL_ARB_texture_env_combine */ + +/* ---------------------- GL_ARB_texture_env_crossbar ---------------------- */ + +#ifndef GL_ARB_texture_env_crossbar +#define GL_ARB_texture_env_crossbar 1 + +#define GLEW_ARB_texture_env_crossbar GLEW_GET_VAR(__GLEW_ARB_texture_env_crossbar) + +#endif /* GL_ARB_texture_env_crossbar */ + +/* ------------------------ GL_ARB_texture_env_dot3 ------------------------ */ + +#ifndef GL_ARB_texture_env_dot3 +#define GL_ARB_texture_env_dot3 1 + +#define GL_DOT3_RGB_ARB 0x86AE +#define GL_DOT3_RGBA_ARB 0x86AF + +#define GLEW_ARB_texture_env_dot3 GLEW_GET_VAR(__GLEW_ARB_texture_env_dot3) + +#endif /* GL_ARB_texture_env_dot3 */ + +/* -------------------------- GL_ARB_texture_float ------------------------- */ + +#ifndef GL_ARB_texture_float +#define GL_ARB_texture_float 1 + +#define GL_RGBA32F_ARB 0x8814 +#define GL_RGB32F_ARB 0x8815 +#define GL_ALPHA32F_ARB 0x8816 +#define GL_INTENSITY32F_ARB 0x8817 +#define GL_LUMINANCE32F_ARB 0x8818 +#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 +#define GL_RGBA16F_ARB 0x881A +#define GL_RGB16F_ARB 0x881B +#define GL_ALPHA16F_ARB 0x881C +#define GL_INTENSITY16F_ARB 0x881D +#define GL_LUMINANCE16F_ARB 0x881E +#define GL_LUMINANCE_ALPHA16F_ARB 0x881F +#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 +#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 +#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 +#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 +#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 +#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 + +#define GLEW_ARB_texture_float GLEW_GET_VAR(__GLEW_ARB_texture_float) + +#endif /* GL_ARB_texture_float */ + +/* --------------------- GL_ARB_texture_mirrored_repeat -------------------- */ + +#ifndef GL_ARB_texture_mirrored_repeat +#define GL_ARB_texture_mirrored_repeat 1 + +#define GL_MIRRORED_REPEAT_ARB 0x8370 + +#define GLEW_ARB_texture_mirrored_repeat GLEW_GET_VAR(__GLEW_ARB_texture_mirrored_repeat) + +#endif /* GL_ARB_texture_mirrored_repeat */ + +/* -------------------- GL_ARB_texture_non_power_of_two -------------------- */ + +#ifndef GL_ARB_texture_non_power_of_two +#define GL_ARB_texture_non_power_of_two 1 + +#define GLEW_ARB_texture_non_power_of_two GLEW_GET_VAR(__GLEW_ARB_texture_non_power_of_two) + +#endif /* GL_ARB_texture_non_power_of_two */ + +/* ------------------------ GL_ARB_texture_rectangle ----------------------- */ + +#ifndef GL_ARB_texture_rectangle +#define GL_ARB_texture_rectangle 1 + +#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 +#define GL_SAMPLER_2D_RECT_ARB 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 + +#define GLEW_ARB_texture_rectangle GLEW_GET_VAR(__GLEW_ARB_texture_rectangle) + +#endif /* GL_ARB_texture_rectangle */ + +/* ------------------------ GL_ARB_transpose_matrix ------------------------ */ + +#ifndef GL_ARB_transpose_matrix +#define GL_ARB_transpose_matrix 1 + +#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 + +typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXDARBPROC) (GLdouble m[16]); +typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXFARBPROC) (GLfloat m[16]); +typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXDARBPROC) (GLdouble m[16]); +typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXFARBPROC) (GLfloat m[16]); + +#define glLoadTransposeMatrixdARB GLEW_GET_FUN(__glewLoadTransposeMatrixdARB) +#define glLoadTransposeMatrixfARB GLEW_GET_FUN(__glewLoadTransposeMatrixfARB) +#define glMultTransposeMatrixdARB GLEW_GET_FUN(__glewMultTransposeMatrixdARB) +#define glMultTransposeMatrixfARB GLEW_GET_FUN(__glewMultTransposeMatrixfARB) + +#define GLEW_ARB_transpose_matrix GLEW_GET_VAR(__GLEW_ARB_transpose_matrix) + +#endif /* GL_ARB_transpose_matrix */ + +/* -------------------------- GL_ARB_vertex_blend -------------------------- */ + +#ifndef GL_ARB_vertex_blend +#define GL_ARB_vertex_blend 1 + +#define GL_MODELVIEW0_ARB 0x1700 +#define GL_MODELVIEW1_ARB 0x850A +#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 +#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 +#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 +#define GL_VERTEX_BLEND_ARB 0x86A7 +#define GL_CURRENT_WEIGHT_ARB 0x86A8 +#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 +#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA +#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB +#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC +#define GL_WEIGHT_ARRAY_ARB 0x86AD +#define GL_MODELVIEW2_ARB 0x8722 +#define GL_MODELVIEW3_ARB 0x8723 +#define GL_MODELVIEW4_ARB 0x8724 +#define GL_MODELVIEW5_ARB 0x8725 +#define GL_MODELVIEW6_ARB 0x8726 +#define GL_MODELVIEW7_ARB 0x8727 +#define GL_MODELVIEW8_ARB 0x8728 +#define GL_MODELVIEW9_ARB 0x8729 +#define GL_MODELVIEW10_ARB 0x872A +#define GL_MODELVIEW11_ARB 0x872B +#define GL_MODELVIEW12_ARB 0x872C +#define GL_MODELVIEW13_ARB 0x872D +#define GL_MODELVIEW14_ARB 0x872E +#define GL_MODELVIEW15_ARB 0x872F +#define GL_MODELVIEW16_ARB 0x8730 +#define GL_MODELVIEW17_ARB 0x8731 +#define GL_MODELVIEW18_ARB 0x8732 +#define GL_MODELVIEW19_ARB 0x8733 +#define GL_MODELVIEW20_ARB 0x8734 +#define GL_MODELVIEW21_ARB 0x8735 +#define GL_MODELVIEW22_ARB 0x8736 +#define GL_MODELVIEW23_ARB 0x8737 +#define GL_MODELVIEW24_ARB 0x8738 +#define GL_MODELVIEW25_ARB 0x8739 +#define GL_MODELVIEW26_ARB 0x873A +#define GL_MODELVIEW27_ARB 0x873B +#define GL_MODELVIEW28_ARB 0x873C +#define GL_MODELVIEW29_ARB 0x873D +#define GL_MODELVIEW30_ARB 0x873E +#define GL_MODELVIEW31_ARB 0x873F + +typedef void (GLAPIENTRY * PFNGLVERTEXBLENDARBPROC) (GLint count); +typedef void (GLAPIENTRY * PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer); +typedef void (GLAPIENTRY * PFNGLWEIGHTBVARBPROC) (GLint size, GLbyte *weights); +typedef void (GLAPIENTRY * PFNGLWEIGHTDVARBPROC) (GLint size, GLdouble *weights); +typedef void (GLAPIENTRY * PFNGLWEIGHTFVARBPROC) (GLint size, GLfloat *weights); +typedef void (GLAPIENTRY * PFNGLWEIGHTIVARBPROC) (GLint size, GLint *weights); +typedef void (GLAPIENTRY * PFNGLWEIGHTSVARBPROC) (GLint size, GLshort *weights); +typedef void (GLAPIENTRY * PFNGLWEIGHTUBVARBPROC) (GLint size, GLubyte *weights); +typedef void (GLAPIENTRY * PFNGLWEIGHTUIVARBPROC) (GLint size, GLuint *weights); +typedef void (GLAPIENTRY * PFNGLWEIGHTUSVARBPROC) (GLint size, GLushort *weights); + +#define glVertexBlendARB GLEW_GET_FUN(__glewVertexBlendARB) +#define glWeightPointerARB GLEW_GET_FUN(__glewWeightPointerARB) +#define glWeightbvARB GLEW_GET_FUN(__glewWeightbvARB) +#define glWeightdvARB GLEW_GET_FUN(__glewWeightdvARB) +#define glWeightfvARB GLEW_GET_FUN(__glewWeightfvARB) +#define glWeightivARB GLEW_GET_FUN(__glewWeightivARB) +#define glWeightsvARB GLEW_GET_FUN(__glewWeightsvARB) +#define glWeightubvARB GLEW_GET_FUN(__glewWeightubvARB) +#define glWeightuivARB GLEW_GET_FUN(__glewWeightuivARB) +#define glWeightusvARB GLEW_GET_FUN(__glewWeightusvARB) + +#define GLEW_ARB_vertex_blend GLEW_GET_VAR(__GLEW_ARB_vertex_blend) + +#endif /* GL_ARB_vertex_blend */ + +/* ---------------------- GL_ARB_vertex_buffer_object ---------------------- */ + +#ifndef GL_ARB_vertex_buffer_object +#define GL_ARB_vertex_buffer_object 1 + +#define GL_BUFFER_SIZE_ARB 0x8764 +#define GL_BUFFER_USAGE_ARB 0x8765 +#define GL_ARRAY_BUFFER_ARB 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 +#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 +#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F +#define GL_READ_ONLY_ARB 0x88B8 +#define GL_WRITE_ONLY_ARB 0x88B9 +#define GL_READ_WRITE_ARB 0x88BA +#define GL_BUFFER_ACCESS_ARB 0x88BB +#define GL_BUFFER_MAPPED_ARB 0x88BC +#define GL_BUFFER_MAP_POINTER_ARB 0x88BD +#define GL_STREAM_DRAW_ARB 0x88E0 +#define GL_STREAM_READ_ARB 0x88E1 +#define GL_STREAM_COPY_ARB 0x88E2 +#define GL_STATIC_DRAW_ARB 0x88E4 +#define GL_STATIC_READ_ARB 0x88E5 +#define GL_STATIC_COPY_ARB 0x88E6 +#define GL_DYNAMIC_DRAW_ARB 0x88E8 +#define GL_DYNAMIC_READ_ARB 0x88E9 +#define GL_DYNAMIC_COPY_ARB 0x88EA + +typedef ptrdiff_t GLsizeiptrARB; +typedef ptrdiff_t GLintptrARB; + +typedef void (GLAPIENTRY * PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); +typedef void (GLAPIENTRY * PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid* data, GLenum usage); +typedef void (GLAPIENTRY * PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid* data); +typedef void (GLAPIENTRY * PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint* buffers); +typedef void (GLAPIENTRY * PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint* buffers); +typedef void (GLAPIENTRY * PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid** params); +typedef void (GLAPIENTRY * PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid* data); +typedef GLboolean (GLAPIENTRY * PFNGLISBUFFERARBPROC) (GLuint buffer); +typedef GLvoid * (GLAPIENTRY * PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); +typedef GLboolean (GLAPIENTRY * PFNGLUNMAPBUFFERARBPROC) (GLenum target); + +#define glBindBufferARB GLEW_GET_FUN(__glewBindBufferARB) +#define glBufferDataARB GLEW_GET_FUN(__glewBufferDataARB) +#define glBufferSubDataARB GLEW_GET_FUN(__glewBufferSubDataARB) +#define glDeleteBuffersARB GLEW_GET_FUN(__glewDeleteBuffersARB) +#define glGenBuffersARB GLEW_GET_FUN(__glewGenBuffersARB) +#define glGetBufferParameterivARB GLEW_GET_FUN(__glewGetBufferParameterivARB) +#define glGetBufferPointervARB GLEW_GET_FUN(__glewGetBufferPointervARB) +#define glGetBufferSubDataARB GLEW_GET_FUN(__glewGetBufferSubDataARB) +#define glIsBufferARB GLEW_GET_FUN(__glewIsBufferARB) +#define glMapBufferARB GLEW_GET_FUN(__glewMapBufferARB) +#define glUnmapBufferARB GLEW_GET_FUN(__glewUnmapBufferARB) + +#define GLEW_ARB_vertex_buffer_object GLEW_GET_VAR(__GLEW_ARB_vertex_buffer_object) + +#endif /* GL_ARB_vertex_buffer_object */ + +/* ------------------------- GL_ARB_vertex_program ------------------------- */ + +#ifndef GL_ARB_vertex_program +#define GL_ARB_vertex_program 1 + +#define GL_COLOR_SUM_ARB 0x8458 +#define GL_VERTEX_PROGRAM_ARB 0x8620 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 +#define GL_PROGRAM_LENGTH_ARB 0x8627 +#define GL_PROGRAM_STRING_ARB 0x8628 +#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E +#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F +#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 +#define GL_CURRENT_MATRIX_ARB 0x8641 +#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 +#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B +#define GL_PROGRAM_BINDING_ARB 0x8677 +#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A +#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 +#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 +#define GL_PROGRAM_FORMAT_ARB 0x8876 +#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 +#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 +#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 +#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 +#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 +#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 +#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 +#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 +#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 +#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 +#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA +#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB +#define GL_PROGRAM_ATTRIBS_ARB 0x88AC +#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD +#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE +#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF +#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 +#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 +#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 +#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 +#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 +#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 +#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 +#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 +#define GL_MATRIX0_ARB 0x88C0 +#define GL_MATRIX1_ARB 0x88C1 +#define GL_MATRIX2_ARB 0x88C2 +#define GL_MATRIX3_ARB 0x88C3 +#define GL_MATRIX4_ARB 0x88C4 +#define GL_MATRIX5_ARB 0x88C5 +#define GL_MATRIX6_ARB 0x88C6 +#define GL_MATRIX7_ARB 0x88C7 +#define GL_MATRIX8_ARB 0x88C8 +#define GL_MATRIX9_ARB 0x88C9 +#define GL_MATRIX10_ARB 0x88CA +#define GL_MATRIX11_ARB 0x88CB +#define GL_MATRIX12_ARB 0x88CC +#define GL_MATRIX13_ARB 0x88CD +#define GL_MATRIX14_ARB 0x88CE +#define GL_MATRIX15_ARB 0x88CF +#define GL_MATRIX16_ARB 0x88D0 +#define GL_MATRIX17_ARB 0x88D1 +#define GL_MATRIX18_ARB 0x88D2 +#define GL_MATRIX19_ARB 0x88D3 +#define GL_MATRIX20_ARB 0x88D4 +#define GL_MATRIX21_ARB 0x88D5 +#define GL_MATRIX22_ARB 0x88D6 +#define GL_MATRIX23_ARB 0x88D7 +#define GL_MATRIX24_ARB 0x88D8 +#define GL_MATRIX25_ARB 0x88D9 +#define GL_MATRIX26_ARB 0x88DA +#define GL_MATRIX27_ARB 0x88DB +#define GL_MATRIX28_ARB 0x88DC +#define GL_MATRIX29_ARB 0x88DD +#define GL_MATRIX30_ARB 0x88DE +#define GL_MATRIX31_ARB 0x88DF + +typedef void (GLAPIENTRY * PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); +typedef void (GLAPIENTRY * PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint* programs); +typedef void (GLAPIENTRY * PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (GLAPIENTRY * PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (GLAPIENTRY * PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint* programs); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble* params); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble* params); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, void* string); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid** pointer); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble* params); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint* params); +typedef GLboolean (GLAPIENTRY * PFNGLISPROGRAMARBPROC) (GLuint program); +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble* params); +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble* params); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const void* string); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer); + +#define glBindProgramARB GLEW_GET_FUN(__glewBindProgramARB) +#define glDeleteProgramsARB GLEW_GET_FUN(__glewDeleteProgramsARB) +#define glDisableVertexAttribArrayARB GLEW_GET_FUN(__glewDisableVertexAttribArrayARB) +#define glEnableVertexAttribArrayARB GLEW_GET_FUN(__glewEnableVertexAttribArrayARB) +#define glGenProgramsARB GLEW_GET_FUN(__glewGenProgramsARB) +#define glGetProgramEnvParameterdvARB GLEW_GET_FUN(__glewGetProgramEnvParameterdvARB) +#define glGetProgramEnvParameterfvARB GLEW_GET_FUN(__glewGetProgramEnvParameterfvARB) +#define glGetProgramLocalParameterdvARB GLEW_GET_FUN(__glewGetProgramLocalParameterdvARB) +#define glGetProgramLocalParameterfvARB GLEW_GET_FUN(__glewGetProgramLocalParameterfvARB) +#define glGetProgramStringARB GLEW_GET_FUN(__glewGetProgramStringARB) +#define glGetProgramivARB GLEW_GET_FUN(__glewGetProgramivARB) +#define glGetVertexAttribPointervARB GLEW_GET_FUN(__glewGetVertexAttribPointervARB) +#define glGetVertexAttribdvARB GLEW_GET_FUN(__glewGetVertexAttribdvARB) +#define glGetVertexAttribfvARB GLEW_GET_FUN(__glewGetVertexAttribfvARB) +#define glGetVertexAttribivARB GLEW_GET_FUN(__glewGetVertexAttribivARB) +#define glIsProgramARB GLEW_GET_FUN(__glewIsProgramARB) +#define glProgramEnvParameter4dARB GLEW_GET_FUN(__glewProgramEnvParameter4dARB) +#define glProgramEnvParameter4dvARB GLEW_GET_FUN(__glewProgramEnvParameter4dvARB) +#define glProgramEnvParameter4fARB GLEW_GET_FUN(__glewProgramEnvParameter4fARB) +#define glProgramEnvParameter4fvARB GLEW_GET_FUN(__glewProgramEnvParameter4fvARB) +#define glProgramLocalParameter4dARB GLEW_GET_FUN(__glewProgramLocalParameter4dARB) +#define glProgramLocalParameter4dvARB GLEW_GET_FUN(__glewProgramLocalParameter4dvARB) +#define glProgramLocalParameter4fARB GLEW_GET_FUN(__glewProgramLocalParameter4fARB) +#define glProgramLocalParameter4fvARB GLEW_GET_FUN(__glewProgramLocalParameter4fvARB) +#define glProgramStringARB GLEW_GET_FUN(__glewProgramStringARB) +#define glVertexAttrib1dARB GLEW_GET_FUN(__glewVertexAttrib1dARB) +#define glVertexAttrib1dvARB GLEW_GET_FUN(__glewVertexAttrib1dvARB) +#define glVertexAttrib1fARB GLEW_GET_FUN(__glewVertexAttrib1fARB) +#define glVertexAttrib1fvARB GLEW_GET_FUN(__glewVertexAttrib1fvARB) +#define glVertexAttrib1sARB GLEW_GET_FUN(__glewVertexAttrib1sARB) +#define glVertexAttrib1svARB GLEW_GET_FUN(__glewVertexAttrib1svARB) +#define glVertexAttrib2dARB GLEW_GET_FUN(__glewVertexAttrib2dARB) +#define glVertexAttrib2dvARB GLEW_GET_FUN(__glewVertexAttrib2dvARB) +#define glVertexAttrib2fARB GLEW_GET_FUN(__glewVertexAttrib2fARB) +#define glVertexAttrib2fvARB GLEW_GET_FUN(__glewVertexAttrib2fvARB) +#define glVertexAttrib2sARB GLEW_GET_FUN(__glewVertexAttrib2sARB) +#define glVertexAttrib2svARB GLEW_GET_FUN(__glewVertexAttrib2svARB) +#define glVertexAttrib3dARB GLEW_GET_FUN(__glewVertexAttrib3dARB) +#define glVertexAttrib3dvARB GLEW_GET_FUN(__glewVertexAttrib3dvARB) +#define glVertexAttrib3fARB GLEW_GET_FUN(__glewVertexAttrib3fARB) +#define glVertexAttrib3fvARB GLEW_GET_FUN(__glewVertexAttrib3fvARB) +#define glVertexAttrib3sARB GLEW_GET_FUN(__glewVertexAttrib3sARB) +#define glVertexAttrib3svARB GLEW_GET_FUN(__glewVertexAttrib3svARB) +#define glVertexAttrib4NbvARB GLEW_GET_FUN(__glewVertexAttrib4NbvARB) +#define glVertexAttrib4NivARB GLEW_GET_FUN(__glewVertexAttrib4NivARB) +#define glVertexAttrib4NsvARB GLEW_GET_FUN(__glewVertexAttrib4NsvARB) +#define glVertexAttrib4NubARB GLEW_GET_FUN(__glewVertexAttrib4NubARB) +#define glVertexAttrib4NubvARB GLEW_GET_FUN(__glewVertexAttrib4NubvARB) +#define glVertexAttrib4NuivARB GLEW_GET_FUN(__glewVertexAttrib4NuivARB) +#define glVertexAttrib4NusvARB GLEW_GET_FUN(__glewVertexAttrib4NusvARB) +#define glVertexAttrib4bvARB GLEW_GET_FUN(__glewVertexAttrib4bvARB) +#define glVertexAttrib4dARB GLEW_GET_FUN(__glewVertexAttrib4dARB) +#define glVertexAttrib4dvARB GLEW_GET_FUN(__glewVertexAttrib4dvARB) +#define glVertexAttrib4fARB GLEW_GET_FUN(__glewVertexAttrib4fARB) +#define glVertexAttrib4fvARB GLEW_GET_FUN(__glewVertexAttrib4fvARB) +#define glVertexAttrib4ivARB GLEW_GET_FUN(__glewVertexAttrib4ivARB) +#define glVertexAttrib4sARB GLEW_GET_FUN(__glewVertexAttrib4sARB) +#define glVertexAttrib4svARB GLEW_GET_FUN(__glewVertexAttrib4svARB) +#define glVertexAttrib4ubvARB GLEW_GET_FUN(__glewVertexAttrib4ubvARB) +#define glVertexAttrib4uivARB GLEW_GET_FUN(__glewVertexAttrib4uivARB) +#define glVertexAttrib4usvARB GLEW_GET_FUN(__glewVertexAttrib4usvARB) +#define glVertexAttribPointerARB GLEW_GET_FUN(__glewVertexAttribPointerARB) + +#define GLEW_ARB_vertex_program GLEW_GET_VAR(__GLEW_ARB_vertex_program) + +#endif /* GL_ARB_vertex_program */ + +/* -------------------------- GL_ARB_vertex_shader ------------------------- */ + +#ifndef GL_ARB_vertex_shader +#define GL_ARB_vertex_shader 1 + +#define GL_VERTEX_SHADER_ARB 0x8B31 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A +#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D +#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 +#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A + +typedef void (GLAPIENTRY * PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB* name); +typedef void (GLAPIENTRY * PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei* length, GLint *size, GLenum *type, GLcharARB *name); +typedef GLint (GLAPIENTRY * PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB* name); + +#define glBindAttribLocationARB GLEW_GET_FUN(__glewBindAttribLocationARB) +#define glGetActiveAttribARB GLEW_GET_FUN(__glewGetActiveAttribARB) +#define glGetAttribLocationARB GLEW_GET_FUN(__glewGetAttribLocationARB) + +#define GLEW_ARB_vertex_shader GLEW_GET_VAR(__GLEW_ARB_vertex_shader) + +#endif /* GL_ARB_vertex_shader */ + +/* --------------------------- GL_ARB_window_pos --------------------------- */ + +#ifndef GL_ARB_window_pos +#define GL_ARB_window_pos 1 + +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DVARBPROC) (const GLdouble* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FVARBPROC) (const GLfloat* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IVARBPROC) (const GLint* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SVARBPROC) (const GLshort* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DVARBPROC) (const GLdouble* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FVARBPROC) (const GLfloat* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IVARBPROC) (const GLint* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVARBPROC) (const GLshort* p); + +#define glWindowPos2dARB GLEW_GET_FUN(__glewWindowPos2dARB) +#define glWindowPos2dvARB GLEW_GET_FUN(__glewWindowPos2dvARB) +#define glWindowPos2fARB GLEW_GET_FUN(__glewWindowPos2fARB) +#define glWindowPos2fvARB GLEW_GET_FUN(__glewWindowPos2fvARB) +#define glWindowPos2iARB GLEW_GET_FUN(__glewWindowPos2iARB) +#define glWindowPos2ivARB GLEW_GET_FUN(__glewWindowPos2ivARB) +#define glWindowPos2sARB GLEW_GET_FUN(__glewWindowPos2sARB) +#define glWindowPos2svARB GLEW_GET_FUN(__glewWindowPos2svARB) +#define glWindowPos3dARB GLEW_GET_FUN(__glewWindowPos3dARB) +#define glWindowPos3dvARB GLEW_GET_FUN(__glewWindowPos3dvARB) +#define glWindowPos3fARB GLEW_GET_FUN(__glewWindowPos3fARB) +#define glWindowPos3fvARB GLEW_GET_FUN(__glewWindowPos3fvARB) +#define glWindowPos3iARB GLEW_GET_FUN(__glewWindowPos3iARB) +#define glWindowPos3ivARB GLEW_GET_FUN(__glewWindowPos3ivARB) +#define glWindowPos3sARB GLEW_GET_FUN(__glewWindowPos3sARB) +#define glWindowPos3svARB GLEW_GET_FUN(__glewWindowPos3svARB) + +#define GLEW_ARB_window_pos GLEW_GET_VAR(__GLEW_ARB_window_pos) + +#endif /* GL_ARB_window_pos */ + +/* ------------------------- GL_ATIX_point_sprites ------------------------- */ + +#ifndef GL_ATIX_point_sprites +#define GL_ATIX_point_sprites 1 + +#define GL_TEXTURE_POINT_MODE_ATIX 0x60B0 +#define GL_TEXTURE_POINT_ONE_COORD_ATIX 0x60B1 +#define GL_TEXTURE_POINT_SPRITE_ATIX 0x60B2 +#define GL_POINT_SPRITE_CULL_MODE_ATIX 0x60B3 +#define GL_POINT_SPRITE_CULL_CENTER_ATIX 0x60B4 +#define GL_POINT_SPRITE_CULL_CLIP_ATIX 0x60B5 + +#define GLEW_ATIX_point_sprites GLEW_GET_VAR(__GLEW_ATIX_point_sprites) + +#endif /* GL_ATIX_point_sprites */ + +/* ---------------------- GL_ATIX_texture_env_combine3 --------------------- */ + +#ifndef GL_ATIX_texture_env_combine3 +#define GL_ATIX_texture_env_combine3 1 + +#define GL_MODULATE_ADD_ATIX 0x8744 +#define GL_MODULATE_SIGNED_ADD_ATIX 0x8745 +#define GL_MODULATE_SUBTRACT_ATIX 0x8746 + +#define GLEW_ATIX_texture_env_combine3 GLEW_GET_VAR(__GLEW_ATIX_texture_env_combine3) + +#endif /* GL_ATIX_texture_env_combine3 */ + +/* ----------------------- GL_ATIX_texture_env_route ----------------------- */ + +#ifndef GL_ATIX_texture_env_route +#define GL_ATIX_texture_env_route 1 + +#define GL_SECONDARY_COLOR_ATIX 0x8747 +#define GL_TEXTURE_OUTPUT_RGB_ATIX 0x8748 +#define GL_TEXTURE_OUTPUT_ALPHA_ATIX 0x8749 + +#define GLEW_ATIX_texture_env_route GLEW_GET_VAR(__GLEW_ATIX_texture_env_route) + +#endif /* GL_ATIX_texture_env_route */ + +/* ---------------- GL_ATIX_vertex_shader_output_point_size ---------------- */ + +#ifndef GL_ATIX_vertex_shader_output_point_size +#define GL_ATIX_vertex_shader_output_point_size 1 + +#define GL_OUTPUT_POINT_SIZE_ATIX 0x610E + +#define GLEW_ATIX_vertex_shader_output_point_size GLEW_GET_VAR(__GLEW_ATIX_vertex_shader_output_point_size) + +#endif /* GL_ATIX_vertex_shader_output_point_size */ + +/* -------------------------- GL_ATI_draw_buffers -------------------------- */ + +#ifndef GL_ATI_draw_buffers +#define GL_ATI_draw_buffers 1 + +#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 +#define GL_DRAW_BUFFER0_ATI 0x8825 +#define GL_DRAW_BUFFER1_ATI 0x8826 +#define GL_DRAW_BUFFER2_ATI 0x8827 +#define GL_DRAW_BUFFER3_ATI 0x8828 +#define GL_DRAW_BUFFER4_ATI 0x8829 +#define GL_DRAW_BUFFER5_ATI 0x882A +#define GL_DRAW_BUFFER6_ATI 0x882B +#define GL_DRAW_BUFFER7_ATI 0x882C +#define GL_DRAW_BUFFER8_ATI 0x882D +#define GL_DRAW_BUFFER9_ATI 0x882E +#define GL_DRAW_BUFFER10_ATI 0x882F +#define GL_DRAW_BUFFER11_ATI 0x8830 +#define GL_DRAW_BUFFER12_ATI 0x8831 +#define GL_DRAW_BUFFER13_ATI 0x8832 +#define GL_DRAW_BUFFER14_ATI 0x8833 +#define GL_DRAW_BUFFER15_ATI 0x8834 + +typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum* bufs); + +#define glDrawBuffersATI GLEW_GET_FUN(__glewDrawBuffersATI) + +#define GLEW_ATI_draw_buffers GLEW_GET_VAR(__GLEW_ATI_draw_buffers) + +#endif /* GL_ATI_draw_buffers */ + +/* -------------------------- GL_ATI_element_array ------------------------- */ + +#ifndef GL_ATI_element_array +#define GL_ATI_element_array 1 + +#define GL_ELEMENT_ARRAY_ATI 0x8768 +#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 +#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A + +typedef void (GLAPIENTRY * PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); +typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); +typedef void (GLAPIENTRY * PFNGLELEMENTPOINTERATIPROC) (GLenum type, const void* pointer); + +#define glDrawElementArrayATI GLEW_GET_FUN(__glewDrawElementArrayATI) +#define glDrawRangeElementArrayATI GLEW_GET_FUN(__glewDrawRangeElementArrayATI) +#define glElementPointerATI GLEW_GET_FUN(__glewElementPointerATI) + +#define GLEW_ATI_element_array GLEW_GET_VAR(__GLEW_ATI_element_array) + +#endif /* GL_ATI_element_array */ + +/* ------------------------- GL_ATI_envmap_bumpmap ------------------------- */ + +#ifndef GL_ATI_envmap_bumpmap +#define GL_ATI_envmap_bumpmap 1 + +#define GL_BUMP_ROT_MATRIX_ATI 0x8775 +#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 +#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 +#define GL_BUMP_TEX_UNITS_ATI 0x8778 +#define GL_DUDV_ATI 0x8779 +#define GL_DU8DV8_ATI 0x877A +#define GL_BUMP_ENVMAP_ATI 0x877B +#define GL_BUMP_TARGET_ATI 0x877C + +typedef void (GLAPIENTRY * PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); +typedef void (GLAPIENTRY * PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); +typedef void (GLAPIENTRY * PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); +typedef void (GLAPIENTRY * PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); + +#define glGetTexBumpParameterfvATI GLEW_GET_FUN(__glewGetTexBumpParameterfvATI) +#define glGetTexBumpParameterivATI GLEW_GET_FUN(__glewGetTexBumpParameterivATI) +#define glTexBumpParameterfvATI GLEW_GET_FUN(__glewTexBumpParameterfvATI) +#define glTexBumpParameterivATI GLEW_GET_FUN(__glewTexBumpParameterivATI) + +#define GLEW_ATI_envmap_bumpmap GLEW_GET_VAR(__GLEW_ATI_envmap_bumpmap) + +#endif /* GL_ATI_envmap_bumpmap */ + +/* ------------------------- GL_ATI_fragment_shader ------------------------ */ + +#ifndef GL_ATI_fragment_shader +#define GL_ATI_fragment_shader 1 + +#define GL_RED_BIT_ATI 0x00000001 +#define GL_2X_BIT_ATI 0x00000001 +#define GL_4X_BIT_ATI 0x00000002 +#define GL_GREEN_BIT_ATI 0x00000002 +#define GL_COMP_BIT_ATI 0x00000002 +#define GL_BLUE_BIT_ATI 0x00000004 +#define GL_8X_BIT_ATI 0x00000004 +#define GL_NEGATE_BIT_ATI 0x00000004 +#define GL_BIAS_BIT_ATI 0x00000008 +#define GL_HALF_BIT_ATI 0x00000008 +#define GL_QUARTER_BIT_ATI 0x00000010 +#define GL_EIGHTH_BIT_ATI 0x00000020 +#define GL_SATURATE_BIT_ATI 0x00000040 +#define GL_FRAGMENT_SHADER_ATI 0x8920 +#define GL_REG_0_ATI 0x8921 +#define GL_REG_1_ATI 0x8922 +#define GL_REG_2_ATI 0x8923 +#define GL_REG_3_ATI 0x8924 +#define GL_REG_4_ATI 0x8925 +#define GL_REG_5_ATI 0x8926 +#define GL_CON_0_ATI 0x8941 +#define GL_CON_1_ATI 0x8942 +#define GL_CON_2_ATI 0x8943 +#define GL_CON_3_ATI 0x8944 +#define GL_CON_4_ATI 0x8945 +#define GL_CON_5_ATI 0x8946 +#define GL_CON_6_ATI 0x8947 +#define GL_CON_7_ATI 0x8948 +#define GL_MOV_ATI 0x8961 +#define GL_ADD_ATI 0x8963 +#define GL_MUL_ATI 0x8964 +#define GL_SUB_ATI 0x8965 +#define GL_DOT3_ATI 0x8966 +#define GL_DOT4_ATI 0x8967 +#define GL_MAD_ATI 0x8968 +#define GL_LERP_ATI 0x8969 +#define GL_CND_ATI 0x896A +#define GL_CND0_ATI 0x896B +#define GL_DOT2_ADD_ATI 0x896C +#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D +#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E +#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F +#define GL_NUM_PASSES_ATI 0x8970 +#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 +#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 +#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 +#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 +#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 +#define GL_SWIZZLE_STR_ATI 0x8976 +#define GL_SWIZZLE_STQ_ATI 0x8977 +#define GL_SWIZZLE_STR_DR_ATI 0x8978 +#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 +#define GL_SWIZZLE_STRQ_ATI 0x897A +#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B + +typedef void (GLAPIENTRY * PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (GLAPIENTRY * PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (GLAPIENTRY * PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (GLAPIENTRY * PFNGLBEGINFRAGMENTSHADERATIPROC) (void); +typedef void (GLAPIENTRY * PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (GLAPIENTRY * PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (GLAPIENTRY * PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (GLAPIENTRY * PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (GLAPIENTRY * PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (GLAPIENTRY * PFNGLENDFRAGMENTSHADERATIPROC) (void); +typedef GLuint (GLAPIENTRY * PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); +typedef void (GLAPIENTRY * PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); +typedef void (GLAPIENTRY * PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); +typedef void (GLAPIENTRY * PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat* value); + +#define glAlphaFragmentOp1ATI GLEW_GET_FUN(__glewAlphaFragmentOp1ATI) +#define glAlphaFragmentOp2ATI GLEW_GET_FUN(__glewAlphaFragmentOp2ATI) +#define glAlphaFragmentOp3ATI GLEW_GET_FUN(__glewAlphaFragmentOp3ATI) +#define glBeginFragmentShaderATI GLEW_GET_FUN(__glewBeginFragmentShaderATI) +#define glBindFragmentShaderATI GLEW_GET_FUN(__glewBindFragmentShaderATI) +#define glColorFragmentOp1ATI GLEW_GET_FUN(__glewColorFragmentOp1ATI) +#define glColorFragmentOp2ATI GLEW_GET_FUN(__glewColorFragmentOp2ATI) +#define glColorFragmentOp3ATI GLEW_GET_FUN(__glewColorFragmentOp3ATI) +#define glDeleteFragmentShaderATI GLEW_GET_FUN(__glewDeleteFragmentShaderATI) +#define glEndFragmentShaderATI GLEW_GET_FUN(__glewEndFragmentShaderATI) +#define glGenFragmentShadersATI GLEW_GET_FUN(__glewGenFragmentShadersATI) +#define glPassTexCoordATI GLEW_GET_FUN(__glewPassTexCoordATI) +#define glSampleMapATI GLEW_GET_FUN(__glewSampleMapATI) +#define glSetFragmentShaderConstantATI GLEW_GET_FUN(__glewSetFragmentShaderConstantATI) + +#define GLEW_ATI_fragment_shader GLEW_GET_VAR(__GLEW_ATI_fragment_shader) + +#endif /* GL_ATI_fragment_shader */ + +/* ------------------------ GL_ATI_map_object_buffer ----------------------- */ + +#ifndef GL_ATI_map_object_buffer +#define GL_ATI_map_object_buffer 1 + +typedef void* (GLAPIENTRY * PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (GLAPIENTRY * PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); + +#define glMapObjectBufferATI GLEW_GET_FUN(__glewMapObjectBufferATI) +#define glUnmapObjectBufferATI GLEW_GET_FUN(__glewUnmapObjectBufferATI) + +#define GLEW_ATI_map_object_buffer GLEW_GET_VAR(__GLEW_ATI_map_object_buffer) + +#endif /* GL_ATI_map_object_buffer */ + +/* -------------------------- GL_ATI_pn_triangles -------------------------- */ + +#ifndef GL_ATI_pn_triangles +#define GL_ATI_pn_triangles 1 + +#define GL_PN_TRIANGLES_ATI 0x87F0 +#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 +#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 +#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 +#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 +#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 +#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 +#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 +#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 + +typedef void (GLAPIENTRY * PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); + +#define glPNTrianglesfATI GLEW_GET_FUN(__glPNTrianglewesfATI) +#define glPNTrianglesiATI GLEW_GET_FUN(__glPNTrianglewesiATI) + +#define GLEW_ATI_pn_triangles GLEW_GET_VAR(__GLEW_ATI_pn_triangles) + +#endif /* GL_ATI_pn_triangles */ + +/* ------------------------ GL_ATI_separate_stencil ------------------------ */ + +#ifndef GL_ATI_separate_stencil +#define GL_ATI_separate_stencil 1 + +#define GL_STENCIL_BACK_FUNC_ATI 0x8800 +#define GL_STENCIL_BACK_FAIL_ATI 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 + +typedef void (GLAPIENTRY * PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +typedef void (GLAPIENTRY * PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); + +#define glStencilFuncSeparateATI GLEW_GET_FUN(__glewStencilFuncSeparateATI) +#define glStencilOpSeparateATI GLEW_GET_FUN(__glewStencilOpSeparateATI) + +#define GLEW_ATI_separate_stencil GLEW_GET_VAR(__GLEW_ATI_separate_stencil) + +#endif /* GL_ATI_separate_stencil */ + +/* ----------------------- GL_ATI_shader_texture_lod ----------------------- */ + +#ifndef GL_ATI_shader_texture_lod +#define GL_ATI_shader_texture_lod 1 + +#define GLEW_ATI_shader_texture_lod GLEW_GET_VAR(__GLEW_ATI_shader_texture_lod) + +#endif /* GL_ATI_shader_texture_lod */ + +/* ---------------------- GL_ATI_text_fragment_shader ---------------------- */ + +#ifndef GL_ATI_text_fragment_shader +#define GL_ATI_text_fragment_shader 1 + +#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 + +#define GLEW_ATI_text_fragment_shader GLEW_GET_VAR(__GLEW_ATI_text_fragment_shader) + +#endif /* GL_ATI_text_fragment_shader */ + +/* --------------------- GL_ATI_texture_compression_3dc -------------------- */ + +#ifndef GL_ATI_texture_compression_3dc +#define GL_ATI_texture_compression_3dc 1 + +#define GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837 + +#define GLEW_ATI_texture_compression_3dc GLEW_GET_VAR(__GLEW_ATI_texture_compression_3dc) + +#endif /* GL_ATI_texture_compression_3dc */ + +/* ---------------------- GL_ATI_texture_env_combine3 ---------------------- */ + +#ifndef GL_ATI_texture_env_combine3 +#define GL_ATI_texture_env_combine3 1 + +#define GL_MODULATE_ADD_ATI 0x8744 +#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 +#define GL_MODULATE_SUBTRACT_ATI 0x8746 + +#define GLEW_ATI_texture_env_combine3 GLEW_GET_VAR(__GLEW_ATI_texture_env_combine3) + +#endif /* GL_ATI_texture_env_combine3 */ + +/* -------------------------- GL_ATI_texture_float ------------------------- */ + +#ifndef GL_ATI_texture_float +#define GL_ATI_texture_float 1 + +#define GL_RGBA_FLOAT32_ATI 0x8814 +#define GL_RGB_FLOAT32_ATI 0x8815 +#define GL_ALPHA_FLOAT32_ATI 0x8816 +#define GL_INTENSITY_FLOAT32_ATI 0x8817 +#define GL_LUMINANCE_FLOAT32_ATI 0x8818 +#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 +#define GL_RGBA_FLOAT16_ATI 0x881A +#define GL_RGB_FLOAT16_ATI 0x881B +#define GL_ALPHA_FLOAT16_ATI 0x881C +#define GL_INTENSITY_FLOAT16_ATI 0x881D +#define GL_LUMINANCE_FLOAT16_ATI 0x881E +#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F + +#define GLEW_ATI_texture_float GLEW_GET_VAR(__GLEW_ATI_texture_float) + +#endif /* GL_ATI_texture_float */ + +/* ----------------------- GL_ATI_texture_mirror_once ---------------------- */ + +#ifndef GL_ATI_texture_mirror_once +#define GL_ATI_texture_mirror_once 1 + +#define GL_MIRROR_CLAMP_ATI 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 + +#define GLEW_ATI_texture_mirror_once GLEW_GET_VAR(__GLEW_ATI_texture_mirror_once) + +#endif /* GL_ATI_texture_mirror_once */ + +/* ----------------------- GL_ATI_vertex_array_object ---------------------- */ + +#ifndef GL_ATI_vertex_array_object +#define GL_ATI_vertex_array_object 1 + +#define GL_STATIC_ATI 0x8760 +#define GL_DYNAMIC_ATI 0x8761 +#define GL_PRESERVE_ATI 0x8762 +#define GL_DISCARD_ATI 0x8763 +#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 +#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 +#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 +#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 + +typedef void (GLAPIENTRY * PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (GLAPIENTRY * PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (GLAPIENTRY * PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint* params); +typedef GLboolean (GLAPIENTRY * PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); +typedef GLuint (GLAPIENTRY * PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const void* pointer, GLenum usage); +typedef void (GLAPIENTRY * PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const void* pointer, GLenum preserve); +typedef void (GLAPIENTRY * PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); + +#define glArrayObjectATI GLEW_GET_FUN(__glewArrayObjectATI) +#define glFreeObjectBufferATI GLEW_GET_FUN(__glewFreeObjectBufferATI) +#define glGetArrayObjectfvATI GLEW_GET_FUN(__glewGetArrayObjectfvATI) +#define glGetArrayObjectivATI GLEW_GET_FUN(__glewGetArrayObjectivATI) +#define glGetObjectBufferfvATI GLEW_GET_FUN(__glewGetObjectBufferfvATI) +#define glGetObjectBufferivATI GLEW_GET_FUN(__glewGetObjectBufferivATI) +#define glGetVariantArrayObjectfvATI GLEW_GET_FUN(__glewGetVariantArrayObjectfvATI) +#define glGetVariantArrayObjectivATI GLEW_GET_FUN(__glewGetVariantArrayObjectivATI) +#define glIsObjectBufferATI GLEW_GET_FUN(__glewIsObjectBufferATI) +#define glNewObjectBufferATI GLEW_GET_FUN(__glewNewObjectBufferATI) +#define glUpdateObjectBufferATI GLEW_GET_FUN(__glewUpdateObjectBufferATI) +#define glVariantArrayObjectATI GLEW_GET_FUN(__glewVariantArrayObjectATI) + +#define GLEW_ATI_vertex_array_object GLEW_GET_VAR(__GLEW_ATI_vertex_array_object) + +#endif /* GL_ATI_vertex_array_object */ + +/* ------------------- GL_ATI_vertex_attrib_array_object ------------------- */ + +#ifndef GL_ATI_vertex_attrib_array_object +#define GL_ATI_vertex_attrib_array_object 1 + +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); + +#define glGetVertexAttribArrayObjectfvATI GLEW_GET_FUN(__glewGetVertexAttribArrayObjectfvATI) +#define glGetVertexAttribArrayObjectivATI GLEW_GET_FUN(__glewGetVertexAttribArrayObjectivATI) +#define glVertexAttribArrayObjectATI GLEW_GET_FUN(__glewVertexAttribArrayObjectATI) + +#define GLEW_ATI_vertex_attrib_array_object GLEW_GET_VAR(__GLEW_ATI_vertex_attrib_array_object) + +#endif /* GL_ATI_vertex_attrib_array_object */ + +/* ------------------------- GL_ATI_vertex_streams ------------------------- */ + +#ifndef GL_ATI_vertex_streams +#define GL_ATI_vertex_streams 1 + +#define GL_MAX_VERTEX_STREAMS_ATI 0x876B +#define GL_VERTEX_SOURCE_ATI 0x876C +#define GL_VERTEX_STREAM0_ATI 0x876D +#define GL_VERTEX_STREAM1_ATI 0x876E +#define GL_VERTEX_STREAM2_ATI 0x876F +#define GL_VERTEX_STREAM3_ATI 0x8770 +#define GL_VERTEX_STREAM4_ATI 0x8771 +#define GL_VERTEX_STREAM5_ATI 0x8772 +#define GL_VERTEX_STREAM6_ATI 0x8773 +#define GL_VERTEX_STREAM7_ATI 0x8774 + +typedef void (GLAPIENTRY * PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); +typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte x, GLbyte y, GLbyte z); +typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *v); +typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *v); +typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *v); + +#define glClientActiveVertexStreamATI GLEW_GET_FUN(__glewClientActiveVertexStreamATI) +#define glNormalStream3bATI GLEW_GET_FUN(__glewNormalStream3bATI) +#define glNormalStream3bvATI GLEW_GET_FUN(__glewNormalStream3bvATI) +#define glNormalStream3dATI GLEW_GET_FUN(__glewNormalStream3dATI) +#define glNormalStream3dvATI GLEW_GET_FUN(__glewNormalStream3dvATI) +#define glNormalStream3fATI GLEW_GET_FUN(__glewNormalStream3fATI) +#define glNormalStream3fvATI GLEW_GET_FUN(__glewNormalStream3fvATI) +#define glNormalStream3iATI GLEW_GET_FUN(__glewNormalStream3iATI) +#define glNormalStream3ivATI GLEW_GET_FUN(__glewNormalStream3ivATI) +#define glNormalStream3sATI GLEW_GET_FUN(__glewNormalStream3sATI) +#define glNormalStream3svATI GLEW_GET_FUN(__glewNormalStream3svATI) +#define glVertexBlendEnvfATI GLEW_GET_FUN(__glewVertexBlendEnvfATI) +#define glVertexBlendEnviATI GLEW_GET_FUN(__glewVertexBlendEnviATI) +#define glVertexStream2dATI GLEW_GET_FUN(__glewVertexStream2dATI) +#define glVertexStream2dvATI GLEW_GET_FUN(__glewVertexStream2dvATI) +#define glVertexStream2fATI GLEW_GET_FUN(__glewVertexStream2fATI) +#define glVertexStream2fvATI GLEW_GET_FUN(__glewVertexStream2fvATI) +#define glVertexStream2iATI GLEW_GET_FUN(__glewVertexStream2iATI) +#define glVertexStream2ivATI GLEW_GET_FUN(__glewVertexStream2ivATI) +#define glVertexStream2sATI GLEW_GET_FUN(__glewVertexStream2sATI) +#define glVertexStream2svATI GLEW_GET_FUN(__glewVertexStream2svATI) +#define glVertexStream3dATI GLEW_GET_FUN(__glewVertexStream3dATI) +#define glVertexStream3dvATI GLEW_GET_FUN(__glewVertexStream3dvATI) +#define glVertexStream3fATI GLEW_GET_FUN(__glewVertexStream3fATI) +#define glVertexStream3fvATI GLEW_GET_FUN(__glewVertexStream3fvATI) +#define glVertexStream3iATI GLEW_GET_FUN(__glewVertexStream3iATI) +#define glVertexStream3ivATI GLEW_GET_FUN(__glewVertexStream3ivATI) +#define glVertexStream3sATI GLEW_GET_FUN(__glewVertexStream3sATI) +#define glVertexStream3svATI GLEW_GET_FUN(__glewVertexStream3svATI) +#define glVertexStream4dATI GLEW_GET_FUN(__glewVertexStream4dATI) +#define glVertexStream4dvATI GLEW_GET_FUN(__glewVertexStream4dvATI) +#define glVertexStream4fATI GLEW_GET_FUN(__glewVertexStream4fATI) +#define glVertexStream4fvATI GLEW_GET_FUN(__glewVertexStream4fvATI) +#define glVertexStream4iATI GLEW_GET_FUN(__glewVertexStream4iATI) +#define glVertexStream4ivATI GLEW_GET_FUN(__glewVertexStream4ivATI) +#define glVertexStream4sATI GLEW_GET_FUN(__glewVertexStream4sATI) +#define glVertexStream4svATI GLEW_GET_FUN(__glewVertexStream4svATI) + +#define GLEW_ATI_vertex_streams GLEW_GET_VAR(__GLEW_ATI_vertex_streams) + +#endif /* GL_ATI_vertex_streams */ + +/* --------------------------- GL_EXT_422_pixels --------------------------- */ + +#ifndef GL_EXT_422_pixels +#define GL_EXT_422_pixels 1 + +#define GL_422_EXT 0x80CC +#define GL_422_REV_EXT 0x80CD +#define GL_422_AVERAGE_EXT 0x80CE +#define GL_422_REV_AVERAGE_EXT 0x80CF + +#define GLEW_EXT_422_pixels GLEW_GET_VAR(__GLEW_EXT_422_pixels) + +#endif /* GL_EXT_422_pixels */ + +/* ---------------------------- GL_EXT_Cg_shader --------------------------- */ + +#ifndef GL_EXT_Cg_shader +#define GL_EXT_Cg_shader 1 + +#define GL_CG_VERTEX_SHADER_EXT 0x890E +#define GL_CG_FRAGMENT_SHADER_EXT 0x890F + +#define GLEW_EXT_Cg_shader GLEW_GET_VAR(__GLEW_EXT_Cg_shader) + +#endif /* GL_EXT_Cg_shader */ + +/* ------------------------------ GL_EXT_abgr ------------------------------ */ + +#ifndef GL_EXT_abgr +#define GL_EXT_abgr 1 + +#define GL_ABGR_EXT 0x8000 + +#define GLEW_EXT_abgr GLEW_GET_VAR(__GLEW_EXT_abgr) + +#endif /* GL_EXT_abgr */ + +/* ------------------------------ GL_EXT_bgra ------------------------------ */ + +#ifndef GL_EXT_bgra +#define GL_EXT_bgra 1 + +#define GL_BGR_EXT 0x80E0 +#define GL_BGRA_EXT 0x80E1 + +#define GLEW_EXT_bgra GLEW_GET_VAR(__GLEW_EXT_bgra) + +#endif /* GL_EXT_bgra */ + +/* ------------------------ GL_EXT_bindable_uniform ------------------------ */ + +#ifndef GL_EXT_bindable_uniform +#define GL_EXT_bindable_uniform 1 + +#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 +#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 +#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 +#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED +#define GL_UNIFORM_BUFFER_EXT 0x8DEE +#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF + +typedef GLint (GLAPIENTRY * PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); +typedef GLintptr (GLAPIENTRY * PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); +typedef void (GLAPIENTRY * PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); + +#define glGetUniformBufferSizeEXT GLEW_GET_FUN(__glewGetUniformBufferSizeEXT) +#define glGetUniformOffsetEXT GLEW_GET_FUN(__glewGetUniformOffsetEXT) +#define glUniformBufferEXT GLEW_GET_FUN(__glewUniformBufferEXT) + +#define GLEW_EXT_bindable_uniform GLEW_GET_VAR(__GLEW_EXT_bindable_uniform) + +#endif /* GL_EXT_bindable_uniform */ + +/* --------------------------- GL_EXT_blend_color -------------------------- */ + +#ifndef GL_EXT_blend_color +#define GL_EXT_blend_color 1 + +#define GL_CONSTANT_COLOR_EXT 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 +#define GL_CONSTANT_ALPHA_EXT 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 +#define GL_BLEND_COLOR_EXT 0x8005 + +typedef void (GLAPIENTRY * PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); + +#define glBlendColorEXT GLEW_GET_FUN(__glewBlendColorEXT) + +#define GLEW_EXT_blend_color GLEW_GET_VAR(__GLEW_EXT_blend_color) + +#endif /* GL_EXT_blend_color */ + +/* --------------------- GL_EXT_blend_equation_separate -------------------- */ + +#ifndef GL_EXT_blend_equation_separate +#define GL_EXT_blend_equation_separate 1 + +#define GL_BLEND_EQUATION_RGB_EXT 0x8009 +#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D + +typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); + +#define glBlendEquationSeparateEXT GLEW_GET_FUN(__glewBlendEquationSeparateEXT) + +#define GLEW_EXT_blend_equation_separate GLEW_GET_VAR(__GLEW_EXT_blend_equation_separate) + +#endif /* GL_EXT_blend_equation_separate */ + +/* ----------------------- GL_EXT_blend_func_separate ---------------------- */ + +#ifndef GL_EXT_blend_func_separate +#define GL_EXT_blend_func_separate 1 + +#define GL_BLEND_DST_RGB_EXT 0x80C8 +#define GL_BLEND_SRC_RGB_EXT 0x80C9 +#define GL_BLEND_DST_ALPHA_EXT 0x80CA +#define GL_BLEND_SRC_ALPHA_EXT 0x80CB + +typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); + +#define glBlendFuncSeparateEXT GLEW_GET_FUN(__glewBlendFuncSeparateEXT) + +#define GLEW_EXT_blend_func_separate GLEW_GET_VAR(__GLEW_EXT_blend_func_separate) + +#endif /* GL_EXT_blend_func_separate */ + +/* ------------------------- GL_EXT_blend_logic_op ------------------------- */ + +#ifndef GL_EXT_blend_logic_op +#define GL_EXT_blend_logic_op 1 + +#define GLEW_EXT_blend_logic_op GLEW_GET_VAR(__GLEW_EXT_blend_logic_op) + +#endif /* GL_EXT_blend_logic_op */ + +/* -------------------------- GL_EXT_blend_minmax -------------------------- */ + +#ifndef GL_EXT_blend_minmax +#define GL_EXT_blend_minmax 1 + +#define GL_FUNC_ADD_EXT 0x8006 +#define GL_MIN_EXT 0x8007 +#define GL_MAX_EXT 0x8008 +#define GL_BLEND_EQUATION_EXT 0x8009 + +typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); + +#define glBlendEquationEXT GLEW_GET_FUN(__glewBlendEquationEXT) + +#define GLEW_EXT_blend_minmax GLEW_GET_VAR(__GLEW_EXT_blend_minmax) + +#endif /* GL_EXT_blend_minmax */ + +/* ------------------------- GL_EXT_blend_subtract ------------------------- */ + +#ifndef GL_EXT_blend_subtract +#define GL_EXT_blend_subtract 1 + +#define GL_FUNC_SUBTRACT_EXT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B + +#define GLEW_EXT_blend_subtract GLEW_GET_VAR(__GLEW_EXT_blend_subtract) + +#endif /* GL_EXT_blend_subtract */ + +/* ------------------------ GL_EXT_clip_volume_hint ------------------------ */ + +#ifndef GL_EXT_clip_volume_hint +#define GL_EXT_clip_volume_hint 1 + +#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 + +#define GLEW_EXT_clip_volume_hint GLEW_GET_VAR(__GLEW_EXT_clip_volume_hint) + +#endif /* GL_EXT_clip_volume_hint */ + +/* ------------------------------ GL_EXT_cmyka ----------------------------- */ + +#ifndef GL_EXT_cmyka +#define GL_EXT_cmyka 1 + +#define GL_CMYK_EXT 0x800C +#define GL_CMYKA_EXT 0x800D +#define GL_PACK_CMYK_HINT_EXT 0x800E +#define GL_UNPACK_CMYK_HINT_EXT 0x800F + +#define GLEW_EXT_cmyka GLEW_GET_VAR(__GLEW_EXT_cmyka) + +#endif /* GL_EXT_cmyka */ + +/* ------------------------- GL_EXT_color_subtable ------------------------- */ + +#ifndef GL_EXT_color_subtable +#define GL_EXT_color_subtable 1 + +typedef void (GLAPIENTRY * PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void* data); +typedef void (GLAPIENTRY * PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); + +#define glColorSubTableEXT GLEW_GET_FUN(__glewColorSubTableEXT) +#define glCopyColorSubTableEXT GLEW_GET_FUN(__glewCopyColorSubTableEXT) + +#define GLEW_EXT_color_subtable GLEW_GET_VAR(__GLEW_EXT_color_subtable) + +#endif /* GL_EXT_color_subtable */ + +/* ---------------------- GL_EXT_compiled_vertex_array --------------------- */ + +#ifndef GL_EXT_compiled_vertex_array +#define GL_EXT_compiled_vertex_array 1 + +typedef void (GLAPIENTRY * PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); +typedef void (GLAPIENTRY * PFNGLUNLOCKARRAYSEXTPROC) (void); + +#define glLockArraysEXT GLEW_GET_FUN(__glewLockArraysEXT) +#define glUnlockArraysEXT GLEW_GET_FUN(__glewUnlockArraysEXT) + +#define GLEW_EXT_compiled_vertex_array GLEW_GET_VAR(__GLEW_EXT_compiled_vertex_array) + +#endif /* GL_EXT_compiled_vertex_array */ + +/* --------------------------- GL_EXT_convolution -------------------------- */ + +#ifndef GL_EXT_convolution +#define GL_EXT_convolution 1 + +#define GL_CONVOLUTION_1D_EXT 0x8010 +#define GL_CONVOLUTION_2D_EXT 0x8011 +#define GL_SEPARABLE_2D_EXT 0x8012 +#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 +#define GL_REDUCE_EXT 0x8016 +#define GL_CONVOLUTION_FORMAT_EXT 0x8017 +#define GL_CONVOLUTION_WIDTH_EXT 0x8018 +#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 + +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void* image); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* image); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void* image); +typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void* row, void* column, void* span); +typedef void (GLAPIENTRY * PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* row, const void* column); + +#define glConvolutionFilter1DEXT GLEW_GET_FUN(__glewConvolutionFilter1DEXT) +#define glConvolutionFilter2DEXT GLEW_GET_FUN(__glewConvolutionFilter2DEXT) +#define glConvolutionParameterfEXT GLEW_GET_FUN(__glewConvolutionParameterfEXT) +#define glConvolutionParameterfvEXT GLEW_GET_FUN(__glewConvolutionParameterfvEXT) +#define glConvolutionParameteriEXT GLEW_GET_FUN(__glewConvolutionParameteriEXT) +#define glConvolutionParameterivEXT GLEW_GET_FUN(__glewConvolutionParameterivEXT) +#define glCopyConvolutionFilter1DEXT GLEW_GET_FUN(__glewCopyConvolutionFilter1DEXT) +#define glCopyConvolutionFilter2DEXT GLEW_GET_FUN(__glewCopyConvolutionFilter2DEXT) +#define glGetConvolutionFilterEXT GLEW_GET_FUN(__glewGetConvolutionFilterEXT) +#define glGetConvolutionParameterfvEXT GLEW_GET_FUN(__glewGetConvolutionParameterfvEXT) +#define glGetConvolutionParameterivEXT GLEW_GET_FUN(__glewGetConvolutionParameterivEXT) +#define glGetSeparableFilterEXT GLEW_GET_FUN(__glewGetSeparableFilterEXT) +#define glSeparableFilter2DEXT GLEW_GET_FUN(__glewSeparableFilter2DEXT) + +#define GLEW_EXT_convolution GLEW_GET_VAR(__GLEW_EXT_convolution) + +#endif /* GL_EXT_convolution */ + +/* ------------------------ GL_EXT_coordinate_frame ------------------------ */ + +#ifndef GL_EXT_coordinate_frame +#define GL_EXT_coordinate_frame 1 + +#define GL_TANGENT_ARRAY_EXT 0x8439 +#define GL_BINORMAL_ARRAY_EXT 0x843A +#define GL_CURRENT_TANGENT_EXT 0x843B +#define GL_CURRENT_BINORMAL_EXT 0x843C +#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E +#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F +#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 +#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 +#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 +#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 +#define GL_MAP1_TANGENT_EXT 0x8444 +#define GL_MAP2_TANGENT_EXT 0x8445 +#define GL_MAP1_BINORMAL_EXT 0x8446 +#define GL_MAP2_BINORMAL_EXT 0x8447 + +typedef void (GLAPIENTRY * PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, void* pointer); +typedef void (GLAPIENTRY * PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, void* pointer); + +#define glBinormalPointerEXT GLEW_GET_FUN(__glewBinormalPointerEXT) +#define glTangentPointerEXT GLEW_GET_FUN(__glewTangentPointerEXT) + +#define GLEW_EXT_coordinate_frame GLEW_GET_VAR(__GLEW_EXT_coordinate_frame) + +#endif /* GL_EXT_coordinate_frame */ + +/* -------------------------- GL_EXT_copy_texture -------------------------- */ + +#ifndef GL_EXT_copy_texture +#define GL_EXT_copy_texture 1 + +typedef void (GLAPIENTRY * PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (GLAPIENTRY * PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +#define glCopyTexImage1DEXT GLEW_GET_FUN(__glewCopyTexImage1DEXT) +#define glCopyTexImage2DEXT GLEW_GET_FUN(__glewCopyTexImage2DEXT) +#define glCopyTexSubImage1DEXT GLEW_GET_FUN(__glewCopyTexSubImage1DEXT) +#define glCopyTexSubImage2DEXT GLEW_GET_FUN(__glewCopyTexSubImage2DEXT) +#define glCopyTexSubImage3DEXT GLEW_GET_FUN(__glewCopyTexSubImage3DEXT) + +#define GLEW_EXT_copy_texture GLEW_GET_VAR(__GLEW_EXT_copy_texture) + +#endif /* GL_EXT_copy_texture */ + +/* --------------------------- GL_EXT_cull_vertex -------------------------- */ + +#ifndef GL_EXT_cull_vertex +#define GL_EXT_cull_vertex 1 + +typedef void (GLAPIENTRY * PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble* params); +typedef void (GLAPIENTRY * PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat* params); + +#define glCullParameterdvEXT GLEW_GET_FUN(__glewCullParameterdvEXT) +#define glCullParameterfvEXT GLEW_GET_FUN(__glewCullParameterfvEXT) + +#define GLEW_EXT_cull_vertex GLEW_GET_VAR(__GLEW_EXT_cull_vertex) + +#endif /* GL_EXT_cull_vertex */ + +/* ------------------------ GL_EXT_depth_bounds_test ----------------------- */ + +#ifndef GL_EXT_depth_bounds_test +#define GL_EXT_depth_bounds_test 1 + +#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 +#define GL_DEPTH_BOUNDS_EXT 0x8891 + +typedef void (GLAPIENTRY * PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); + +#define glDepthBoundsEXT GLEW_GET_FUN(__glewDepthBoundsEXT) + +#define GLEW_EXT_depth_bounds_test GLEW_GET_VAR(__GLEW_EXT_depth_bounds_test) + +#endif /* GL_EXT_depth_bounds_test */ + +/* -------------------------- GL_EXT_draw_buffers2 ------------------------- */ + +#ifndef GL_EXT_draw_buffers2 +#define GL_EXT_draw_buffers2 1 + +typedef void (GLAPIENTRY * PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (GLAPIENTRY * PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef void (GLAPIENTRY * PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef void (GLAPIENTRY * PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); +typedef void (GLAPIENTRY * PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); +typedef GLboolean (GLAPIENTRY * PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); + +#define glColorMaskIndexedEXT GLEW_GET_FUN(__glewColorMaskIndexedEXT) +#define glDisableIndexedEXT GLEW_GET_FUN(__glewDisableIndexedEXT) +#define glEnableIndexedEXT GLEW_GET_FUN(__glewEnableIndexedEXT) +#define glGetBooleanIndexedvEXT GLEW_GET_FUN(__glewGetBooleanIndexedvEXT) +#define glGetIntegerIndexedvEXT GLEW_GET_FUN(__glewGetIntegerIndexedvEXT) +#define glIsEnabledIndexedEXT GLEW_GET_FUN(__glewIsEnabledIndexedEXT) + +#define GLEW_EXT_draw_buffers2 GLEW_GET_VAR(__GLEW_EXT_draw_buffers2) + +#endif /* GL_EXT_draw_buffers2 */ + +/* ------------------------- GL_EXT_draw_instanced ------------------------- */ + +#ifndef GL_EXT_draw_instanced +#define GL_EXT_draw_instanced 1 + +typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); +typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); + +#define glDrawArraysInstancedEXT GLEW_GET_FUN(__glewDrawArraysInstancedEXT) +#define glDrawElementsInstancedEXT GLEW_GET_FUN(__glewDrawElementsInstancedEXT) + +#define GLEW_EXT_draw_instanced GLEW_GET_VAR(__GLEW_EXT_draw_instanced) + +#endif /* GL_EXT_draw_instanced */ + +/* ----------------------- GL_EXT_draw_range_elements ---------------------- */ + +#ifndef GL_EXT_draw_range_elements +#define GL_EXT_draw_range_elements 1 + +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 + +typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); + +#define glDrawRangeElementsEXT GLEW_GET_FUN(__glewDrawRangeElementsEXT) + +#define GLEW_EXT_draw_range_elements GLEW_GET_VAR(__GLEW_EXT_draw_range_elements) + +#endif /* GL_EXT_draw_range_elements */ + +/* ---------------------------- GL_EXT_fog_coord --------------------------- */ + +#ifndef GL_EXT_fog_coord +#define GL_EXT_fog_coord 1 + +#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 +#define GL_FOG_COORDINATE_EXT 0x8451 +#define GL_FRAGMENT_DEPTH_EXT 0x8452 +#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 +#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 + +typedef void (GLAPIENTRY * PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); +typedef void (GLAPIENTRY * PFNGLFOGCOORDDEXTPROC) (GLdouble coord); +typedef void (GLAPIENTRY * PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); +typedef void (GLAPIENTRY * PFNGLFOGCOORDFEXTPROC) (GLfloat coord); +typedef void (GLAPIENTRY * PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); + +#define glFogCoordPointerEXT GLEW_GET_FUN(__glewFogCoordPointerEXT) +#define glFogCoorddEXT GLEW_GET_FUN(__glewFogCoorddEXT) +#define glFogCoorddvEXT GLEW_GET_FUN(__glewFogCoorddvEXT) +#define glFogCoordfEXT GLEW_GET_FUN(__glewFogCoordfEXT) +#define glFogCoordfvEXT GLEW_GET_FUN(__glewFogCoordfvEXT) + +#define GLEW_EXT_fog_coord GLEW_GET_VAR(__GLEW_EXT_fog_coord) + +#endif /* GL_EXT_fog_coord */ + +/* ------------------------ GL_EXT_fragment_lighting ----------------------- */ + +#ifndef GL_EXT_fragment_lighting +#define GL_EXT_fragment_lighting 1 + +#define GL_FRAGMENT_LIGHTING_EXT 0x8400 +#define GL_FRAGMENT_COLOR_MATERIAL_EXT 0x8401 +#define GL_FRAGMENT_COLOR_MATERIAL_FACE_EXT 0x8402 +#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_EXT 0x8403 +#define GL_MAX_FRAGMENT_LIGHTS_EXT 0x8404 +#define GL_MAX_ACTIVE_LIGHTS_EXT 0x8405 +#define GL_CURRENT_RASTER_NORMAL_EXT 0x8406 +#define GL_LIGHT_ENV_MODE_EXT 0x8407 +#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_EXT 0x8408 +#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_EXT 0x8409 +#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_EXT 0x840A +#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_EXT 0x840B +#define GL_FRAGMENT_LIGHT0_EXT 0x840C +#define GL_FRAGMENT_LIGHT7_EXT 0x8413 + +typedef void (GLAPIENTRY * PFNGLFRAGMENTCOLORMATERIALEXTPROC) (GLenum face, GLenum mode); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFEXTPROC) (GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFVEXTPROC) (GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIEXTPROC) (GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIVEXTPROC) (GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFEXTPROC) (GLenum light, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFVEXTPROC) (GLenum light, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTIEXTPROC) (GLenum light, GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTIVEXTPROC) (GLenum light, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFEXTPROC) (GLenum face, GLenum pname, const GLfloat param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFVEXTPROC) (GLenum face, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALIEXTPROC) (GLenum face, GLenum pname, const GLint param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALIVEXTPROC) (GLenum face, GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTFVEXTPROC) (GLenum light, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTIVEXTPROC) (GLenum light, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALFVEXTPROC) (GLenum face, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALIVEXTPROC) (GLenum face, GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLLIGHTENVIEXTPROC) (GLenum pname, GLint param); + +#define glFragmentColorMaterialEXT GLEW_GET_FUN(__glewFragmentColorMaterialEXT) +#define glFragmentLightModelfEXT GLEW_GET_FUN(__glewFragmentLightModelfEXT) +#define glFragmentLightModelfvEXT GLEW_GET_FUN(__glewFragmentLightModelfvEXT) +#define glFragmentLightModeliEXT GLEW_GET_FUN(__glewFragmentLightModeliEXT) +#define glFragmentLightModelivEXT GLEW_GET_FUN(__glewFragmentLightModelivEXT) +#define glFragmentLightfEXT GLEW_GET_FUN(__glewFragmentLightfEXT) +#define glFragmentLightfvEXT GLEW_GET_FUN(__glewFragmentLightfvEXT) +#define glFragmentLightiEXT GLEW_GET_FUN(__glewFragmentLightiEXT) +#define glFragmentLightivEXT GLEW_GET_FUN(__glewFragmentLightivEXT) +#define glFragmentMaterialfEXT GLEW_GET_FUN(__glewFragmentMaterialfEXT) +#define glFragmentMaterialfvEXT GLEW_GET_FUN(__glewFragmentMaterialfvEXT) +#define glFragmentMaterialiEXT GLEW_GET_FUN(__glewFragmentMaterialiEXT) +#define glFragmentMaterialivEXT GLEW_GET_FUN(__glewFragmentMaterialivEXT) +#define glGetFragmentLightfvEXT GLEW_GET_FUN(__glewGetFragmentLightfvEXT) +#define glGetFragmentLightivEXT GLEW_GET_FUN(__glewGetFragmentLightivEXT) +#define glGetFragmentMaterialfvEXT GLEW_GET_FUN(__glewGetFragmentMaterialfvEXT) +#define glGetFragmentMaterialivEXT GLEW_GET_FUN(__glewGetFragmentMaterialivEXT) +#define glLightEnviEXT GLEW_GET_FUN(__glewLightEnviEXT) + +#define GLEW_EXT_fragment_lighting GLEW_GET_VAR(__GLEW_EXT_fragment_lighting) + +#endif /* GL_EXT_fragment_lighting */ + +/* ------------------------ GL_EXT_framebuffer_blit ------------------------ */ + +#ifndef GL_EXT_framebuffer_blit +#define GL_EXT_framebuffer_blit 1 + +#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 +#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA + +typedef void (GLAPIENTRY * PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); + +#define glBlitFramebufferEXT GLEW_GET_FUN(__glewBlitFramebufferEXT) + +#define GLEW_EXT_framebuffer_blit GLEW_GET_VAR(__GLEW_EXT_framebuffer_blit) + +#endif /* GL_EXT_framebuffer_blit */ + +/* --------------------- GL_EXT_framebuffer_multisample -------------------- */ + +#ifndef GL_EXT_framebuffer_multisample +#define GL_EXT_framebuffer_multisample 1 + +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_MAX_SAMPLES_EXT 0x8D57 + +typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +#define glRenderbufferStorageMultisampleEXT GLEW_GET_FUN(__glewRenderbufferStorageMultisampleEXT) + +#define GLEW_EXT_framebuffer_multisample GLEW_GET_VAR(__GLEW_EXT_framebuffer_multisample) + +#endif /* GL_EXT_framebuffer_multisample */ + +/* ----------------------- GL_EXT_framebuffer_object ----------------------- */ + +#ifndef GL_EXT_framebuffer_object +#define GL_EXT_framebuffer_object 1 + +#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 +#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 +#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 +#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 +#define GL_FRAMEBUFFER_EXT 0x8D40 +#define GL_RENDERBUFFER_EXT 0x8D41 +#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 +#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 +#define GL_STENCIL_INDEX1_EXT 0x8D46 +#define GL_STENCIL_INDEX4_EXT 0x8D47 +#define GL_STENCIL_INDEX8_EXT 0x8D48 +#define GL_STENCIL_INDEX16_EXT 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 + +typedef void (GLAPIENTRY * PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); +typedef void (GLAPIENTRY * PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); +typedef GLenum (GLAPIENTRY * PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint* framebuffers); +typedef void (GLAPIENTRY * PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint* renderbuffers); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (GLAPIENTRY * PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint* framebuffers); +typedef void (GLAPIENTRY * PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint* renderbuffers); +typedef void (GLAPIENTRY * PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); +typedef GLboolean (GLAPIENTRY * PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); +typedef GLboolean (GLAPIENTRY * PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); +typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); + +#define glBindFramebufferEXT GLEW_GET_FUN(__glewBindFramebufferEXT) +#define glBindRenderbufferEXT GLEW_GET_FUN(__glewBindRenderbufferEXT) +#define glCheckFramebufferStatusEXT GLEW_GET_FUN(__glewCheckFramebufferStatusEXT) +#define glDeleteFramebuffersEXT GLEW_GET_FUN(__glewDeleteFramebuffersEXT) +#define glDeleteRenderbuffersEXT GLEW_GET_FUN(__glewDeleteRenderbuffersEXT) +#define glFramebufferRenderbufferEXT GLEW_GET_FUN(__glewFramebufferRenderbufferEXT) +#define glFramebufferTexture1DEXT GLEW_GET_FUN(__glewFramebufferTexture1DEXT) +#define glFramebufferTexture2DEXT GLEW_GET_FUN(__glewFramebufferTexture2DEXT) +#define glFramebufferTexture3DEXT GLEW_GET_FUN(__glewFramebufferTexture3DEXT) +#define glGenFramebuffersEXT GLEW_GET_FUN(__glewGenFramebuffersEXT) +#define glGenRenderbuffersEXT GLEW_GET_FUN(__glewGenRenderbuffersEXT) +#define glGenerateMipmapEXT GLEW_GET_FUN(__glewGenerateMipmapEXT) +#define glGetFramebufferAttachmentParameterivEXT GLEW_GET_FUN(__glewGetFramebufferAttachmentParameterivEXT) +#define glGetRenderbufferParameterivEXT GLEW_GET_FUN(__glewGetRenderbufferParameterivEXT) +#define glIsFramebufferEXT GLEW_GET_FUN(__glewIsFramebufferEXT) +#define glIsRenderbufferEXT GLEW_GET_FUN(__glewIsRenderbufferEXT) +#define glRenderbufferStorageEXT GLEW_GET_FUN(__glewRenderbufferStorageEXT) + +#define GLEW_EXT_framebuffer_object GLEW_GET_VAR(__GLEW_EXT_framebuffer_object) + +#endif /* GL_EXT_framebuffer_object */ + +/* ------------------------ GL_EXT_framebuffer_sRGB ------------------------ */ + +#ifndef GL_EXT_framebuffer_sRGB +#define GL_EXT_framebuffer_sRGB 1 + +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA + +#define GLEW_EXT_framebuffer_sRGB GLEW_GET_VAR(__GLEW_EXT_framebuffer_sRGB) + +#endif /* GL_EXT_framebuffer_sRGB */ + +/* ------------------------ GL_EXT_geometry_shader4 ------------------------ */ + +#ifndef GL_EXT_geometry_shader4 +#define GL_EXT_geometry_shader4 1 + +#define GL_LINES_ADJACENCY_EXT 0xA +#define GL_LINE_STRIP_ADJACENCY_EXT 0xB +#define GL_TRIANGLES_ADJACENCY_EXT 0xC +#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0xD +#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 +#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 +#define GL_GEOMETRY_SHADER_EXT 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA +#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB +#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD +#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 + +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); + +#define glFramebufferTextureEXT GLEW_GET_FUN(__glewFramebufferTextureEXT) +#define glFramebufferTextureFaceEXT GLEW_GET_FUN(__glewFramebufferTextureFaceEXT) +#define glFramebufferTextureLayerEXT GLEW_GET_FUN(__glewFramebufferTextureLayerEXT) +#define glProgramParameteriEXT GLEW_GET_FUN(__glewProgramParameteriEXT) + +#define GLEW_EXT_geometry_shader4 GLEW_GET_VAR(__GLEW_EXT_geometry_shader4) + +#endif /* GL_EXT_geometry_shader4 */ + +/* --------------------- GL_EXT_gpu_program_parameters --------------------- */ + +#ifndef GL_EXT_gpu_program_parameters +#define GL_EXT_gpu_program_parameters 1 + +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat* params); + +#define glProgramEnvParameters4fvEXT GLEW_GET_FUN(__glewProgramEnvParameters4fvEXT) +#define glProgramLocalParameters4fvEXT GLEW_GET_FUN(__glewProgramLocalParameters4fvEXT) + +#define GLEW_EXT_gpu_program_parameters GLEW_GET_VAR(__GLEW_EXT_gpu_program_parameters) + +#endif /* GL_EXT_gpu_program_parameters */ + +/* --------------------------- GL_EXT_gpu_shader4 -------------------------- */ + +#ifndef GL_EXT_gpu_shader4 +#define GL_EXT_gpu_shader4 1 + +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD +#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 +#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 +#define GL_SAMPLER_BUFFER_EXT 0x8DC2 +#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 +#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 +#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 +#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 +#define GL_INT_SAMPLER_1D_EXT 0x8DC9 +#define GL_INT_SAMPLER_2D_EXT 0x8DCA +#define GL_INT_SAMPLER_3D_EXT 0x8DCB +#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC +#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD +#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF +#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 + +typedef void (GLAPIENTRY * PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); +typedef GLint (GLAPIENTRY * PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); +typedef void (GLAPIENTRY * PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); +typedef void (GLAPIENTRY * PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); +typedef void (GLAPIENTRY * PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (GLAPIENTRY * PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); +typedef void (GLAPIENTRY * PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (GLAPIENTRY * PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (GLAPIENTRY * PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (GLAPIENTRY * PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (GLAPIENTRY * PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); + +#define glBindFragDataLocationEXT GLEW_GET_FUN(__glewBindFragDataLocationEXT) +#define glGetFragDataLocationEXT GLEW_GET_FUN(__glewGetFragDataLocationEXT) +#define glGetUniformuivEXT GLEW_GET_FUN(__glewGetUniformuivEXT) +#define glGetVertexAttribIivEXT GLEW_GET_FUN(__glewGetVertexAttribIivEXT) +#define glGetVertexAttribIuivEXT GLEW_GET_FUN(__glewGetVertexAttribIuivEXT) +#define glUniform1uiEXT GLEW_GET_FUN(__glewUniform1uiEXT) +#define glUniform1uivEXT GLEW_GET_FUN(__glewUniform1uivEXT) +#define glUniform2uiEXT GLEW_GET_FUN(__glewUniform2uiEXT) +#define glUniform2uivEXT GLEW_GET_FUN(__glewUniform2uivEXT) +#define glUniform3uiEXT GLEW_GET_FUN(__glewUniform3uiEXT) +#define glUniform3uivEXT GLEW_GET_FUN(__glewUniform3uivEXT) +#define glUniform4uiEXT GLEW_GET_FUN(__glewUniform4uiEXT) +#define glUniform4uivEXT GLEW_GET_FUN(__glewUniform4uivEXT) +#define glVertexAttribI1iEXT GLEW_GET_FUN(__glewVertexAttribI1iEXT) +#define glVertexAttribI1ivEXT GLEW_GET_FUN(__glewVertexAttribI1ivEXT) +#define glVertexAttribI1uiEXT GLEW_GET_FUN(__glewVertexAttribI1uiEXT) +#define glVertexAttribI1uivEXT GLEW_GET_FUN(__glewVertexAttribI1uivEXT) +#define glVertexAttribI2iEXT GLEW_GET_FUN(__glewVertexAttribI2iEXT) +#define glVertexAttribI2ivEXT GLEW_GET_FUN(__glewVertexAttribI2ivEXT) +#define glVertexAttribI2uiEXT GLEW_GET_FUN(__glewVertexAttribI2uiEXT) +#define glVertexAttribI2uivEXT GLEW_GET_FUN(__glewVertexAttribI2uivEXT) +#define glVertexAttribI3iEXT GLEW_GET_FUN(__glewVertexAttribI3iEXT) +#define glVertexAttribI3ivEXT GLEW_GET_FUN(__glewVertexAttribI3ivEXT) +#define glVertexAttribI3uiEXT GLEW_GET_FUN(__glewVertexAttribI3uiEXT) +#define glVertexAttribI3uivEXT GLEW_GET_FUN(__glewVertexAttribI3uivEXT) +#define glVertexAttribI4bvEXT GLEW_GET_FUN(__glewVertexAttribI4bvEXT) +#define glVertexAttribI4iEXT GLEW_GET_FUN(__glewVertexAttribI4iEXT) +#define glVertexAttribI4ivEXT GLEW_GET_FUN(__glewVertexAttribI4ivEXT) +#define glVertexAttribI4svEXT GLEW_GET_FUN(__glewVertexAttribI4svEXT) +#define glVertexAttribI4ubvEXT GLEW_GET_FUN(__glewVertexAttribI4ubvEXT) +#define glVertexAttribI4uiEXT GLEW_GET_FUN(__glewVertexAttribI4uiEXT) +#define glVertexAttribI4uivEXT GLEW_GET_FUN(__glewVertexAttribI4uivEXT) +#define glVertexAttribI4usvEXT GLEW_GET_FUN(__glewVertexAttribI4usvEXT) +#define glVertexAttribIPointerEXT GLEW_GET_FUN(__glewVertexAttribIPointerEXT) + +#define GLEW_EXT_gpu_shader4 GLEW_GET_VAR(__GLEW_EXT_gpu_shader4) + +#endif /* GL_EXT_gpu_shader4 */ + +/* ---------------------------- GL_EXT_histogram --------------------------- */ + +#ifndef GL_EXT_histogram +#define GL_EXT_histogram 1 + +#define GL_HISTOGRAM_EXT 0x8024 +#define GL_PROXY_HISTOGRAM_EXT 0x8025 +#define GL_HISTOGRAM_WIDTH_EXT 0x8026 +#define GL_HISTOGRAM_FORMAT_EXT 0x8027 +#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C +#define GL_HISTOGRAM_SINK_EXT 0x802D +#define GL_MINMAX_EXT 0x802E +#define GL_MINMAX_FORMAT_EXT 0x802F +#define GL_MINMAX_SINK_EXT 0x8030 + +typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void* values); +typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void* values); +typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (GLAPIENTRY * PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (GLAPIENTRY * PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLRESETMINMAXEXTPROC) (GLenum target); + +#define glGetHistogramEXT GLEW_GET_FUN(__glewGetHistogramEXT) +#define glGetHistogramParameterfvEXT GLEW_GET_FUN(__glewGetHistogramParameterfvEXT) +#define glGetHistogramParameterivEXT GLEW_GET_FUN(__glewGetHistogramParameterivEXT) +#define glGetMinmaxEXT GLEW_GET_FUN(__glewGetMinmaxEXT) +#define glGetMinmaxParameterfvEXT GLEW_GET_FUN(__glewGetMinmaxParameterfvEXT) +#define glGetMinmaxParameterivEXT GLEW_GET_FUN(__glewGetMinmaxParameterivEXT) +#define glHistogramEXT GLEW_GET_FUN(__glewHistogramEXT) +#define glMinmaxEXT GLEW_GET_FUN(__glewMinmaxEXT) +#define glResetHistogramEXT GLEW_GET_FUN(__glewResetHistogramEXT) +#define glResetMinmaxEXT GLEW_GET_FUN(__glewResetMinmaxEXT) + +#define GLEW_EXT_histogram GLEW_GET_VAR(__GLEW_EXT_histogram) + +#endif /* GL_EXT_histogram */ + +/* ----------------------- GL_EXT_index_array_formats ---------------------- */ + +#ifndef GL_EXT_index_array_formats +#define GL_EXT_index_array_formats 1 + +#define GLEW_EXT_index_array_formats GLEW_GET_VAR(__GLEW_EXT_index_array_formats) + +#endif /* GL_EXT_index_array_formats */ + +/* --------------------------- GL_EXT_index_func --------------------------- */ + +#ifndef GL_EXT_index_func +#define GL_EXT_index_func 1 + +typedef void (GLAPIENTRY * PFNGLINDEXFUNCEXTPROC) (GLenum func, GLfloat ref); + +#define glIndexFuncEXT GLEW_GET_FUN(__glewIndexFuncEXT) + +#define GLEW_EXT_index_func GLEW_GET_VAR(__GLEW_EXT_index_func) + +#endif /* GL_EXT_index_func */ + +/* ------------------------- GL_EXT_index_material ------------------------- */ + +#ifndef GL_EXT_index_material +#define GL_EXT_index_material 1 + +typedef void (GLAPIENTRY * PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); + +#define glIndexMaterialEXT GLEW_GET_FUN(__glewIndexMaterialEXT) + +#define GLEW_EXT_index_material GLEW_GET_VAR(__GLEW_EXT_index_material) + +#endif /* GL_EXT_index_material */ + +/* -------------------------- GL_EXT_index_texture ------------------------- */ + +#ifndef GL_EXT_index_texture +#define GL_EXT_index_texture 1 + +#define GLEW_EXT_index_texture GLEW_GET_VAR(__GLEW_EXT_index_texture) + +#endif /* GL_EXT_index_texture */ + +/* -------------------------- GL_EXT_light_texture ------------------------- */ + +#ifndef GL_EXT_light_texture +#define GL_EXT_light_texture 1 + +#define GL_FRAGMENT_MATERIAL_EXT 0x8349 +#define GL_FRAGMENT_NORMAL_EXT 0x834A +#define GL_FRAGMENT_COLOR_EXT 0x834C +#define GL_ATTENUATION_EXT 0x834D +#define GL_SHADOW_ATTENUATION_EXT 0x834E +#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F +#define GL_TEXTURE_LIGHT_EXT 0x8350 +#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 +#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 +#define GL_FRAGMENT_DEPTH_EXT 0x8452 + +typedef void (GLAPIENTRY * PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); +typedef void (GLAPIENTRY * PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); +typedef void (GLAPIENTRY * PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); + +#define glApplyTextureEXT GLEW_GET_FUN(__glewApplyTextureEXT) +#define glTextureLightEXT GLEW_GET_FUN(__glewTextureLightEXT) +#define glTextureMaterialEXT GLEW_GET_FUN(__glewTextureMaterialEXT) + +#define GLEW_EXT_light_texture GLEW_GET_VAR(__GLEW_EXT_light_texture) + +#endif /* GL_EXT_light_texture */ + +/* ------------------------- GL_EXT_misc_attribute ------------------------- */ + +#ifndef GL_EXT_misc_attribute +#define GL_EXT_misc_attribute 1 + +#define GLEW_EXT_misc_attribute GLEW_GET_VAR(__GLEW_EXT_misc_attribute) + +#endif /* GL_EXT_misc_attribute */ + +/* ------------------------ GL_EXT_multi_draw_arrays ----------------------- */ + +#ifndef GL_EXT_multi_draw_arrays +#define GL_EXT_multi_draw_arrays 1 + +typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint* first, GLsizei *count, GLsizei primcount); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, GLsizei* count, GLenum type, const GLvoid **indices, GLsizei primcount); + +#define glMultiDrawArraysEXT GLEW_GET_FUN(__glewMultiDrawArraysEXT) +#define glMultiDrawElementsEXT GLEW_GET_FUN(__glewMultiDrawElementsEXT) + +#define GLEW_EXT_multi_draw_arrays GLEW_GET_VAR(__GLEW_EXT_multi_draw_arrays) + +#endif /* GL_EXT_multi_draw_arrays */ + +/* --------------------------- GL_EXT_multisample -------------------------- */ + +#ifndef GL_EXT_multisample +#define GL_EXT_multisample 1 + +#define GL_MULTISAMPLE_EXT 0x809D +#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F +#define GL_SAMPLE_MASK_EXT 0x80A0 +#define GL_1PASS_EXT 0x80A1 +#define GL_2PASS_0_EXT 0x80A2 +#define GL_2PASS_1_EXT 0x80A3 +#define GL_4PASS_0_EXT 0x80A4 +#define GL_4PASS_1_EXT 0x80A5 +#define GL_4PASS_2_EXT 0x80A6 +#define GL_4PASS_3_EXT 0x80A7 +#define GL_SAMPLE_BUFFERS_EXT 0x80A8 +#define GL_SAMPLES_EXT 0x80A9 +#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA +#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB +#define GL_SAMPLE_PATTERN_EXT 0x80AC +#define GL_MULTISAMPLE_BIT_EXT 0x20000000 + +typedef void (GLAPIENTRY * PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); +typedef void (GLAPIENTRY * PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); + +#define glSampleMaskEXT GLEW_GET_FUN(__glewSampleMaskEXT) +#define glSamplePatternEXT GLEW_GET_FUN(__glewSamplePatternEXT) + +#define GLEW_EXT_multisample GLEW_GET_VAR(__GLEW_EXT_multisample) + +#endif /* GL_EXT_multisample */ + +/* ---------------------- GL_EXT_packed_depth_stencil ---------------------- */ + +#ifndef GL_EXT_packed_depth_stencil +#define GL_EXT_packed_depth_stencil 1 + +#define GL_DEPTH_STENCIL_EXT 0x84F9 +#define GL_UNSIGNED_INT_24_8_EXT 0x84FA +#define GL_DEPTH24_STENCIL8_EXT 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 + +#define GLEW_EXT_packed_depth_stencil GLEW_GET_VAR(__GLEW_EXT_packed_depth_stencil) + +#endif /* GL_EXT_packed_depth_stencil */ + +/* -------------------------- GL_EXT_packed_float -------------------------- */ + +#ifndef GL_EXT_packed_float +#define GL_EXT_packed_float 1 + +#define GL_R11F_G11F_B10F_EXT 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B +#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C + +#define GLEW_EXT_packed_float GLEW_GET_VAR(__GLEW_EXT_packed_float) + +#endif /* GL_EXT_packed_float */ + +/* -------------------------- GL_EXT_packed_pixels ------------------------- */ + +#ifndef GL_EXT_packed_pixels +#define GL_EXT_packed_pixels 1 + +#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 + +#define GLEW_EXT_packed_pixels GLEW_GET_VAR(__GLEW_EXT_packed_pixels) + +#endif /* GL_EXT_packed_pixels */ + +/* ------------------------ GL_EXT_paletted_texture ------------------------ */ + +#ifndef GL_EXT_paletted_texture +#define GL_EXT_paletted_texture 1 + +#define GL_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_PROXY_TEXTURE_1D 0x8063 +#define GL_PROXY_TEXTURE_2D 0x8064 +#define GL_TEXTURE_3D_EXT 0x806F +#define GL_PROXY_TEXTURE_3D_EXT 0x8070 +#define GL_COLOR_TABLE_FORMAT_EXT 0x80D8 +#define GL_COLOR_TABLE_WIDTH_EXT 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE_EXT 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE_EXT 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE_EXT 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE_EXT 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE_EXT 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE_EXT 0x80DF +#define GL_COLOR_INDEX1_EXT 0x80E2 +#define GL_COLOR_INDEX2_EXT 0x80E3 +#define GL_COLOR_INDEX4_EXT 0x80E4 +#define GL_COLOR_INDEX8_EXT 0x80E5 +#define GL_COLOR_INDEX12_EXT 0x80E6 +#define GL_COLOR_INDEX16_EXT 0x80E7 +#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED +#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 +#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B + +typedef void (GLAPIENTRY * PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void* data); +typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, void* data); +typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); + +#define glColorTableEXT GLEW_GET_FUN(__glewColorTableEXT) +#define glGetColorTableEXT GLEW_GET_FUN(__glewGetColorTableEXT) +#define glGetColorTableParameterfvEXT GLEW_GET_FUN(__glewGetColorTableParameterfvEXT) +#define glGetColorTableParameterivEXT GLEW_GET_FUN(__glewGetColorTableParameterivEXT) + +#define GLEW_EXT_paletted_texture GLEW_GET_VAR(__GLEW_EXT_paletted_texture) + +#endif /* GL_EXT_paletted_texture */ + +/* ----------------------- GL_EXT_pixel_buffer_object ---------------------- */ + +#ifndef GL_EXT_pixel_buffer_object +#define GL_EXT_pixel_buffer_object 1 + +#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF + +#define GLEW_EXT_pixel_buffer_object GLEW_GET_VAR(__GLEW_EXT_pixel_buffer_object) + +#endif /* GL_EXT_pixel_buffer_object */ + +/* ------------------------- GL_EXT_pixel_transform ------------------------ */ + +#ifndef GL_EXT_pixel_transform +#define GL_EXT_pixel_transform 1 + +#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 +#define GL_PIXEL_MAG_FILTER_EXT 0x8331 +#define GL_PIXEL_MIN_FILTER_EXT 0x8332 +#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 +#define GL_CUBIC_EXT 0x8334 +#define GL_AVERAGE_EXT 0x8335 +#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 +#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 +#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 + +typedef void (GLAPIENTRY * PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, const GLfloat param); +typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, const GLint param); +typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint* params); + +#define glGetPixelTransformParameterfvEXT GLEW_GET_FUN(__glewGetPixelTransformParameterfvEXT) +#define glGetPixelTransformParameterivEXT GLEW_GET_FUN(__glewGetPixelTransformParameterivEXT) +#define glPixelTransformParameterfEXT GLEW_GET_FUN(__glewPixelTransformParameterfEXT) +#define glPixelTransformParameterfvEXT GLEW_GET_FUN(__glewPixelTransformParameterfvEXT) +#define glPixelTransformParameteriEXT GLEW_GET_FUN(__glewPixelTransformParameteriEXT) +#define glPixelTransformParameterivEXT GLEW_GET_FUN(__glewPixelTransformParameterivEXT) + +#define GLEW_EXT_pixel_transform GLEW_GET_VAR(__GLEW_EXT_pixel_transform) + +#endif /* GL_EXT_pixel_transform */ + +/* ------------------- GL_EXT_pixel_transform_color_table ------------------ */ + +#ifndef GL_EXT_pixel_transform_color_table +#define GL_EXT_pixel_transform_color_table 1 + +#define GLEW_EXT_pixel_transform_color_table GLEW_GET_VAR(__GLEW_EXT_pixel_transform_color_table) + +#endif /* GL_EXT_pixel_transform_color_table */ + +/* ------------------------ GL_EXT_point_parameters ------------------------ */ + +#ifndef GL_EXT_point_parameters +#define GL_EXT_point_parameters 1 + +#define GL_POINT_SIZE_MIN_EXT 0x8126 +#define GL_POINT_SIZE_MAX_EXT 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 +#define GL_DISTANCE_ATTENUATION_EXT 0x8129 + +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, GLfloat* params); + +#define glPointParameterfEXT GLEW_GET_FUN(__glewPointParameterfEXT) +#define glPointParameterfvEXT GLEW_GET_FUN(__glewPointParameterfvEXT) + +#define GLEW_EXT_point_parameters GLEW_GET_VAR(__GLEW_EXT_point_parameters) + +#endif /* GL_EXT_point_parameters */ + +/* ------------------------- GL_EXT_polygon_offset ------------------------- */ + +#ifndef GL_EXT_polygon_offset +#define GL_EXT_polygon_offset 1 + +#define GL_POLYGON_OFFSET_EXT 0x8037 +#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 +#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 + +typedef void (GLAPIENTRY * PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); + +#define glPolygonOffsetEXT GLEW_GET_FUN(__glewPolygonOffsetEXT) + +#define GLEW_EXT_polygon_offset GLEW_GET_VAR(__GLEW_EXT_polygon_offset) + +#endif /* GL_EXT_polygon_offset */ + +/* ------------------------- GL_EXT_rescale_normal ------------------------- */ + +#ifndef GL_EXT_rescale_normal +#define GL_EXT_rescale_normal 1 + +#define GLEW_EXT_rescale_normal GLEW_GET_VAR(__GLEW_EXT_rescale_normal) + +#endif /* GL_EXT_rescale_normal */ + +/* -------------------------- GL_EXT_scene_marker -------------------------- */ + +#ifndef GL_EXT_scene_marker +#define GL_EXT_scene_marker 1 + +typedef void (GLAPIENTRY * PFNGLBEGINSCENEEXTPROC) (void); +typedef void (GLAPIENTRY * PFNGLENDSCENEEXTPROC) (void); + +#define glBeginSceneEXT GLEW_GET_FUN(__glewBeginSceneEXT) +#define glEndSceneEXT GLEW_GET_FUN(__glewEndSceneEXT) + +#define GLEW_EXT_scene_marker GLEW_GET_VAR(__GLEW_EXT_scene_marker) + +#endif /* GL_EXT_scene_marker */ + +/* ------------------------- GL_EXT_secondary_color ------------------------ */ + +#ifndef GL_EXT_secondary_color +#define GL_EXT_secondary_color 1 + +#define GL_COLOR_SUM_EXT 0x8458 +#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D +#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E + +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer); + +#define glSecondaryColor3bEXT GLEW_GET_FUN(__glewSecondaryColor3bEXT) +#define glSecondaryColor3bvEXT GLEW_GET_FUN(__glewSecondaryColor3bvEXT) +#define glSecondaryColor3dEXT GLEW_GET_FUN(__glewSecondaryColor3dEXT) +#define glSecondaryColor3dvEXT GLEW_GET_FUN(__glewSecondaryColor3dvEXT) +#define glSecondaryColor3fEXT GLEW_GET_FUN(__glewSecondaryColor3fEXT) +#define glSecondaryColor3fvEXT GLEW_GET_FUN(__glewSecondaryColor3fvEXT) +#define glSecondaryColor3iEXT GLEW_GET_FUN(__glewSecondaryColor3iEXT) +#define glSecondaryColor3ivEXT GLEW_GET_FUN(__glewSecondaryColor3ivEXT) +#define glSecondaryColor3sEXT GLEW_GET_FUN(__glewSecondaryColor3sEXT) +#define glSecondaryColor3svEXT GLEW_GET_FUN(__glewSecondaryColor3svEXT) +#define glSecondaryColor3ubEXT GLEW_GET_FUN(__glewSecondaryColor3ubEXT) +#define glSecondaryColor3ubvEXT GLEW_GET_FUN(__glewSecondaryColor3ubvEXT) +#define glSecondaryColor3uiEXT GLEW_GET_FUN(__glewSecondaryColor3uiEXT) +#define glSecondaryColor3uivEXT GLEW_GET_FUN(__glewSecondaryColor3uivEXT) +#define glSecondaryColor3usEXT GLEW_GET_FUN(__glewSecondaryColor3usEXT) +#define glSecondaryColor3usvEXT GLEW_GET_FUN(__glewSecondaryColor3usvEXT) +#define glSecondaryColorPointerEXT GLEW_GET_FUN(__glewSecondaryColorPointerEXT) + +#define GLEW_EXT_secondary_color GLEW_GET_VAR(__GLEW_EXT_secondary_color) + +#endif /* GL_EXT_secondary_color */ + +/* --------------------- GL_EXT_separate_specular_color -------------------- */ + +#ifndef GL_EXT_separate_specular_color +#define GL_EXT_separate_specular_color 1 + +#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 +#define GL_SINGLE_COLOR_EXT 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA + +#define GLEW_EXT_separate_specular_color GLEW_GET_VAR(__GLEW_EXT_separate_specular_color) + +#endif /* GL_EXT_separate_specular_color */ + +/* -------------------------- GL_EXT_shadow_funcs -------------------------- */ + +#ifndef GL_EXT_shadow_funcs +#define GL_EXT_shadow_funcs 1 + +#define GLEW_EXT_shadow_funcs GLEW_GET_VAR(__GLEW_EXT_shadow_funcs) + +#endif /* GL_EXT_shadow_funcs */ + +/* --------------------- GL_EXT_shared_texture_palette --------------------- */ + +#ifndef GL_EXT_shared_texture_palette +#define GL_EXT_shared_texture_palette 1 + +#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB + +#define GLEW_EXT_shared_texture_palette GLEW_GET_VAR(__GLEW_EXT_shared_texture_palette) + +#endif /* GL_EXT_shared_texture_palette */ + +/* ------------------------ GL_EXT_stencil_clear_tag ----------------------- */ + +#ifndef GL_EXT_stencil_clear_tag +#define GL_EXT_stencil_clear_tag 1 + +#define GL_STENCIL_TAG_BITS_EXT 0x88F2 +#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 + +#define GLEW_EXT_stencil_clear_tag GLEW_GET_VAR(__GLEW_EXT_stencil_clear_tag) + +#endif /* GL_EXT_stencil_clear_tag */ + +/* ------------------------ GL_EXT_stencil_two_side ------------------------ */ + +#ifndef GL_EXT_stencil_two_side +#define GL_EXT_stencil_two_side 1 + +#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 +#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 + +typedef void (GLAPIENTRY * PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); + +#define glActiveStencilFaceEXT GLEW_GET_FUN(__glewActiveStencilFaceEXT) + +#define GLEW_EXT_stencil_two_side GLEW_GET_VAR(__GLEW_EXT_stencil_two_side) + +#endif /* GL_EXT_stencil_two_side */ + +/* -------------------------- GL_EXT_stencil_wrap -------------------------- */ + +#ifndef GL_EXT_stencil_wrap +#define GL_EXT_stencil_wrap 1 + +#define GL_INCR_WRAP_EXT 0x8507 +#define GL_DECR_WRAP_EXT 0x8508 + +#define GLEW_EXT_stencil_wrap GLEW_GET_VAR(__GLEW_EXT_stencil_wrap) + +#endif /* GL_EXT_stencil_wrap */ + +/* --------------------------- GL_EXT_subtexture --------------------------- */ + +#ifndef GL_EXT_subtexture +#define GL_EXT_subtexture 1 + +typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels); + +#define glTexSubImage1DEXT GLEW_GET_FUN(__glewTexSubImage1DEXT) +#define glTexSubImage2DEXT GLEW_GET_FUN(__glewTexSubImage2DEXT) +#define glTexSubImage3DEXT GLEW_GET_FUN(__glewTexSubImage3DEXT) + +#define GLEW_EXT_subtexture GLEW_GET_VAR(__GLEW_EXT_subtexture) + +#endif /* GL_EXT_subtexture */ + +/* ----------------------------- GL_EXT_texture ---------------------------- */ + +#ifndef GL_EXT_texture +#define GL_EXT_texture 1 + +#define GL_ALPHA4_EXT 0x803B +#define GL_ALPHA8_EXT 0x803C +#define GL_ALPHA12_EXT 0x803D +#define GL_ALPHA16_EXT 0x803E +#define GL_LUMINANCE4_EXT 0x803F +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE12_EXT 0x8041 +#define GL_LUMINANCE16_EXT 0x8042 +#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 +#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 +#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 +#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 +#define GL_INTENSITY_EXT 0x8049 +#define GL_INTENSITY4_EXT 0x804A +#define GL_INTENSITY8_EXT 0x804B +#define GL_INTENSITY12_EXT 0x804C +#define GL_INTENSITY16_EXT 0x804D +#define GL_RGB2_EXT 0x804E +#define GL_RGB4_EXT 0x804F +#define GL_RGB5_EXT 0x8050 +#define GL_RGB8_EXT 0x8051 +#define GL_RGB10_EXT 0x8052 +#define GL_RGB12_EXT 0x8053 +#define GL_RGB16_EXT 0x8054 +#define GL_RGBA2_EXT 0x8055 +#define GL_RGBA4_EXT 0x8056 +#define GL_RGB5_A1_EXT 0x8057 +#define GL_RGBA8_EXT 0x8058 +#define GL_RGB10_A2_EXT 0x8059 +#define GL_RGBA12_EXT 0x805A +#define GL_RGBA16_EXT 0x805B +#define GL_TEXTURE_RED_SIZE_EXT 0x805C +#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D +#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E +#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 +#define GL_REPLACE_EXT 0x8062 +#define GL_PROXY_TEXTURE_1D_EXT 0x8063 +#define GL_PROXY_TEXTURE_2D_EXT 0x8064 + +#define GLEW_EXT_texture GLEW_GET_VAR(__GLEW_EXT_texture) + +#endif /* GL_EXT_texture */ + +/* ---------------------------- GL_EXT_texture3D --------------------------- */ + +#ifndef GL_EXT_texture3D +#define GL_EXT_texture3D 1 + +#define GL_PACK_SKIP_IMAGES_EXT 0x806B +#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C +#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D +#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E +#define GL_TEXTURE_3D_EXT 0x806F +#define GL_PROXY_TEXTURE_3D_EXT 0x8070 +#define GL_TEXTURE_DEPTH_EXT 0x8071 +#define GL_TEXTURE_WRAP_R_EXT 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 + +typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels); + +#define glTexImage3DEXT GLEW_GET_FUN(__glewTexImage3DEXT) + +#define GLEW_EXT_texture3D GLEW_GET_VAR(__GLEW_EXT_texture3D) + +#endif /* GL_EXT_texture3D */ + +/* -------------------------- GL_EXT_texture_array ------------------------- */ + +#ifndef GL_EXT_texture_array +#define GL_EXT_texture_array 1 + +#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E +#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF +#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 +#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 +#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A +#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B +#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C +#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D + +#define GLEW_EXT_texture_array GLEW_GET_VAR(__GLEW_EXT_texture_array) + +#endif /* GL_EXT_texture_array */ + +/* ---------------------- GL_EXT_texture_buffer_object --------------------- */ + +#ifndef GL_EXT_texture_buffer_object +#define GL_EXT_texture_buffer_object 1 + +#define GL_TEXTURE_BUFFER_EXT 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D +#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E + +typedef void (GLAPIENTRY * PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); + +#define glTexBufferEXT GLEW_GET_FUN(__glewTexBufferEXT) + +#define GLEW_EXT_texture_buffer_object GLEW_GET_VAR(__GLEW_EXT_texture_buffer_object) + +#endif /* GL_EXT_texture_buffer_object */ + +/* -------------------- GL_EXT_texture_compression_dxt1 -------------------- */ + +#ifndef GL_EXT_texture_compression_dxt1 +#define GL_EXT_texture_compression_dxt1 1 + +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 + +#define GLEW_EXT_texture_compression_dxt1 GLEW_GET_VAR(__GLEW_EXT_texture_compression_dxt1) + +#endif /* GL_EXT_texture_compression_dxt1 */ + +/* -------------------- GL_EXT_texture_compression_latc -------------------- */ + +#ifndef GL_EXT_texture_compression_latc +#define GL_EXT_texture_compression_latc 1 + +#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 +#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 +#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 +#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 + +#define GLEW_EXT_texture_compression_latc GLEW_GET_VAR(__GLEW_EXT_texture_compression_latc) + +#endif /* GL_EXT_texture_compression_latc */ + +/* -------------------- GL_EXT_texture_compression_rgtc -------------------- */ + +#ifndef GL_EXT_texture_compression_rgtc +#define GL_EXT_texture_compression_rgtc 1 + +#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB +#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC +#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD +#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE + +#define GLEW_EXT_texture_compression_rgtc GLEW_GET_VAR(__GLEW_EXT_texture_compression_rgtc) + +#endif /* GL_EXT_texture_compression_rgtc */ + +/* -------------------- GL_EXT_texture_compression_s3tc -------------------- */ + +#ifndef GL_EXT_texture_compression_s3tc +#define GL_EXT_texture_compression_s3tc 1 + +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 + +#define GLEW_EXT_texture_compression_s3tc GLEW_GET_VAR(__GLEW_EXT_texture_compression_s3tc) + +#endif /* GL_EXT_texture_compression_s3tc */ + +/* ------------------------ GL_EXT_texture_cube_map ------------------------ */ + +#ifndef GL_EXT_texture_cube_map +#define GL_EXT_texture_cube_map 1 + +#define GL_NORMAL_MAP_EXT 0x8511 +#define GL_REFLECTION_MAP_EXT 0x8512 +#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C + +#define GLEW_EXT_texture_cube_map GLEW_GET_VAR(__GLEW_EXT_texture_cube_map) + +#endif /* GL_EXT_texture_cube_map */ + +/* ----------------------- GL_EXT_texture_edge_clamp ----------------------- */ + +#ifndef GL_EXT_texture_edge_clamp +#define GL_EXT_texture_edge_clamp 1 + +#define GL_CLAMP_TO_EDGE_EXT 0x812F + +#define GLEW_EXT_texture_edge_clamp GLEW_GET_VAR(__GLEW_EXT_texture_edge_clamp) + +#endif /* GL_EXT_texture_edge_clamp */ + +/* --------------------------- GL_EXT_texture_env -------------------------- */ + +#ifndef GL_EXT_texture_env +#define GL_EXT_texture_env 1 + +#define GL_TEXTURE_ENV0_EXT 0 +#define GL_ENV_BLEND_EXT 0 +#define GL_TEXTURE_ENV_SHIFT_EXT 0 +#define GL_ENV_REPLACE_EXT 0 +#define GL_ENV_ADD_EXT 0 +#define GL_ENV_SUBTRACT_EXT 0 +#define GL_TEXTURE_ENV_MODE_ALPHA_EXT 0 +#define GL_ENV_REVERSE_SUBTRACT_EXT 0 +#define GL_ENV_REVERSE_BLEND_EXT 0 +#define GL_ENV_COPY_EXT 0 +#define GL_ENV_MODULATE_EXT 0 + +#define GLEW_EXT_texture_env GLEW_GET_VAR(__GLEW_EXT_texture_env) + +#endif /* GL_EXT_texture_env */ + +/* ------------------------- GL_EXT_texture_env_add ------------------------ */ + +#ifndef GL_EXT_texture_env_add +#define GL_EXT_texture_env_add 1 + +#define GLEW_EXT_texture_env_add GLEW_GET_VAR(__GLEW_EXT_texture_env_add) + +#endif /* GL_EXT_texture_env_add */ + +/* ----------------------- GL_EXT_texture_env_combine ---------------------- */ + +#ifndef GL_EXT_texture_env_combine +#define GL_EXT_texture_env_combine 1 + +#define GL_COMBINE_EXT 0x8570 +#define GL_COMBINE_RGB_EXT 0x8571 +#define GL_COMBINE_ALPHA_EXT 0x8572 +#define GL_RGB_SCALE_EXT 0x8573 +#define GL_ADD_SIGNED_EXT 0x8574 +#define GL_INTERPOLATE_EXT 0x8575 +#define GL_CONSTANT_EXT 0x8576 +#define GL_PRIMARY_COLOR_EXT 0x8577 +#define GL_PREVIOUS_EXT 0x8578 +#define GL_SOURCE0_RGB_EXT 0x8580 +#define GL_SOURCE1_RGB_EXT 0x8581 +#define GL_SOURCE2_RGB_EXT 0x8582 +#define GL_SOURCE0_ALPHA_EXT 0x8588 +#define GL_SOURCE1_ALPHA_EXT 0x8589 +#define GL_SOURCE2_ALPHA_EXT 0x858A +#define GL_OPERAND0_RGB_EXT 0x8590 +#define GL_OPERAND1_RGB_EXT 0x8591 +#define GL_OPERAND2_RGB_EXT 0x8592 +#define GL_OPERAND0_ALPHA_EXT 0x8598 +#define GL_OPERAND1_ALPHA_EXT 0x8599 +#define GL_OPERAND2_ALPHA_EXT 0x859A + +#define GLEW_EXT_texture_env_combine GLEW_GET_VAR(__GLEW_EXT_texture_env_combine) + +#endif /* GL_EXT_texture_env_combine */ + +/* ------------------------ GL_EXT_texture_env_dot3 ------------------------ */ + +#ifndef GL_EXT_texture_env_dot3 +#define GL_EXT_texture_env_dot3 1 + +#define GL_DOT3_RGB_EXT 0x8740 +#define GL_DOT3_RGBA_EXT 0x8741 + +#define GLEW_EXT_texture_env_dot3 GLEW_GET_VAR(__GLEW_EXT_texture_env_dot3) + +#endif /* GL_EXT_texture_env_dot3 */ + +/* ------------------- GL_EXT_texture_filter_anisotropic ------------------- */ + +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_EXT_texture_filter_anisotropic 1 + +#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF + +#define GLEW_EXT_texture_filter_anisotropic GLEW_GET_VAR(__GLEW_EXT_texture_filter_anisotropic) + +#endif /* GL_EXT_texture_filter_anisotropic */ + +/* ------------------------- GL_EXT_texture_integer ------------------------ */ + +#ifndef GL_EXT_texture_integer +#define GL_EXT_texture_integer 1 + +#define GL_RGBA32UI_EXT 0x8D70 +#define GL_RGB32UI_EXT 0x8D71 +#define GL_ALPHA32UI_EXT 0x8D72 +#define GL_INTENSITY32UI_EXT 0x8D73 +#define GL_LUMINANCE32UI_EXT 0x8D74 +#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 +#define GL_RGBA16UI_EXT 0x8D76 +#define GL_RGB16UI_EXT 0x8D77 +#define GL_ALPHA16UI_EXT 0x8D78 +#define GL_INTENSITY16UI_EXT 0x8D79 +#define GL_LUMINANCE16UI_EXT 0x8D7A +#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B +#define GL_RGBA8UI_EXT 0x8D7C +#define GL_RGB8UI_EXT 0x8D7D +#define GL_ALPHA8UI_EXT 0x8D7E +#define GL_INTENSITY8UI_EXT 0x8D7F +#define GL_LUMINANCE8UI_EXT 0x8D80 +#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 +#define GL_RGBA32I_EXT 0x8D82 +#define GL_RGB32I_EXT 0x8D83 +#define GL_ALPHA32I_EXT 0x8D84 +#define GL_INTENSITY32I_EXT 0x8D85 +#define GL_LUMINANCE32I_EXT 0x8D86 +#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 +#define GL_RGBA16I_EXT 0x8D88 +#define GL_RGB16I_EXT 0x8D89 +#define GL_ALPHA16I_EXT 0x8D8A +#define GL_INTENSITY16I_EXT 0x8D8B +#define GL_LUMINANCE16I_EXT 0x8D8C +#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D +#define GL_RGBA8I_EXT 0x8D8E +#define GL_RGB8I_EXT 0x8D8F +#define GL_ALPHA8I_EXT 0x8D90 +#define GL_INTENSITY8I_EXT 0x8D91 +#define GL_LUMINANCE8I_EXT 0x8D92 +#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 +#define GL_RED_INTEGER_EXT 0x8D94 +#define GL_GREEN_INTEGER_EXT 0x8D95 +#define GL_BLUE_INTEGER_EXT 0x8D96 +#define GL_ALPHA_INTEGER_EXT 0x8D97 +#define GL_RGB_INTEGER_EXT 0x8D98 +#define GL_RGBA_INTEGER_EXT 0x8D99 +#define GL_BGR_INTEGER_EXT 0x8D9A +#define GL_BGRA_INTEGER_EXT 0x8D9B +#define GL_LUMINANCE_INTEGER_EXT 0x8D9C +#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D +#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E + +typedef void (GLAPIENTRY * PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); +typedef void (GLAPIENTRY * PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); +typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); +typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); + +#define glClearColorIiEXT GLEW_GET_FUN(__glewClearColorIiEXT) +#define glClearColorIuiEXT GLEW_GET_FUN(__glewClearColorIuiEXT) +#define glGetTexParameterIivEXT GLEW_GET_FUN(__glewGetTexParameterIivEXT) +#define glGetTexParameterIuivEXT GLEW_GET_FUN(__glewGetTexParameterIuivEXT) +#define glTexParameterIivEXT GLEW_GET_FUN(__glewTexParameterIivEXT) +#define glTexParameterIuivEXT GLEW_GET_FUN(__glewTexParameterIuivEXT) + +#define GLEW_EXT_texture_integer GLEW_GET_VAR(__GLEW_EXT_texture_integer) + +#endif /* GL_EXT_texture_integer */ + +/* ------------------------ GL_EXT_texture_lod_bias ------------------------ */ + +#ifndef GL_EXT_texture_lod_bias +#define GL_EXT_texture_lod_bias 1 + +#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD +#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 +#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 + +#define GLEW_EXT_texture_lod_bias GLEW_GET_VAR(__GLEW_EXT_texture_lod_bias) + +#endif /* GL_EXT_texture_lod_bias */ + +/* ---------------------- GL_EXT_texture_mirror_clamp ---------------------- */ + +#ifndef GL_EXT_texture_mirror_clamp +#define GL_EXT_texture_mirror_clamp 1 + +#define GL_MIRROR_CLAMP_EXT 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 +#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 + +#define GLEW_EXT_texture_mirror_clamp GLEW_GET_VAR(__GLEW_EXT_texture_mirror_clamp) + +#endif /* GL_EXT_texture_mirror_clamp */ + +/* ------------------------- GL_EXT_texture_object ------------------------- */ + +#ifndef GL_EXT_texture_object +#define GL_EXT_texture_object 1 + +#define GL_TEXTURE_PRIORITY_EXT 0x8066 +#define GL_TEXTURE_RESIDENT_EXT 0x8067 +#define GL_TEXTURE_1D_BINDING_EXT 0x8068 +#define GL_TEXTURE_2D_BINDING_EXT 0x8069 +#define GL_TEXTURE_3D_BINDING_EXT 0x806A + +typedef GLboolean (GLAPIENTRY * PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint* textures, GLboolean* residences); +typedef void (GLAPIENTRY * PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); +typedef void (GLAPIENTRY * PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint* textures); +typedef void (GLAPIENTRY * PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint* textures); +typedef GLboolean (GLAPIENTRY * PFNGLISTEXTUREEXTPROC) (GLuint texture); +typedef void (GLAPIENTRY * PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint* textures, const GLclampf* priorities); + +#define glAreTexturesResidentEXT GLEW_GET_FUN(__glewAreTexturesResidentEXT) +#define glBindTextureEXT GLEW_GET_FUN(__glewBindTextureEXT) +#define glDeleteTexturesEXT GLEW_GET_FUN(__glewDeleteTexturesEXT) +#define glGenTexturesEXT GLEW_GET_FUN(__glewGenTexturesEXT) +#define glIsTextureEXT GLEW_GET_FUN(__glewIsTextureEXT) +#define glPrioritizeTexturesEXT GLEW_GET_FUN(__glewPrioritizeTexturesEXT) + +#define GLEW_EXT_texture_object GLEW_GET_VAR(__GLEW_EXT_texture_object) + +#endif /* GL_EXT_texture_object */ + +/* --------------------- GL_EXT_texture_perturb_normal --------------------- */ + +#ifndef GL_EXT_texture_perturb_normal +#define GL_EXT_texture_perturb_normal 1 + +#define GL_PERTURB_EXT 0x85AE +#define GL_TEXTURE_NORMAL_EXT 0x85AF + +typedef void (GLAPIENTRY * PFNGLTEXTURENORMALEXTPROC) (GLenum mode); + +#define glTextureNormalEXT GLEW_GET_FUN(__glewTextureNormalEXT) + +#define GLEW_EXT_texture_perturb_normal GLEW_GET_VAR(__GLEW_EXT_texture_perturb_normal) + +#endif /* GL_EXT_texture_perturb_normal */ + +/* ------------------------ GL_EXT_texture_rectangle ----------------------- */ + +#ifndef GL_EXT_texture_rectangle +#define GL_EXT_texture_rectangle 1 + +#define GL_TEXTURE_RECTANGLE_EXT 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_EXT 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_EXT 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT 0x84F8 + +#define GLEW_EXT_texture_rectangle GLEW_GET_VAR(__GLEW_EXT_texture_rectangle) + +#endif /* GL_EXT_texture_rectangle */ + +/* -------------------------- GL_EXT_texture_sRGB -------------------------- */ + +#ifndef GL_EXT_texture_sRGB +#define GL_EXT_texture_sRGB 1 + +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB8_EXT 0x8C41 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 +#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 +#define GL_SLUMINANCE_EXT 0x8C46 +#define GL_SLUMINANCE8_EXT 0x8C47 +#define GL_COMPRESSED_SRGB_EXT 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 +#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B +#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F + +#define GLEW_EXT_texture_sRGB GLEW_GET_VAR(__GLEW_EXT_texture_sRGB) + +#endif /* GL_EXT_texture_sRGB */ + +/* --------------------- GL_EXT_texture_shared_exponent -------------------- */ + +#ifndef GL_EXT_texture_shared_exponent +#define GL_EXT_texture_shared_exponent 1 + +#define GL_RGB9_E5_EXT 0x8C3D +#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E +#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F + +#define GLEW_EXT_texture_shared_exponent GLEW_GET_VAR(__GLEW_EXT_texture_shared_exponent) + +#endif /* GL_EXT_texture_shared_exponent */ + +/* --------------------------- GL_EXT_timer_query -------------------------- */ + +#ifndef GL_EXT_timer_query +#define GL_EXT_timer_query 1 + +#define GL_TIME_ELAPSED_EXT 0x88BF + +typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT *params); +typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT *params); + +#define glGetQueryObjecti64vEXT GLEW_GET_FUN(__glewGetQueryObjecti64vEXT) +#define glGetQueryObjectui64vEXT GLEW_GET_FUN(__glewGetQueryObjectui64vEXT) + +#define GLEW_EXT_timer_query GLEW_GET_VAR(__GLEW_EXT_timer_query) + +#endif /* GL_EXT_timer_query */ + +/* -------------------------- GL_EXT_vertex_array -------------------------- */ + +#ifndef GL_EXT_vertex_array +#define GL_EXT_vertex_array 1 + +#define GL_DOUBLE_EXT 0x140A +#define GL_VERTEX_ARRAY_EXT 0x8074 +#define GL_NORMAL_ARRAY_EXT 0x8075 +#define GL_COLOR_ARRAY_EXT 0x8076 +#define GL_INDEX_ARRAY_EXT 0x8077 +#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 +#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 +#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A +#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B +#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C +#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D +#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E +#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F +#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 +#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 +#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 +#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 +#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 +#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 +#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 +#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 +#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A +#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B +#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C +#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D +#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E +#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F +#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 +#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 + +typedef void (GLAPIENTRY * PFNGLARRAYELEMENTEXTPROC) (GLint i); +typedef void (GLAPIENTRY * PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer); +typedef void (GLAPIENTRY * PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (GLAPIENTRY * PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean* pointer); +typedef void (GLAPIENTRY * PFNGLGETPOINTERVEXTPROC) (GLenum pname, void** params); +typedef void (GLAPIENTRY * PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void* pointer); +typedef void (GLAPIENTRY * PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void* pointer); +typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer); +typedef void (GLAPIENTRY * PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer); + +#define glArrayElementEXT GLEW_GET_FUN(__glewArrayElementEXT) +#define glColorPointerEXT GLEW_GET_FUN(__glewColorPointerEXT) +#define glDrawArraysEXT GLEW_GET_FUN(__glewDrawArraysEXT) +#define glEdgeFlagPointerEXT GLEW_GET_FUN(__glewEdgeFlagPointerEXT) +#define glGetPointervEXT GLEW_GET_FUN(__glewGetPointervEXT) +#define glIndexPointerEXT GLEW_GET_FUN(__glewIndexPointerEXT) +#define glNormalPointerEXT GLEW_GET_FUN(__glewNormalPointerEXT) +#define glTexCoordPointerEXT GLEW_GET_FUN(__glewTexCoordPointerEXT) +#define glVertexPointerEXT GLEW_GET_FUN(__glewVertexPointerEXT) + +#define GLEW_EXT_vertex_array GLEW_GET_VAR(__GLEW_EXT_vertex_array) + +#endif /* GL_EXT_vertex_array */ + +/* -------------------------- GL_EXT_vertex_shader ------------------------- */ + +#ifndef GL_EXT_vertex_shader +#define GL_EXT_vertex_shader 1 + +#define GL_VERTEX_SHADER_EXT 0x8780 +#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 +#define GL_OP_INDEX_EXT 0x8782 +#define GL_OP_NEGATE_EXT 0x8783 +#define GL_OP_DOT3_EXT 0x8784 +#define GL_OP_DOT4_EXT 0x8785 +#define GL_OP_MUL_EXT 0x8786 +#define GL_OP_ADD_EXT 0x8787 +#define GL_OP_MADD_EXT 0x8788 +#define GL_OP_FRAC_EXT 0x8789 +#define GL_OP_MAX_EXT 0x878A +#define GL_OP_MIN_EXT 0x878B +#define GL_OP_SET_GE_EXT 0x878C +#define GL_OP_SET_LT_EXT 0x878D +#define GL_OP_CLAMP_EXT 0x878E +#define GL_OP_FLOOR_EXT 0x878F +#define GL_OP_ROUND_EXT 0x8790 +#define GL_OP_EXP_BASE_2_EXT 0x8791 +#define GL_OP_LOG_BASE_2_EXT 0x8792 +#define GL_OP_POWER_EXT 0x8793 +#define GL_OP_RECIP_EXT 0x8794 +#define GL_OP_RECIP_SQRT_EXT 0x8795 +#define GL_OP_SUB_EXT 0x8796 +#define GL_OP_CROSS_PRODUCT_EXT 0x8797 +#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 +#define GL_OP_MOV_EXT 0x8799 +#define GL_OUTPUT_VERTEX_EXT 0x879A +#define GL_OUTPUT_COLOR0_EXT 0x879B +#define GL_OUTPUT_COLOR1_EXT 0x879C +#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D +#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E +#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F +#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 +#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 +#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 +#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 +#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 +#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 +#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 +#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 +#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 +#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 +#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA +#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB +#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC +#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD +#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE +#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF +#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 +#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 +#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 +#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 +#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 +#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 +#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 +#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 +#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 +#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 +#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA +#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB +#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC +#define GL_OUTPUT_FOG_EXT 0x87BD +#define GL_SCALAR_EXT 0x87BE +#define GL_VECTOR_EXT 0x87BF +#define GL_MATRIX_EXT 0x87C0 +#define GL_VARIANT_EXT 0x87C1 +#define GL_INVARIANT_EXT 0x87C2 +#define GL_LOCAL_CONSTANT_EXT 0x87C3 +#define GL_LOCAL_EXT 0x87C4 +#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 +#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 +#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 +#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 +#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CC +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CD +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE +#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF +#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 +#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 +#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 +#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 +#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 +#define GL_X_EXT 0x87D5 +#define GL_Y_EXT 0x87D6 +#define GL_Z_EXT 0x87D7 +#define GL_W_EXT 0x87D8 +#define GL_NEGATIVE_X_EXT 0x87D9 +#define GL_NEGATIVE_Y_EXT 0x87DA +#define GL_NEGATIVE_Z_EXT 0x87DB +#define GL_NEGATIVE_W_EXT 0x87DC +#define GL_ZERO_EXT 0x87DD +#define GL_ONE_EXT 0x87DE +#define GL_NEGATIVE_ONE_EXT 0x87DF +#define GL_NORMALIZED_RANGE_EXT 0x87E0 +#define GL_FULL_RANGE_EXT 0x87E1 +#define GL_CURRENT_VERTEX_EXT 0x87E2 +#define GL_MVP_MATRIX_EXT 0x87E3 +#define GL_VARIANT_VALUE_EXT 0x87E4 +#define GL_VARIANT_DATATYPE_EXT 0x87E5 +#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 +#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 +#define GL_VARIANT_ARRAY_EXT 0x87E8 +#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 +#define GL_INVARIANT_VALUE_EXT 0x87EA +#define GL_INVARIANT_DATATYPE_EXT 0x87EB +#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC +#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED + +typedef void (GLAPIENTRY * PFNGLBEGINVERTEXSHADEREXTPROC) (void); +typedef GLuint (GLAPIENTRY * PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); +typedef GLuint (GLAPIENTRY * PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); +typedef GLuint (GLAPIENTRY * PFNGLBINDPARAMETEREXTPROC) (GLenum value); +typedef GLuint (GLAPIENTRY * PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); +typedef GLuint (GLAPIENTRY * PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); +typedef void (GLAPIENTRY * PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); +typedef void (GLAPIENTRY * PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); +typedef void (GLAPIENTRY * PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef void (GLAPIENTRY * PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef void (GLAPIENTRY * PFNGLENDVERTEXSHADEREXTPROC) (void); +typedef void (GLAPIENTRY * PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef GLuint (GLAPIENTRY * PFNGLGENSYMBOLSEXTPROC) (GLenum dataType, GLenum storageType, GLenum range, GLuint components); +typedef GLuint (GLAPIENTRY * PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); +typedef void (GLAPIENTRY * PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (GLAPIENTRY * PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (GLAPIENTRY * PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (GLAPIENTRY * PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (GLAPIENTRY * PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (GLAPIENTRY * PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (GLAPIENTRY * PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (GLAPIENTRY * PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (GLAPIENTRY * PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (GLAPIENTRY * PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid **data); +typedef void (GLAPIENTRY * PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef GLboolean (GLAPIENTRY * PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); +typedef void (GLAPIENTRY * PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, GLvoid *addr); +typedef void (GLAPIENTRY * PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, GLvoid *addr); +typedef void (GLAPIENTRY * PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); +typedef void (GLAPIENTRY * PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); +typedef void (GLAPIENTRY * PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +typedef void (GLAPIENTRY * PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (GLAPIENTRY * PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, GLvoid *addr); +typedef void (GLAPIENTRY * PFNGLVARIANTBVEXTPROC) (GLuint id, GLbyte *addr); +typedef void (GLAPIENTRY * PFNGLVARIANTDVEXTPROC) (GLuint id, GLdouble *addr); +typedef void (GLAPIENTRY * PFNGLVARIANTFVEXTPROC) (GLuint id, GLfloat *addr); +typedef void (GLAPIENTRY * PFNGLVARIANTIVEXTPROC) (GLuint id, GLint *addr); +typedef void (GLAPIENTRY * PFNGLVARIANTSVEXTPROC) (GLuint id, GLshort *addr); +typedef void (GLAPIENTRY * PFNGLVARIANTUBVEXTPROC) (GLuint id, GLubyte *addr); +typedef void (GLAPIENTRY * PFNGLVARIANTUIVEXTPROC) (GLuint id, GLuint *addr); +typedef void (GLAPIENTRY * PFNGLVARIANTUSVEXTPROC) (GLuint id, GLushort *addr); +typedef void (GLAPIENTRY * PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); + +#define glBeginVertexShaderEXT GLEW_GET_FUN(__glewBeginVertexShaderEXT) +#define glBindLightParameterEXT GLEW_GET_FUN(__glewBindLightParameterEXT) +#define glBindMaterialParameterEXT GLEW_GET_FUN(__glewBindMaterialParameterEXT) +#define glBindParameterEXT GLEW_GET_FUN(__glewBindParameterEXT) +#define glBindTexGenParameterEXT GLEW_GET_FUN(__glewBindTexGenParameterEXT) +#define glBindTextureUnitParameterEXT GLEW_GET_FUN(__glewBindTextureUnitParameterEXT) +#define glBindVertexShaderEXT GLEW_GET_FUN(__glewBindVertexShaderEXT) +#define glDeleteVertexShaderEXT GLEW_GET_FUN(__glewDeleteVertexShaderEXT) +#define glDisableVariantClientStateEXT GLEW_GET_FUN(__glewDisableVariantClientStateEXT) +#define glEnableVariantClientStateEXT GLEW_GET_FUN(__glewEnableVariantClientStateEXT) +#define glEndVertexShaderEXT GLEW_GET_FUN(__glewEndVertexShaderEXT) +#define glExtractComponentEXT GLEW_GET_FUN(__glewExtractComponentEXT) +#define glGenSymbolsEXT GLEW_GET_FUN(__glewGenSymbolsEXT) +#define glGenVertexShadersEXT GLEW_GET_FUN(__glewGenVertexShadersEXT) +#define glGetInvariantBooleanvEXT GLEW_GET_FUN(__glewGetInvariantBooleanvEXT) +#define glGetInvariantFloatvEXT GLEW_GET_FUN(__glewGetInvariantFloatvEXT) +#define glGetInvariantIntegervEXT GLEW_GET_FUN(__glewGetInvariantIntegervEXT) +#define glGetLocalConstantBooleanvEXT GLEW_GET_FUN(__glewGetLocalConstantBooleanvEXT) +#define glGetLocalConstantFloatvEXT GLEW_GET_FUN(__glewGetLocalConstantFloatvEXT) +#define glGetLocalConstantIntegervEXT GLEW_GET_FUN(__glewGetLocalConstantIntegervEXT) +#define glGetVariantBooleanvEXT GLEW_GET_FUN(__glewGetVariantBooleanvEXT) +#define glGetVariantFloatvEXT GLEW_GET_FUN(__glewGetVariantFloatvEXT) +#define glGetVariantIntegervEXT GLEW_GET_FUN(__glewGetVariantIntegervEXT) +#define glGetVariantPointervEXT GLEW_GET_FUN(__glewGetVariantPointervEXT) +#define glInsertComponentEXT GLEW_GET_FUN(__glewInsertComponentEXT) +#define glIsVariantEnabledEXT GLEW_GET_FUN(__glewIsVariantEnabledEXT) +#define glSetInvariantEXT GLEW_GET_FUN(__glewSetInvariantEXT) +#define glSetLocalConstantEXT GLEW_GET_FUN(__glewSetLocalConstantEXT) +#define glShaderOp1EXT GLEW_GET_FUN(__glewShaderOp1EXT) +#define glShaderOp2EXT GLEW_GET_FUN(__glewShaderOp2EXT) +#define glShaderOp3EXT GLEW_GET_FUN(__glewShaderOp3EXT) +#define glSwizzleEXT GLEW_GET_FUN(__glewSwizzleEXT) +#define glVariantPointerEXT GLEW_GET_FUN(__glewVariantPointerEXT) +#define glVariantbvEXT GLEW_GET_FUN(__glewVariantbvEXT) +#define glVariantdvEXT GLEW_GET_FUN(__glewVariantdvEXT) +#define glVariantfvEXT GLEW_GET_FUN(__glewVariantfvEXT) +#define glVariantivEXT GLEW_GET_FUN(__glewVariantivEXT) +#define glVariantsvEXT GLEW_GET_FUN(__glewVariantsvEXT) +#define glVariantubvEXT GLEW_GET_FUN(__glewVariantubvEXT) +#define glVariantuivEXT GLEW_GET_FUN(__glewVariantuivEXT) +#define glVariantusvEXT GLEW_GET_FUN(__glewVariantusvEXT) +#define glWriteMaskEXT GLEW_GET_FUN(__glewWriteMaskEXT) + +#define GLEW_EXT_vertex_shader GLEW_GET_VAR(__GLEW_EXT_vertex_shader) + +#endif /* GL_EXT_vertex_shader */ + +/* ------------------------ GL_EXT_vertex_weighting ------------------------ */ + +#ifndef GL_EXT_vertex_weighting +#define GL_EXT_vertex_weighting 1 + +#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 +#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 +#define GL_MODELVIEW0_EXT 0x1700 +#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 +#define GL_MODELVIEW1_MATRIX_EXT 0x8506 +#define GL_VERTEX_WEIGHTING_EXT 0x8509 +#define GL_MODELVIEW1_EXT 0x850A +#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B +#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C +#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D +#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E +#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F +#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 + +typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, void* pointer); +typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); +typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTFVEXTPROC) (GLfloat* weight); + +#define glVertexWeightPointerEXT GLEW_GET_FUN(__glewVertexWeightPointerEXT) +#define glVertexWeightfEXT GLEW_GET_FUN(__glewVertexWeightfEXT) +#define glVertexWeightfvEXT GLEW_GET_FUN(__glewVertexWeightfvEXT) + +#define GLEW_EXT_vertex_weighting GLEW_GET_VAR(__GLEW_EXT_vertex_weighting) + +#endif /* GL_EXT_vertex_weighting */ + +/* ---------------------- GL_GREMEDY_frame_terminator ---------------------- */ + +#ifndef GL_GREMEDY_frame_terminator +#define GL_GREMEDY_frame_terminator 1 + +typedef void (GLAPIENTRY * PFNGLFRAMETERMINATORGREMEDYPROC) (void); + +#define glFrameTerminatorGREMEDY GLEW_GET_FUN(__glewFrameTerminatorGREMEDY) + +#define GLEW_GREMEDY_frame_terminator GLEW_GET_VAR(__GLEW_GREMEDY_frame_terminator) + +#endif /* GL_GREMEDY_frame_terminator */ + +/* ------------------------ GL_GREMEDY_string_marker ----------------------- */ + +#ifndef GL_GREMEDY_string_marker +#define GL_GREMEDY_string_marker 1 + +typedef void (GLAPIENTRY * PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const void* string); + +#define glStringMarkerGREMEDY GLEW_GET_FUN(__glewStringMarkerGREMEDY) + +#define GLEW_GREMEDY_string_marker GLEW_GET_VAR(__GLEW_GREMEDY_string_marker) + +#endif /* GL_GREMEDY_string_marker */ + +/* --------------------- GL_HP_convolution_border_modes -------------------- */ + +#ifndef GL_HP_convolution_border_modes +#define GL_HP_convolution_border_modes 1 + +#define GLEW_HP_convolution_border_modes GLEW_GET_VAR(__GLEW_HP_convolution_border_modes) + +#endif /* GL_HP_convolution_border_modes */ + +/* ------------------------- GL_HP_image_transform ------------------------- */ + +#ifndef GL_HP_image_transform +#define GL_HP_image_transform 1 + +typedef void (GLAPIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, const GLfloat param); +typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, const GLint param); +typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint* params); + +#define glGetImageTransformParameterfvHP GLEW_GET_FUN(__glewGetImageTransformParameterfvHP) +#define glGetImageTransformParameterivHP GLEW_GET_FUN(__glewGetImageTransformParameterivHP) +#define glImageTransformParameterfHP GLEW_GET_FUN(__glewImageTransformParameterfHP) +#define glImageTransformParameterfvHP GLEW_GET_FUN(__glewImageTransformParameterfvHP) +#define glImageTransformParameteriHP GLEW_GET_FUN(__glewImageTransformParameteriHP) +#define glImageTransformParameterivHP GLEW_GET_FUN(__glewImageTransformParameterivHP) + +#define GLEW_HP_image_transform GLEW_GET_VAR(__GLEW_HP_image_transform) + +#endif /* GL_HP_image_transform */ + +/* -------------------------- GL_HP_occlusion_test ------------------------- */ + +#ifndef GL_HP_occlusion_test +#define GL_HP_occlusion_test 1 + +#define GL_OCCLUSION_TEST_HP 0x8165 +#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 + +#define GLEW_HP_occlusion_test GLEW_GET_VAR(__GLEW_HP_occlusion_test) + +#endif /* GL_HP_occlusion_test */ + +/* ------------------------- GL_HP_texture_lighting ------------------------ */ + +#ifndef GL_HP_texture_lighting +#define GL_HP_texture_lighting 1 + +#define GLEW_HP_texture_lighting GLEW_GET_VAR(__GLEW_HP_texture_lighting) + +#endif /* GL_HP_texture_lighting */ + +/* --------------------------- GL_IBM_cull_vertex -------------------------- */ + +#ifndef GL_IBM_cull_vertex +#define GL_IBM_cull_vertex 1 + +#define GL_CULL_VERTEX_IBM 103050 + +#define GLEW_IBM_cull_vertex GLEW_GET_VAR(__GLEW_IBM_cull_vertex) + +#endif /* GL_IBM_cull_vertex */ + +/* ---------------------- GL_IBM_multimode_draw_arrays --------------------- */ + +#ifndef GL_IBM_multimode_draw_arrays +#define GL_IBM_multimode_draw_arrays 1 + +typedef void (GLAPIENTRY * PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum* mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); +typedef void (GLAPIENTRY * PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum* mode, const GLsizei *count, GLenum type, const GLvoid * const *indices, GLsizei primcount, GLint modestride); + +#define glMultiModeDrawArraysIBM GLEW_GET_FUN(__glewMultiModeDrawArraysIBM) +#define glMultiModeDrawElementsIBM GLEW_GET_FUN(__glewMultiModeDrawElementsIBM) + +#define GLEW_IBM_multimode_draw_arrays GLEW_GET_VAR(__GLEW_IBM_multimode_draw_arrays) + +#endif /* GL_IBM_multimode_draw_arrays */ + +/* ------------------------- GL_IBM_rasterpos_clip ------------------------- */ + +#ifndef GL_IBM_rasterpos_clip +#define GL_IBM_rasterpos_clip 1 + +#define GL_RASTER_POSITION_UNCLIPPED_IBM 103010 + +#define GLEW_IBM_rasterpos_clip GLEW_GET_VAR(__GLEW_IBM_rasterpos_clip) + +#endif /* GL_IBM_rasterpos_clip */ + +/* --------------------------- GL_IBM_static_data -------------------------- */ + +#ifndef GL_IBM_static_data +#define GL_IBM_static_data 1 + +#define GL_ALL_STATIC_DATA_IBM 103060 +#define GL_STATIC_VERTEX_ARRAY_IBM 103061 + +#define GLEW_IBM_static_data GLEW_GET_VAR(__GLEW_IBM_static_data) + +#endif /* GL_IBM_static_data */ + +/* --------------------- GL_IBM_texture_mirrored_repeat -------------------- */ + +#ifndef GL_IBM_texture_mirrored_repeat +#define GL_IBM_texture_mirrored_repeat 1 + +#define GL_MIRRORED_REPEAT_IBM 0x8370 + +#define GLEW_IBM_texture_mirrored_repeat GLEW_GET_VAR(__GLEW_IBM_texture_mirrored_repeat) + +#endif /* GL_IBM_texture_mirrored_repeat */ + +/* ----------------------- GL_IBM_vertex_array_lists ----------------------- */ + +#ifndef GL_IBM_vertex_array_lists +#define GL_IBM_vertex_array_lists 1 + +#define GL_VERTEX_ARRAY_LIST_IBM 103070 +#define GL_NORMAL_ARRAY_LIST_IBM 103071 +#define GL_COLOR_ARRAY_LIST_IBM 103072 +#define GL_INDEX_ARRAY_LIST_IBM 103073 +#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 +#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 +#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 +#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 +#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 +#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 +#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 +#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 +#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 +#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 +#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 +#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 + +typedef void (GLAPIENTRY * PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY * PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY * PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY * PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY * PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY * PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); + +#define glColorPointerListIBM GLEW_GET_FUN(__glewColorPointerListIBM) +#define glEdgeFlagPointerListIBM GLEW_GET_FUN(__glewEdgeFlagPointerListIBM) +#define glFogCoordPointerListIBM GLEW_GET_FUN(__glewFogCoordPointerListIBM) +#define glIndexPointerListIBM GLEW_GET_FUN(__glewIndexPointerListIBM) +#define glNormalPointerListIBM GLEW_GET_FUN(__glewNormalPointerListIBM) +#define glSecondaryColorPointerListIBM GLEW_GET_FUN(__glewSecondaryColorPointerListIBM) +#define glTexCoordPointerListIBM GLEW_GET_FUN(__glewTexCoordPointerListIBM) +#define glVertexPointerListIBM GLEW_GET_FUN(__glewVertexPointerListIBM) + +#define GLEW_IBM_vertex_array_lists GLEW_GET_VAR(__GLEW_IBM_vertex_array_lists) + +#endif /* GL_IBM_vertex_array_lists */ + +/* -------------------------- GL_INGR_color_clamp -------------------------- */ + +#ifndef GL_INGR_color_clamp +#define GL_INGR_color_clamp 1 + +#define GL_RED_MIN_CLAMP_INGR 0x8560 +#define GL_GREEN_MIN_CLAMP_INGR 0x8561 +#define GL_BLUE_MIN_CLAMP_INGR 0x8562 +#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 +#define GL_RED_MAX_CLAMP_INGR 0x8564 +#define GL_GREEN_MAX_CLAMP_INGR 0x8565 +#define GL_BLUE_MAX_CLAMP_INGR 0x8566 +#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 + +#define GLEW_INGR_color_clamp GLEW_GET_VAR(__GLEW_INGR_color_clamp) + +#endif /* GL_INGR_color_clamp */ + +/* ------------------------- GL_INGR_interlace_read ------------------------ */ + +#ifndef GL_INGR_interlace_read +#define GL_INGR_interlace_read 1 + +#define GL_INTERLACE_READ_INGR 0x8568 + +#define GLEW_INGR_interlace_read GLEW_GET_VAR(__GLEW_INGR_interlace_read) + +#endif /* GL_INGR_interlace_read */ + +/* ------------------------ GL_INTEL_parallel_arrays ----------------------- */ + +#ifndef GL_INTEL_parallel_arrays +#define GL_INTEL_parallel_arrays 1 + +#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 +#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 +#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 +#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 +#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 + +typedef void (GLAPIENTRY * PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void** pointer); +typedef void (GLAPIENTRY * PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void** pointer); +typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void** pointer); +typedef void (GLAPIENTRY * PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void** pointer); + +#define glColorPointervINTEL GLEW_GET_FUN(__glewColorPointervINTEL) +#define glNormalPointervINTEL GLEW_GET_FUN(__glewNormalPointervINTEL) +#define glTexCoordPointervINTEL GLEW_GET_FUN(__glewTexCoordPointervINTEL) +#define glVertexPointervINTEL GLEW_GET_FUN(__glewVertexPointervINTEL) + +#define GLEW_INTEL_parallel_arrays GLEW_GET_VAR(__GLEW_INTEL_parallel_arrays) + +#endif /* GL_INTEL_parallel_arrays */ + +/* ------------------------ GL_INTEL_texture_scissor ----------------------- */ + +#ifndef GL_INTEL_texture_scissor +#define GL_INTEL_texture_scissor 1 + +typedef void (GLAPIENTRY * PFNGLTEXSCISSORFUNCINTELPROC) (GLenum target, GLenum lfunc, GLenum hfunc); +typedef void (GLAPIENTRY * PFNGLTEXSCISSORINTELPROC) (GLenum target, GLclampf tlow, GLclampf thigh); + +#define glTexScissorFuncINTEL GLEW_GET_FUN(__glewTexScissorFuncINTEL) +#define glTexScissorINTEL GLEW_GET_FUN(__glewTexScissorINTEL) + +#define GLEW_INTEL_texture_scissor GLEW_GET_VAR(__GLEW_INTEL_texture_scissor) + +#endif /* GL_INTEL_texture_scissor */ + +/* -------------------------- GL_KTX_buffer_region ------------------------- */ + +#ifndef GL_KTX_buffer_region +#define GL_KTX_buffer_region 1 + +#define GL_KTX_FRONT_REGION 0x0 +#define GL_KTX_BACK_REGION 0x1 +#define GL_KTX_Z_REGION 0x2 +#define GL_KTX_STENCIL_REGION 0x3 + +typedef GLuint (GLAPIENTRY * PFNGLBUFFERREGIONENABLEDEXTPROC) (void); +typedef void (GLAPIENTRY * PFNGLDELETEBUFFERREGIONEXTPROC) (GLenum region); +typedef void (GLAPIENTRY * PFNGLDRAWBUFFERREGIONEXTPROC) (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height, GLint xDest, GLint yDest); +typedef GLuint (GLAPIENTRY * PFNGLNEWBUFFERREGIONEXTPROC) (GLenum region); +typedef void (GLAPIENTRY * PFNGLREADBUFFERREGIONEXTPROC) (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height); + +#define glBufferRegionEnabledEXT GLEW_GET_FUN(__glewBufferRegionEnabledEXT) +#define glDeleteBufferRegionEXT GLEW_GET_FUN(__glewDeleteBufferRegionEXT) +#define glDrawBufferRegionEXT GLEW_GET_FUN(__glewDrawBufferRegionEXT) +#define glNewBufferRegionEXT GLEW_GET_FUN(__glewNewBufferRegionEXT) +#define glReadBufferRegionEXT GLEW_GET_FUN(__glewReadBufferRegionEXT) + +#define GLEW_KTX_buffer_region GLEW_GET_VAR(__GLEW_KTX_buffer_region) + +#endif /* GL_KTX_buffer_region */ + +/* ------------------------- GL_MESAX_texture_stack ------------------------ */ + +#ifndef GL_MESAX_texture_stack +#define GL_MESAX_texture_stack 1 + +#define GL_TEXTURE_1D_STACK_MESAX 0x8759 +#define GL_TEXTURE_2D_STACK_MESAX 0x875A +#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B +#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C +#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D +#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E + +#define GLEW_MESAX_texture_stack GLEW_GET_VAR(__GLEW_MESAX_texture_stack) + +#endif /* GL_MESAX_texture_stack */ + +/* -------------------------- GL_MESA_pack_invert -------------------------- */ + +#ifndef GL_MESA_pack_invert +#define GL_MESA_pack_invert 1 + +#define GL_PACK_INVERT_MESA 0x8758 + +#define GLEW_MESA_pack_invert GLEW_GET_VAR(__GLEW_MESA_pack_invert) + +#endif /* GL_MESA_pack_invert */ + +/* ------------------------- GL_MESA_resize_buffers ------------------------ */ + +#ifndef GL_MESA_resize_buffers +#define GL_MESA_resize_buffers 1 + +typedef void (GLAPIENTRY * PFNGLRESIZEBUFFERSMESAPROC) (void); + +#define glResizeBuffersMESA GLEW_GET_FUN(__glewResizeBuffersMESA) + +#define GLEW_MESA_resize_buffers GLEW_GET_VAR(__GLEW_MESA_resize_buffers) + +#endif /* GL_MESA_resize_buffers */ + +/* --------------------------- GL_MESA_window_pos -------------------------- */ + +#ifndef GL_MESA_window_pos +#define GL_MESA_window_pos 1 + +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IVMESAPROC) (const GLint* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SVMESAPROC) (const GLshort* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IVMESAPROC) (const GLint* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVMESAPROC) (const GLshort* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS4IVMESAPROC) (const GLint* p); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY * PFNGLWINDOWPOS4SVMESAPROC) (const GLshort* p); + +#define glWindowPos2dMESA GLEW_GET_FUN(__glewWindowPos2dMESA) +#define glWindowPos2dvMESA GLEW_GET_FUN(__glewWindowPos2dvMESA) +#define glWindowPos2fMESA GLEW_GET_FUN(__glewWindowPos2fMESA) +#define glWindowPos2fvMESA GLEW_GET_FUN(__glewWindowPos2fvMESA) +#define glWindowPos2iMESA GLEW_GET_FUN(__glewWindowPos2iMESA) +#define glWindowPos2ivMESA GLEW_GET_FUN(__glewWindowPos2ivMESA) +#define glWindowPos2sMESA GLEW_GET_FUN(__glewWindowPos2sMESA) +#define glWindowPos2svMESA GLEW_GET_FUN(__glewWindowPos2svMESA) +#define glWindowPos3dMESA GLEW_GET_FUN(__glewWindowPos3dMESA) +#define glWindowPos3dvMESA GLEW_GET_FUN(__glewWindowPos3dvMESA) +#define glWindowPos3fMESA GLEW_GET_FUN(__glewWindowPos3fMESA) +#define glWindowPos3fvMESA GLEW_GET_FUN(__glewWindowPos3fvMESA) +#define glWindowPos3iMESA GLEW_GET_FUN(__glewWindowPos3iMESA) +#define glWindowPos3ivMESA GLEW_GET_FUN(__glewWindowPos3ivMESA) +#define glWindowPos3sMESA GLEW_GET_FUN(__glewWindowPos3sMESA) +#define glWindowPos3svMESA GLEW_GET_FUN(__glewWindowPos3svMESA) +#define glWindowPos4dMESA GLEW_GET_FUN(__glewWindowPos4dMESA) +#define glWindowPos4dvMESA GLEW_GET_FUN(__glewWindowPos4dvMESA) +#define glWindowPos4fMESA GLEW_GET_FUN(__glewWindowPos4fMESA) +#define glWindowPos4fvMESA GLEW_GET_FUN(__glewWindowPos4fvMESA) +#define glWindowPos4iMESA GLEW_GET_FUN(__glewWindowPos4iMESA) +#define glWindowPos4ivMESA GLEW_GET_FUN(__glewWindowPos4ivMESA) +#define glWindowPos4sMESA GLEW_GET_FUN(__glewWindowPos4sMESA) +#define glWindowPos4svMESA GLEW_GET_FUN(__glewWindowPos4svMESA) + +#define GLEW_MESA_window_pos GLEW_GET_VAR(__GLEW_MESA_window_pos) + +#endif /* GL_MESA_window_pos */ + +/* ------------------------- GL_MESA_ycbcr_texture ------------------------- */ + +#ifndef GL_MESA_ycbcr_texture +#define GL_MESA_ycbcr_texture 1 + +#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB +#define GL_YCBCR_MESA 0x8757 + +#define GLEW_MESA_ycbcr_texture GLEW_GET_VAR(__GLEW_MESA_ycbcr_texture) + +#endif /* GL_MESA_ycbcr_texture */ + +/* --------------------------- GL_NV_blend_square -------------------------- */ + +#ifndef GL_NV_blend_square +#define GL_NV_blend_square 1 + +#define GLEW_NV_blend_square GLEW_GET_VAR(__GLEW_NV_blend_square) + +#endif /* GL_NV_blend_square */ + +/* ----------------------- GL_NV_copy_depth_to_color ----------------------- */ + +#ifndef GL_NV_copy_depth_to_color +#define GL_NV_copy_depth_to_color 1 + +#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E +#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F + +#define GLEW_NV_copy_depth_to_color GLEW_GET_VAR(__GLEW_NV_copy_depth_to_color) + +#endif /* GL_NV_copy_depth_to_color */ + +/* ------------------------ GL_NV_depth_buffer_float ----------------------- */ + +#ifndef GL_NV_depth_buffer_float +#define GL_NV_depth_buffer_float 1 + +#define GL_DEPTH_COMPONENT32F_NV 0x8DAB +#define GL_DEPTH32F_STENCIL8_NV 0x8DAC +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD +#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF + +typedef void (GLAPIENTRY * PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); +typedef void (GLAPIENTRY * PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); +typedef void (GLAPIENTRY * PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); + +#define glClearDepthdNV GLEW_GET_FUN(__glewClearDepthdNV) +#define glDepthBoundsdNV GLEW_GET_FUN(__glewDepthBoundsdNV) +#define glDepthRangedNV GLEW_GET_FUN(__glewDepthRangedNV) + +#define GLEW_NV_depth_buffer_float GLEW_GET_VAR(__GLEW_NV_depth_buffer_float) + +#endif /* GL_NV_depth_buffer_float */ + +/* --------------------------- GL_NV_depth_clamp --------------------------- */ + +#ifndef GL_NV_depth_clamp +#define GL_NV_depth_clamp 1 + +#define GL_DEPTH_CLAMP_NV 0x864F + +#define GLEW_NV_depth_clamp GLEW_GET_VAR(__GLEW_NV_depth_clamp) + +#endif /* GL_NV_depth_clamp */ + +/* ---------------------- GL_NV_depth_range_unclamped ---------------------- */ + +#ifndef GL_NV_depth_range_unclamped +#define GL_NV_depth_range_unclamped 1 + +#define GL_SAMPLE_COUNT_BITS_NV 0x8864 +#define GL_CURRENT_SAMPLE_COUNT_QUERY_NV 0x8865 +#define GL_QUERY_RESULT_NV 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_NV 0x8867 +#define GL_SAMPLE_COUNT_NV 0x8914 + +#define GLEW_NV_depth_range_unclamped GLEW_GET_VAR(__GLEW_NV_depth_range_unclamped) + +#endif /* GL_NV_depth_range_unclamped */ + +/* ---------------------------- GL_NV_evaluators --------------------------- */ + +#ifndef GL_NV_evaluators +#define GL_NV_evaluators 1 + +#define GL_EVAL_2D_NV 0x86C0 +#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 +#define GL_MAP_TESSELLATION_NV 0x86C2 +#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 +#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 +#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 +#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 +#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 +#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 +#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 +#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA +#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB +#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC +#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD +#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE +#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF +#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 +#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 +#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 +#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 +#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 +#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 +#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 +#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 + +typedef void (GLAPIENTRY * PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); +typedef void (GLAPIENTRY * PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void* points); +typedef void (GLAPIENTRY * PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void* points); +typedef void (GLAPIENTRY * PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint* params); + +#define glEvalMapsNV GLEW_GET_FUN(__glewEvalMapsNV) +#define glGetMapAttribParameterfvNV GLEW_GET_FUN(__glewGetMapAttribParameterfvNV) +#define glGetMapAttribParameterivNV GLEW_GET_FUN(__glewGetMapAttribParameterivNV) +#define glGetMapControlPointsNV GLEW_GET_FUN(__glewGetMapControlPointsNV) +#define glGetMapParameterfvNV GLEW_GET_FUN(__glewGetMapParameterfvNV) +#define glGetMapParameterivNV GLEW_GET_FUN(__glewGetMapParameterivNV) +#define glMapControlPointsNV GLEW_GET_FUN(__glewMapControlPointsNV) +#define glMapParameterfvNV GLEW_GET_FUN(__glewMapParameterfvNV) +#define glMapParameterivNV GLEW_GET_FUN(__glewMapParameterivNV) + +#define GLEW_NV_evaluators GLEW_GET_VAR(__GLEW_NV_evaluators) + +#endif /* GL_NV_evaluators */ + +/* ------------------------------ GL_NV_fence ------------------------------ */ + +#ifndef GL_NV_fence +#define GL_NV_fence 1 + +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FENCE_CONDITION_NV 0x84F4 + +typedef void (GLAPIENTRY * PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint* fences); +typedef void (GLAPIENTRY * PFNGLFINISHFENCENVPROC) (GLuint fence); +typedef void (GLAPIENTRY * PFNGLGENFENCESNVPROC) (GLsizei n, GLuint* fences); +typedef void (GLAPIENTRY * PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint* params); +typedef GLboolean (GLAPIENTRY * PFNGLISFENCENVPROC) (GLuint fence); +typedef void (GLAPIENTRY * PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); +typedef GLboolean (GLAPIENTRY * PFNGLTESTFENCENVPROC) (GLuint fence); + +#define glDeleteFencesNV GLEW_GET_FUN(__glewDeleteFencesNV) +#define glFinishFenceNV GLEW_GET_FUN(__glewFinishFenceNV) +#define glGenFencesNV GLEW_GET_FUN(__glewGenFencesNV) +#define glGetFenceivNV GLEW_GET_FUN(__glewGetFenceivNV) +#define glIsFenceNV GLEW_GET_FUN(__glewIsFenceNV) +#define glSetFenceNV GLEW_GET_FUN(__glewSetFenceNV) +#define glTestFenceNV GLEW_GET_FUN(__glewTestFenceNV) + +#define GLEW_NV_fence GLEW_GET_VAR(__GLEW_NV_fence) + +#endif /* GL_NV_fence */ + +/* --------------------------- GL_NV_float_buffer -------------------------- */ + +#ifndef GL_NV_float_buffer +#define GL_NV_float_buffer 1 + +#define GL_FLOAT_R_NV 0x8880 +#define GL_FLOAT_RG_NV 0x8881 +#define GL_FLOAT_RGB_NV 0x8882 +#define GL_FLOAT_RGBA_NV 0x8883 +#define GL_FLOAT_R16_NV 0x8884 +#define GL_FLOAT_R32_NV 0x8885 +#define GL_FLOAT_RG16_NV 0x8886 +#define GL_FLOAT_RG32_NV 0x8887 +#define GL_FLOAT_RGB16_NV 0x8888 +#define GL_FLOAT_RGB32_NV 0x8889 +#define GL_FLOAT_RGBA16_NV 0x888A +#define GL_FLOAT_RGBA32_NV 0x888B +#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C +#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D +#define GL_FLOAT_RGBA_MODE_NV 0x888E + +#define GLEW_NV_float_buffer GLEW_GET_VAR(__GLEW_NV_float_buffer) + +#endif /* GL_NV_float_buffer */ + +/* --------------------------- GL_NV_fog_distance -------------------------- */ + +#ifndef GL_NV_fog_distance +#define GL_NV_fog_distance 1 + +#define GL_FOG_DISTANCE_MODE_NV 0x855A +#define GL_EYE_RADIAL_NV 0x855B +#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C + +#define GLEW_NV_fog_distance GLEW_GET_VAR(__GLEW_NV_fog_distance) + +#endif /* GL_NV_fog_distance */ + +/* ------------------------- GL_NV_fragment_program ------------------------ */ + +#ifndef GL_NV_fragment_program +#define GL_NV_fragment_program 1 + +#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 +#define GL_FRAGMENT_PROGRAM_NV 0x8870 +#define GL_MAX_TEXTURE_COORDS_NV 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 +#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 +#define GL_PROGRAM_ERROR_STRING_NV 0x8874 + +typedef void (GLAPIENTRY * PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLdouble *params); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLfloat *params); +typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, const GLdouble v[]); +typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, const GLfloat v[]); + +#define glGetProgramNamedParameterdvNV GLEW_GET_FUN(__glewGetProgramNamedParameterdvNV) +#define glGetProgramNamedParameterfvNV GLEW_GET_FUN(__glewGetProgramNamedParameterfvNV) +#define glProgramNamedParameter4dNV GLEW_GET_FUN(__glewProgramNamedParameter4dNV) +#define glProgramNamedParameter4dvNV GLEW_GET_FUN(__glewProgramNamedParameter4dvNV) +#define glProgramNamedParameter4fNV GLEW_GET_FUN(__glewProgramNamedParameter4fNV) +#define glProgramNamedParameter4fvNV GLEW_GET_FUN(__glewProgramNamedParameter4fvNV) + +#define GLEW_NV_fragment_program GLEW_GET_VAR(__GLEW_NV_fragment_program) + +#endif /* GL_NV_fragment_program */ + +/* ------------------------ GL_NV_fragment_program2 ------------------------ */ + +#ifndef GL_NV_fragment_program2 +#define GL_NV_fragment_program2 1 + +#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 +#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 +#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 +#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 +#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 + +#define GLEW_NV_fragment_program2 GLEW_GET_VAR(__GLEW_NV_fragment_program2) + +#endif /* GL_NV_fragment_program2 */ + +/* ------------------------ GL_NV_fragment_program4 ------------------------ */ + +#ifndef GL_NV_fragment_program4 +#define GL_NV_fragment_program4 1 + +#define GLEW_NV_fragment_program4 GLEW_GET_VAR(__GLEW_NV_fragment_program4) + +#endif /* GL_NV_fragment_program4 */ + +/* --------------------- GL_NV_fragment_program_option --------------------- */ + +#ifndef GL_NV_fragment_program_option +#define GL_NV_fragment_program_option 1 + +#define GLEW_NV_fragment_program_option GLEW_GET_VAR(__GLEW_NV_fragment_program_option) + +#endif /* GL_NV_fragment_program_option */ + +/* ----------------- GL_NV_framebuffer_multisample_coverage ---------------- */ + +#ifndef GL_NV_framebuffer_multisample_coverage +#define GL_NV_framebuffer_multisample_coverage 1 + +#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB +#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 +#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 +#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 + +typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); + +#define glRenderbufferStorageMultisampleCoverageNV GLEW_GET_FUN(__glewRenderbufferStorageMultisampleCoverageNV) + +#define GLEW_NV_framebuffer_multisample_coverage GLEW_GET_VAR(__GLEW_NV_framebuffer_multisample_coverage) + +#endif /* GL_NV_framebuffer_multisample_coverage */ + +/* ------------------------ GL_NV_geometry_program4 ------------------------ */ + +#ifndef GL_NV_geometry_program4 +#define GL_NV_geometry_program4 1 + +#define GL_GEOMETRY_PROGRAM_NV 0x8C26 +#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 +#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 + +typedef void (GLAPIENTRY * PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); + +#define glProgramVertexLimitNV GLEW_GET_FUN(__glewProgramVertexLimitNV) + +#define GLEW_NV_geometry_program4 GLEW_GET_VAR(__GLEW_NV_geometry_program4) + +#endif /* GL_NV_geometry_program4 */ + +/* ------------------------- GL_NV_geometry_shader4 ------------------------ */ + +#ifndef GL_NV_geometry_shader4 +#define GL_NV_geometry_shader4 1 + +#define GLEW_NV_geometry_shader4 GLEW_GET_VAR(__GLEW_NV_geometry_shader4) + +#endif /* GL_NV_geometry_shader4 */ + +/* --------------------------- GL_NV_gpu_program4 -------------------------- */ + +#ifndef GL_NV_gpu_program4 +#define GL_NV_gpu_program4 1 + +#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 +#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 +#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 +#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 +#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 +#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 +#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 + +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); + +#define glProgramEnvParameterI4iNV GLEW_GET_FUN(__glewProgramEnvParameterI4iNV) +#define glProgramEnvParameterI4ivNV GLEW_GET_FUN(__glewProgramEnvParameterI4ivNV) +#define glProgramEnvParameterI4uiNV GLEW_GET_FUN(__glewProgramEnvParameterI4uiNV) +#define glProgramEnvParameterI4uivNV GLEW_GET_FUN(__glewProgramEnvParameterI4uivNV) +#define glProgramEnvParametersI4ivNV GLEW_GET_FUN(__glewProgramEnvParametersI4ivNV) +#define glProgramEnvParametersI4uivNV GLEW_GET_FUN(__glewProgramEnvParametersI4uivNV) +#define glProgramLocalParameterI4iNV GLEW_GET_FUN(__glewProgramLocalParameterI4iNV) +#define glProgramLocalParameterI4ivNV GLEW_GET_FUN(__glewProgramLocalParameterI4ivNV) +#define glProgramLocalParameterI4uiNV GLEW_GET_FUN(__glewProgramLocalParameterI4uiNV) +#define glProgramLocalParameterI4uivNV GLEW_GET_FUN(__glewProgramLocalParameterI4uivNV) +#define glProgramLocalParametersI4ivNV GLEW_GET_FUN(__glewProgramLocalParametersI4ivNV) +#define glProgramLocalParametersI4uivNV GLEW_GET_FUN(__glewProgramLocalParametersI4uivNV) + +#define GLEW_NV_gpu_program4 GLEW_GET_VAR(__GLEW_NV_gpu_program4) + +#endif /* GL_NV_gpu_program4 */ + +/* ---------------------------- GL_NV_half_float --------------------------- */ + +#ifndef GL_NV_half_float +#define GL_NV_half_float 1 + +#define GL_HALF_FLOAT_NV 0x140B + +typedef unsigned short GLhalf; + +typedef void (GLAPIENTRY * PFNGLCOLOR3HNVPROC) (GLhalf red, GLhalf green, GLhalf blue); +typedef void (GLAPIENTRY * PFNGLCOLOR3HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLCOLOR4HNVPROC) (GLhalf red, GLhalf green, GLhalf blue, GLhalf alpha); +typedef void (GLAPIENTRY * PFNGLCOLOR4HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLFOGCOORDHNVPROC) (GLhalf fog); +typedef void (GLAPIENTRY * PFNGLFOGCOORDHVNVPROC) (const GLhalf* fog); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalf s); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalf s, GLhalf t); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalf s, GLhalf t, GLhalf r); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalf s, GLhalf t, GLhalf r, GLhalf q); +typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLNORMAL3HNVPROC) (GLhalf nx, GLhalf ny, GLhalf nz); +typedef void (GLAPIENTRY * PFNGLNORMAL3HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3HNVPROC) (GLhalf red, GLhalf green, GLhalf blue); +typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD1HNVPROC) (GLhalf s); +typedef void (GLAPIENTRY * PFNGLTEXCOORD1HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2HNVPROC) (GLhalf s, GLhalf t); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD3HNVPROC) (GLhalf s, GLhalf t, GLhalf r); +typedef void (GLAPIENTRY * PFNGLTEXCOORD3HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD4HNVPROC) (GLhalf s, GLhalf t, GLhalf r, GLhalf q); +typedef void (GLAPIENTRY * PFNGLTEXCOORD4HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEX2HNVPROC) (GLhalf x, GLhalf y); +typedef void (GLAPIENTRY * PFNGLVERTEX2HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEX3HNVPROC) (GLhalf x, GLhalf y, GLhalf z); +typedef void (GLAPIENTRY * PFNGLVERTEX3HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEX4HNVPROC) (GLhalf x, GLhalf y, GLhalf z, GLhalf w); +typedef void (GLAPIENTRY * PFNGLVERTEX4HVNVPROC) (const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalf x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalf x, GLhalf y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalf x, GLhalf y, GLhalf z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalf x, GLhalf y, GLhalf z, GLhalf w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalf* v); +typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTHNVPROC) (GLhalf weight); +typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalf* weight); + +#define glColor3hNV GLEW_GET_FUN(__glewColor3hNV) +#define glColor3hvNV GLEW_GET_FUN(__glewColor3hvNV) +#define glColor4hNV GLEW_GET_FUN(__glewColor4hNV) +#define glColor4hvNV GLEW_GET_FUN(__glewColor4hvNV) +#define glFogCoordhNV GLEW_GET_FUN(__glewFogCoordhNV) +#define glFogCoordhvNV GLEW_GET_FUN(__glewFogCoordhvNV) +#define glMultiTexCoord1hNV GLEW_GET_FUN(__glewMultiTexCoord1hNV) +#define glMultiTexCoord1hvNV GLEW_GET_FUN(__glewMultiTexCoord1hvNV) +#define glMultiTexCoord2hNV GLEW_GET_FUN(__glewMultiTexCoord2hNV) +#define glMultiTexCoord2hvNV GLEW_GET_FUN(__glewMultiTexCoord2hvNV) +#define glMultiTexCoord3hNV GLEW_GET_FUN(__glewMultiTexCoord3hNV) +#define glMultiTexCoord3hvNV GLEW_GET_FUN(__glewMultiTexCoord3hvNV) +#define glMultiTexCoord4hNV GLEW_GET_FUN(__glewMultiTexCoord4hNV) +#define glMultiTexCoord4hvNV GLEW_GET_FUN(__glewMultiTexCoord4hvNV) +#define glNormal3hNV GLEW_GET_FUN(__glewNormal3hNV) +#define glNormal3hvNV GLEW_GET_FUN(__glewNormal3hvNV) +#define glSecondaryColor3hNV GLEW_GET_FUN(__glewSecondaryColor3hNV) +#define glSecondaryColor3hvNV GLEW_GET_FUN(__glewSecondaryColor3hvNV) +#define glTexCoord1hNV GLEW_GET_FUN(__glewTexCoord1hNV) +#define glTexCoord1hvNV GLEW_GET_FUN(__glewTexCoord1hvNV) +#define glTexCoord2hNV GLEW_GET_FUN(__glewTexCoord2hNV) +#define glTexCoord2hvNV GLEW_GET_FUN(__glewTexCoord2hvNV) +#define glTexCoord3hNV GLEW_GET_FUN(__glewTexCoord3hNV) +#define glTexCoord3hvNV GLEW_GET_FUN(__glewTexCoord3hvNV) +#define glTexCoord4hNV GLEW_GET_FUN(__glewTexCoord4hNV) +#define glTexCoord4hvNV GLEW_GET_FUN(__glewTexCoord4hvNV) +#define glVertex2hNV GLEW_GET_FUN(__glewVertex2hNV) +#define glVertex2hvNV GLEW_GET_FUN(__glewVertex2hvNV) +#define glVertex3hNV GLEW_GET_FUN(__glewVertex3hNV) +#define glVertex3hvNV GLEW_GET_FUN(__glewVertex3hvNV) +#define glVertex4hNV GLEW_GET_FUN(__glewVertex4hNV) +#define glVertex4hvNV GLEW_GET_FUN(__glewVertex4hvNV) +#define glVertexAttrib1hNV GLEW_GET_FUN(__glewVertexAttrib1hNV) +#define glVertexAttrib1hvNV GLEW_GET_FUN(__glewVertexAttrib1hvNV) +#define glVertexAttrib2hNV GLEW_GET_FUN(__glewVertexAttrib2hNV) +#define glVertexAttrib2hvNV GLEW_GET_FUN(__glewVertexAttrib2hvNV) +#define glVertexAttrib3hNV GLEW_GET_FUN(__glewVertexAttrib3hNV) +#define glVertexAttrib3hvNV GLEW_GET_FUN(__glewVertexAttrib3hvNV) +#define glVertexAttrib4hNV GLEW_GET_FUN(__glewVertexAttrib4hNV) +#define glVertexAttrib4hvNV GLEW_GET_FUN(__glewVertexAttrib4hvNV) +#define glVertexAttribs1hvNV GLEW_GET_FUN(__glewVertexAttribs1hvNV) +#define glVertexAttribs2hvNV GLEW_GET_FUN(__glewVertexAttribs2hvNV) +#define glVertexAttribs3hvNV GLEW_GET_FUN(__glewVertexAttribs3hvNV) +#define glVertexAttribs4hvNV GLEW_GET_FUN(__glewVertexAttribs4hvNV) +#define glVertexWeighthNV GLEW_GET_FUN(__glewVertexWeighthNV) +#define glVertexWeighthvNV GLEW_GET_FUN(__glewVertexWeighthvNV) + +#define GLEW_NV_half_float GLEW_GET_VAR(__GLEW_NV_half_float) + +#endif /* GL_NV_half_float */ + +/* ------------------------ GL_NV_light_max_exponent ----------------------- */ + +#ifndef GL_NV_light_max_exponent +#define GL_NV_light_max_exponent 1 + +#define GL_MAX_SHININESS_NV 0x8504 +#define GL_MAX_SPOT_EXPONENT_NV 0x8505 + +#define GLEW_NV_light_max_exponent GLEW_GET_VAR(__GLEW_NV_light_max_exponent) + +#endif /* GL_NV_light_max_exponent */ + +/* --------------------- GL_NV_multisample_filter_hint --------------------- */ + +#ifndef GL_NV_multisample_filter_hint +#define GL_NV_multisample_filter_hint 1 + +#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 + +#define GLEW_NV_multisample_filter_hint GLEW_GET_VAR(__GLEW_NV_multisample_filter_hint) + +#endif /* GL_NV_multisample_filter_hint */ + +/* ------------------------- GL_NV_occlusion_query ------------------------- */ + +#ifndef GL_NV_occlusion_query +#define GL_NV_occlusion_query 1 + +#define GL_PIXEL_COUNTER_BITS_NV 0x8864 +#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 +#define GL_PIXEL_COUNT_NV 0x8866 +#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 + +typedef void (GLAPIENTRY * PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); +typedef void (GLAPIENTRY * PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint* ids); +typedef void (GLAPIENTRY * PFNGLENDOCCLUSIONQUERYNVPROC) (void); +typedef void (GLAPIENTRY * PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint* ids); +typedef void (GLAPIENTRY * PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint* params); +typedef GLboolean (GLAPIENTRY * PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); + +#define glBeginOcclusionQueryNV GLEW_GET_FUN(__glewBeginOcclusionQueryNV) +#define glDeleteOcclusionQueriesNV GLEW_GET_FUN(__glewDeleteOcclusionQueriesNV) +#define glEndOcclusionQueryNV GLEW_GET_FUN(__glewEndOcclusionQueryNV) +#define glGenOcclusionQueriesNV GLEW_GET_FUN(__glewGenOcclusionQueriesNV) +#define glGetOcclusionQueryivNV GLEW_GET_FUN(__glewGetOcclusionQueryivNV) +#define glGetOcclusionQueryuivNV GLEW_GET_FUN(__glewGetOcclusionQueryuivNV) +#define glIsOcclusionQueryNV GLEW_GET_FUN(__glewIsOcclusionQueryNV) + +#define GLEW_NV_occlusion_query GLEW_GET_VAR(__GLEW_NV_occlusion_query) + +#endif /* GL_NV_occlusion_query */ + +/* ----------------------- GL_NV_packed_depth_stencil ---------------------- */ + +#ifndef GL_NV_packed_depth_stencil +#define GL_NV_packed_depth_stencil 1 + +#define GL_DEPTH_STENCIL_NV 0x84F9 +#define GL_UNSIGNED_INT_24_8_NV 0x84FA + +#define GLEW_NV_packed_depth_stencil GLEW_GET_VAR(__GLEW_NV_packed_depth_stencil) + +#endif /* GL_NV_packed_depth_stencil */ + +/* --------------------- GL_NV_parameter_buffer_object --------------------- */ + +#ifndef GL_NV_parameter_buffer_object +#define GL_NV_parameter_buffer_object 1 + +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 +#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 +#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 +#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 + +typedef void (GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params); +typedef void (GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params); +typedef void (GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params); + +#define glProgramBufferParametersIivNV GLEW_GET_FUN(__glewProgramBufferParametersIivNV) +#define glProgramBufferParametersIuivNV GLEW_GET_FUN(__glewProgramBufferParametersIuivNV) +#define glProgramBufferParametersfvNV GLEW_GET_FUN(__glewProgramBufferParametersfvNV) + +#define GLEW_NV_parameter_buffer_object GLEW_GET_VAR(__GLEW_NV_parameter_buffer_object) + +#endif /* GL_NV_parameter_buffer_object */ + +/* ------------------------- GL_NV_pixel_data_range ------------------------ */ + +#ifndef GL_NV_pixel_data_range +#define GL_NV_pixel_data_range 1 + +#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 +#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 +#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A +#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B +#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C +#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D + +typedef void (GLAPIENTRY * PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, void* pointer); + +#define glFlushPixelDataRangeNV GLEW_GET_FUN(__glewFlushPixelDataRangeNV) +#define glPixelDataRangeNV GLEW_GET_FUN(__glewPixelDataRangeNV) + +#define GLEW_NV_pixel_data_range GLEW_GET_VAR(__GLEW_NV_pixel_data_range) + +#endif /* GL_NV_pixel_data_range */ + +/* --------------------------- GL_NV_point_sprite -------------------------- */ + +#ifndef GL_NV_point_sprite +#define GL_NV_point_sprite 1 + +#define GL_POINT_SPRITE_NV 0x8861 +#define GL_COORD_REPLACE_NV 0x8862 +#define GL_POINT_SPRITE_R_MODE_NV 0x8863 + +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint* params); + +#define glPointParameteriNV GLEW_GET_FUN(__glewPointParameteriNV) +#define glPointParameterivNV GLEW_GET_FUN(__glewPointParameterivNV) + +#define GLEW_NV_point_sprite GLEW_GET_VAR(__GLEW_NV_point_sprite) + +#endif /* GL_NV_point_sprite */ + +/* ------------------------ GL_NV_primitive_restart ------------------------ */ + +#ifndef GL_NV_primitive_restart +#define GL_NV_primitive_restart 1 + +#define GL_PRIMITIVE_RESTART_NV 0x8558 +#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 + +typedef void (GLAPIENTRY * PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); +typedef void (GLAPIENTRY * PFNGLPRIMITIVERESTARTNVPROC) (void); + +#define glPrimitiveRestartIndexNV GLEW_GET_FUN(__glewPrimitiveRestartIndexNV) +#define glPrimitiveRestartNV GLEW_GET_FUN(__glewPrimitiveRestartNV) + +#define GLEW_NV_primitive_restart GLEW_GET_VAR(__GLEW_NV_primitive_restart) + +#endif /* GL_NV_primitive_restart */ + +/* ------------------------ GL_NV_register_combiners ----------------------- */ + +#ifndef GL_NV_register_combiners +#define GL_NV_register_combiners 1 + +#define GL_REGISTER_COMBINERS_NV 0x8522 +#define GL_VARIABLE_A_NV 0x8523 +#define GL_VARIABLE_B_NV 0x8524 +#define GL_VARIABLE_C_NV 0x8525 +#define GL_VARIABLE_D_NV 0x8526 +#define GL_VARIABLE_E_NV 0x8527 +#define GL_VARIABLE_F_NV 0x8528 +#define GL_VARIABLE_G_NV 0x8529 +#define GL_CONSTANT_COLOR0_NV 0x852A +#define GL_CONSTANT_COLOR1_NV 0x852B +#define GL_PRIMARY_COLOR_NV 0x852C +#define GL_SECONDARY_COLOR_NV 0x852D +#define GL_SPARE0_NV 0x852E +#define GL_SPARE1_NV 0x852F +#define GL_DISCARD_NV 0x8530 +#define GL_E_TIMES_F_NV 0x8531 +#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 +#define GL_UNSIGNED_IDENTITY_NV 0x8536 +#define GL_UNSIGNED_INVERT_NV 0x8537 +#define GL_EXPAND_NORMAL_NV 0x8538 +#define GL_EXPAND_NEGATE_NV 0x8539 +#define GL_HALF_BIAS_NORMAL_NV 0x853A +#define GL_HALF_BIAS_NEGATE_NV 0x853B +#define GL_SIGNED_IDENTITY_NV 0x853C +#define GL_SIGNED_NEGATE_NV 0x853D +#define GL_SCALE_BY_TWO_NV 0x853E +#define GL_SCALE_BY_FOUR_NV 0x853F +#define GL_SCALE_BY_ONE_HALF_NV 0x8540 +#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 +#define GL_COMBINER_INPUT_NV 0x8542 +#define GL_COMBINER_MAPPING_NV 0x8543 +#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 +#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 +#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 +#define GL_COMBINER_MUX_SUM_NV 0x8547 +#define GL_COMBINER_SCALE_NV 0x8548 +#define GL_COMBINER_BIAS_NV 0x8549 +#define GL_COMBINER_AB_OUTPUT_NV 0x854A +#define GL_COMBINER_CD_OUTPUT_NV 0x854B +#define GL_COMBINER_SUM_OUTPUT_NV 0x854C +#define GL_MAX_GENERAL_COMBINERS_NV 0x854D +#define GL_NUM_GENERAL_COMBINERS_NV 0x854E +#define GL_COLOR_SUM_CLAMP_NV 0x854F +#define GL_COMBINER0_NV 0x8550 +#define GL_COMBINER1_NV 0x8551 +#define GL_COMBINER2_NV 0x8552 +#define GL_COMBINER3_NV 0x8553 +#define GL_COMBINER4_NV 0x8554 +#define GL_COMBINER5_NV 0x8555 +#define GL_COMBINER6_NV 0x8556 +#define GL_COMBINER7_NV 0x8557 + +typedef void (GLAPIENTRY * PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (GLAPIENTRY * PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (GLAPIENTRY * PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint* params); + +#define glCombinerInputNV GLEW_GET_FUN(__glewCombinerInputNV) +#define glCombinerOutputNV GLEW_GET_FUN(__glewCombinerOutputNV) +#define glCombinerParameterfNV GLEW_GET_FUN(__glewCombinerParameterfNV) +#define glCombinerParameterfvNV GLEW_GET_FUN(__glewCombinerParameterfvNV) +#define glCombinerParameteriNV GLEW_GET_FUN(__glewCombinerParameteriNV) +#define glCombinerParameterivNV GLEW_GET_FUN(__glewCombinerParameterivNV) +#define glFinalCombinerInputNV GLEW_GET_FUN(__glewFinalCombinerInputNV) +#define glGetCombinerInputParameterfvNV GLEW_GET_FUN(__glewGetCombinerInputParameterfvNV) +#define glGetCombinerInputParameterivNV GLEW_GET_FUN(__glewGetCombinerInputParameterivNV) +#define glGetCombinerOutputParameterfvNV GLEW_GET_FUN(__glewGetCombinerOutputParameterfvNV) +#define glGetCombinerOutputParameterivNV GLEW_GET_FUN(__glewGetCombinerOutputParameterivNV) +#define glGetFinalCombinerInputParameterfvNV GLEW_GET_FUN(__glewGetFinalCombinerInputParameterfvNV) +#define glGetFinalCombinerInputParameterivNV GLEW_GET_FUN(__glewGetFinalCombinerInputParameterivNV) + +#define GLEW_NV_register_combiners GLEW_GET_VAR(__GLEW_NV_register_combiners) + +#endif /* GL_NV_register_combiners */ + +/* ----------------------- GL_NV_register_combiners2 ----------------------- */ + +#ifndef GL_NV_register_combiners2 +#define GL_NV_register_combiners2 1 + +#define GL_PER_STAGE_CONSTANTS_NV 0x8535 + +typedef void (GLAPIENTRY * PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat* params); + +#define glCombinerStageParameterfvNV GLEW_GET_FUN(__glewCombinerStageParameterfvNV) +#define glGetCombinerStageParameterfvNV GLEW_GET_FUN(__glewGetCombinerStageParameterfvNV) + +#define GLEW_NV_register_combiners2 GLEW_GET_VAR(__GLEW_NV_register_combiners2) + +#endif /* GL_NV_register_combiners2 */ + +/* -------------------------- GL_NV_texgen_emboss -------------------------- */ + +#ifndef GL_NV_texgen_emboss +#define GL_NV_texgen_emboss 1 + +#define GL_EMBOSS_LIGHT_NV 0x855D +#define GL_EMBOSS_CONSTANT_NV 0x855E +#define GL_EMBOSS_MAP_NV 0x855F + +#define GLEW_NV_texgen_emboss GLEW_GET_VAR(__GLEW_NV_texgen_emboss) + +#endif /* GL_NV_texgen_emboss */ + +/* ------------------------ GL_NV_texgen_reflection ------------------------ */ + +#ifndef GL_NV_texgen_reflection +#define GL_NV_texgen_reflection 1 + +#define GL_NORMAL_MAP_NV 0x8511 +#define GL_REFLECTION_MAP_NV 0x8512 + +#define GLEW_NV_texgen_reflection GLEW_GET_VAR(__GLEW_NV_texgen_reflection) + +#endif /* GL_NV_texgen_reflection */ + +/* --------------------- GL_NV_texture_compression_vtc --------------------- */ + +#ifndef GL_NV_texture_compression_vtc +#define GL_NV_texture_compression_vtc 1 + +#define GLEW_NV_texture_compression_vtc GLEW_GET_VAR(__GLEW_NV_texture_compression_vtc) + +#endif /* GL_NV_texture_compression_vtc */ + +/* ----------------------- GL_NV_texture_env_combine4 ---------------------- */ + +#ifndef GL_NV_texture_env_combine4 +#define GL_NV_texture_env_combine4 1 + +#define GL_COMBINE4_NV 0x8503 +#define GL_SOURCE3_RGB_NV 0x8583 +#define GL_SOURCE3_ALPHA_NV 0x858B +#define GL_OPERAND3_RGB_NV 0x8593 +#define GL_OPERAND3_ALPHA_NV 0x859B + +#define GLEW_NV_texture_env_combine4 GLEW_GET_VAR(__GLEW_NV_texture_env_combine4) + +#endif /* GL_NV_texture_env_combine4 */ + +/* ---------------------- GL_NV_texture_expand_normal ---------------------- */ + +#ifndef GL_NV_texture_expand_normal +#define GL_NV_texture_expand_normal 1 + +#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F + +#define GLEW_NV_texture_expand_normal GLEW_GET_VAR(__GLEW_NV_texture_expand_normal) + +#endif /* GL_NV_texture_expand_normal */ + +/* ------------------------ GL_NV_texture_rectangle ------------------------ */ + +#ifndef GL_NV_texture_rectangle +#define GL_NV_texture_rectangle 1 + +#define GL_TEXTURE_RECTANGLE_NV 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 + +#define GLEW_NV_texture_rectangle GLEW_GET_VAR(__GLEW_NV_texture_rectangle) + +#endif /* GL_NV_texture_rectangle */ + +/* -------------------------- GL_NV_texture_shader ------------------------- */ + +#ifndef GL_NV_texture_shader +#define GL_NV_texture_shader 1 + +#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C +#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D +#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E +#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 +#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA +#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB +#define GL_DSDT_MAG_INTENSITY_NV 0x86DC +#define GL_SHADER_CONSISTENT_NV 0x86DD +#define GL_TEXTURE_SHADER_NV 0x86DE +#define GL_SHADER_OPERATION_NV 0x86DF +#define GL_CULL_MODES_NV 0x86E0 +#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 +#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 +#define GL_CONST_EYE_NV 0x86E5 +#define GL_PASS_THROUGH_NV 0x86E6 +#define GL_CULL_FRAGMENT_NV 0x86E7 +#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 +#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 +#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA +#define GL_DOT_PRODUCT_NV 0x86EC +#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED +#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE +#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 +#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 +#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 +#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 +#define GL_HILO_NV 0x86F4 +#define GL_DSDT_NV 0x86F5 +#define GL_DSDT_MAG_NV 0x86F6 +#define GL_DSDT_MAG_VIB_NV 0x86F7 +#define GL_HILO16_NV 0x86F8 +#define GL_SIGNED_HILO_NV 0x86F9 +#define GL_SIGNED_HILO16_NV 0x86FA +#define GL_SIGNED_RGBA_NV 0x86FB +#define GL_SIGNED_RGBA8_NV 0x86FC +#define GL_SIGNED_RGB_NV 0x86FE +#define GL_SIGNED_RGB8_NV 0x86FF +#define GL_SIGNED_LUMINANCE_NV 0x8701 +#define GL_SIGNED_LUMINANCE8_NV 0x8702 +#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 +#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 +#define GL_SIGNED_ALPHA_NV 0x8705 +#define GL_SIGNED_ALPHA8_NV 0x8706 +#define GL_SIGNED_INTENSITY_NV 0x8707 +#define GL_SIGNED_INTENSITY8_NV 0x8708 +#define GL_DSDT8_NV 0x8709 +#define GL_DSDT8_MAG8_NV 0x870A +#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B +#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C +#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D +#define GL_HI_SCALE_NV 0x870E +#define GL_LO_SCALE_NV 0x870F +#define GL_DS_SCALE_NV 0x8710 +#define GL_DT_SCALE_NV 0x8711 +#define GL_MAGNITUDE_SCALE_NV 0x8712 +#define GL_VIBRANCE_SCALE_NV 0x8713 +#define GL_HI_BIAS_NV 0x8714 +#define GL_LO_BIAS_NV 0x8715 +#define GL_DS_BIAS_NV 0x8716 +#define GL_DT_BIAS_NV 0x8717 +#define GL_MAGNITUDE_BIAS_NV 0x8718 +#define GL_VIBRANCE_BIAS_NV 0x8719 +#define GL_TEXTURE_BORDER_VALUES_NV 0x871A +#define GL_TEXTURE_HI_SIZE_NV 0x871B +#define GL_TEXTURE_LO_SIZE_NV 0x871C +#define GL_TEXTURE_DS_SIZE_NV 0x871D +#define GL_TEXTURE_DT_SIZE_NV 0x871E +#define GL_TEXTURE_MAG_SIZE_NV 0x871F + +#define GLEW_NV_texture_shader GLEW_GET_VAR(__GLEW_NV_texture_shader) + +#endif /* GL_NV_texture_shader */ + +/* ------------------------- GL_NV_texture_shader2 ------------------------- */ + +#ifndef GL_NV_texture_shader2 +#define GL_NV_texture_shader2 1 + +#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA +#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB +#define GL_DSDT_MAG_INTENSITY_NV 0x86DC +#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF +#define GL_HILO_NV 0x86F4 +#define GL_DSDT_NV 0x86F5 +#define GL_DSDT_MAG_NV 0x86F6 +#define GL_DSDT_MAG_VIB_NV 0x86F7 +#define GL_HILO16_NV 0x86F8 +#define GL_SIGNED_HILO_NV 0x86F9 +#define GL_SIGNED_HILO16_NV 0x86FA +#define GL_SIGNED_RGBA_NV 0x86FB +#define GL_SIGNED_RGBA8_NV 0x86FC +#define GL_SIGNED_RGB_NV 0x86FE +#define GL_SIGNED_RGB8_NV 0x86FF +#define GL_SIGNED_LUMINANCE_NV 0x8701 +#define GL_SIGNED_LUMINANCE8_NV 0x8702 +#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 +#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 +#define GL_SIGNED_ALPHA_NV 0x8705 +#define GL_SIGNED_ALPHA8_NV 0x8706 +#define GL_SIGNED_INTENSITY_NV 0x8707 +#define GL_SIGNED_INTENSITY8_NV 0x8708 +#define GL_DSDT8_NV 0x8709 +#define GL_DSDT8_MAG8_NV 0x870A +#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B +#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C +#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D + +#define GLEW_NV_texture_shader2 GLEW_GET_VAR(__GLEW_NV_texture_shader2) + +#endif /* GL_NV_texture_shader2 */ + +/* ------------------------- GL_NV_texture_shader3 ------------------------- */ + +#ifndef GL_NV_texture_shader3 +#define GL_NV_texture_shader3 1 + +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 +#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 +#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 +#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 +#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 +#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A +#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B +#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C +#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D +#define GL_HILO8_NV 0x885E +#define GL_SIGNED_HILO8_NV 0x885F +#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 + +#define GLEW_NV_texture_shader3 GLEW_GET_VAR(__GLEW_NV_texture_shader3) + +#endif /* GL_NV_texture_shader3 */ + +/* ------------------------ GL_NV_transform_feedback ----------------------- */ + +#ifndef GL_NV_transform_feedback +#define GL_NV_transform_feedback 1 + +#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 +#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 +#define GL_TEXTURE_COORD_NV 0x8C79 +#define GL_CLIP_DISTANCE_NV 0x8C7A +#define GL_VERTEX_ID_NV 0x8C7B +#define GL_PRIMITIVE_ID_NV 0x8C7C +#define GL_GENERIC_ATTRIB_NV 0x8C7D +#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 +#define GL_ACTIVE_VARYINGS_NV 0x8C81 +#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 +#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 +#define GL_PRIMITIVES_GENERATED_NV 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 +#define GL_RASTERIZER_DISCARD_NV 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B +#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C +#define GL_SEPARATE_ATTRIBS_NV 0x8C8D +#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F + +typedef void (GLAPIENTRY * PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); +typedef void (GLAPIENTRY * PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); +typedef void (GLAPIENTRY * PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (GLAPIENTRY * PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (GLAPIENTRY * PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY * PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); +typedef void (GLAPIENTRY * PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +typedef void (GLAPIENTRY * PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); +typedef GLint (GLAPIENTRY * PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); +typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode); +typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); + +#define glActiveVaryingNV GLEW_GET_FUN(__glewActiveVaryingNV) +#define glBeginTransformFeedbackNV GLEW_GET_FUN(__glewBeginTransformFeedbackNV) +#define glBindBufferBaseNV GLEW_GET_FUN(__glewBindBufferBaseNV) +#define glBindBufferOffsetNV GLEW_GET_FUN(__glewBindBufferOffsetNV) +#define glBindBufferRangeNV GLEW_GET_FUN(__glewBindBufferRangeNV) +#define glEndTransformFeedbackNV GLEW_GET_FUN(__glewEndTransformFeedbackNV) +#define glGetActiveVaryingNV GLEW_GET_FUN(__glewGetActiveVaryingNV) +#define glGetTransformFeedbackVaryingNV GLEW_GET_FUN(__glewGetTransformFeedbackVaryingNV) +#define glGetVaryingLocationNV GLEW_GET_FUN(__glewGetVaryingLocationNV) +#define glTransformFeedbackAttribsNV GLEW_GET_FUN(__glewTransformFeedbackAttribsNV) +#define glTransformFeedbackVaryingsNV GLEW_GET_FUN(__glewTransformFeedbackVaryingsNV) + +#define GLEW_NV_transform_feedback GLEW_GET_VAR(__GLEW_NV_transform_feedback) + +#endif /* GL_NV_transform_feedback */ + +/* ------------------------ GL_NV_vertex_array_range ----------------------- */ + +#ifndef GL_NV_vertex_array_range +#define GL_NV_vertex_array_range 1 + +#define GL_VERTEX_ARRAY_RANGE_NV 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E +#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F +#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 +#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 + +typedef void (GLAPIENTRY * PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); +typedef void (GLAPIENTRY * PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, void* pointer); + +#define glFlushVertexArrayRangeNV GLEW_GET_FUN(__glewFlushVertexArrayRangeNV) +#define glVertexArrayRangeNV GLEW_GET_FUN(__glewVertexArrayRangeNV) + +#define GLEW_NV_vertex_array_range GLEW_GET_VAR(__GLEW_NV_vertex_array_range) + +#endif /* GL_NV_vertex_array_range */ + +/* ----------------------- GL_NV_vertex_array_range2 ----------------------- */ + +#ifndef GL_NV_vertex_array_range2 +#define GL_NV_vertex_array_range2 1 + +#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 + +#define GLEW_NV_vertex_array_range2 GLEW_GET_VAR(__GLEW_NV_vertex_array_range2) + +#endif /* GL_NV_vertex_array_range2 */ + +/* -------------------------- GL_NV_vertex_program ------------------------- */ + +#ifndef GL_NV_vertex_program +#define GL_NV_vertex_program 1 + +#define GL_VERTEX_PROGRAM_NV 0x8620 +#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 +#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 +#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 +#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 +#define GL_CURRENT_ATTRIB_NV 0x8626 +#define GL_PROGRAM_LENGTH_NV 0x8627 +#define GL_PROGRAM_STRING_NV 0x8628 +#define GL_MODELVIEW_PROJECTION_NV 0x8629 +#define GL_IDENTITY_NV 0x862A +#define GL_INVERSE_NV 0x862B +#define GL_TRANSPOSE_NV 0x862C +#define GL_INVERSE_TRANSPOSE_NV 0x862D +#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E +#define GL_MAX_TRACK_MATRICES_NV 0x862F +#define GL_MATRIX0_NV 0x8630 +#define GL_MATRIX1_NV 0x8631 +#define GL_MATRIX2_NV 0x8632 +#define GL_MATRIX3_NV 0x8633 +#define GL_MATRIX4_NV 0x8634 +#define GL_MATRIX5_NV 0x8635 +#define GL_MATRIX6_NV 0x8636 +#define GL_MATRIX7_NV 0x8637 +#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 +#define GL_CURRENT_MATRIX_NV 0x8641 +#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 +#define GL_PROGRAM_PARAMETER_NV 0x8644 +#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 +#define GL_PROGRAM_TARGET_NV 0x8646 +#define GL_PROGRAM_RESIDENT_NV 0x8647 +#define GL_TRACK_MATRIX_NV 0x8648 +#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 +#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A +#define GL_PROGRAM_ERROR_POSITION_NV 0x864B +#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 +#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 +#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 +#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 +#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 +#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 +#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 +#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 +#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 +#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 +#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A +#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B +#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C +#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D +#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E +#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F +#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 +#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 +#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 +#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 +#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 +#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 +#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 +#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 +#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 +#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 +#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A +#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B +#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C +#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D +#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E +#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F +#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 +#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 +#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 +#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 +#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 +#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 +#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 +#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 +#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 +#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 +#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A +#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B +#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C +#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D +#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E +#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F + +typedef GLboolean (GLAPIENTRY * PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint* ids, GLboolean *residences); +typedef void (GLAPIENTRY * PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); +typedef void (GLAPIENTRY * PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint* ids); +typedef void (GLAPIENTRY * PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint* ids); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble* params); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte* program); +typedef void (GLAPIENTRY * PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid** pointer); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble* params); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint* params); +typedef GLboolean (GLAPIENTRY * PFNGLISPROGRAMNVPROC) (GLuint id); +typedef void (GLAPIENTRY * PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte* program); +typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble* params); +typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLuint num, const GLdouble* params); +typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLuint num, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, GLuint* ids); +typedef void (GLAPIENTRY * PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei n, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei n, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei n, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei n, const GLshort* v); +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei n, const GLubyte* v); + +#define glAreProgramsResidentNV GLEW_GET_FUN(__glewAreProgramsResidentNV) +#define glBindProgramNV GLEW_GET_FUN(__glewBindProgramNV) +#define glDeleteProgramsNV GLEW_GET_FUN(__glewDeleteProgramsNV) +#define glExecuteProgramNV GLEW_GET_FUN(__glewExecuteProgramNV) +#define glGenProgramsNV GLEW_GET_FUN(__glewGenProgramsNV) +#define glGetProgramParameterdvNV GLEW_GET_FUN(__glewGetProgramParameterdvNV) +#define glGetProgramParameterfvNV GLEW_GET_FUN(__glewGetProgramParameterfvNV) +#define glGetProgramStringNV GLEW_GET_FUN(__glewGetProgramStringNV) +#define glGetProgramivNV GLEW_GET_FUN(__glewGetProgramivNV) +#define glGetTrackMatrixivNV GLEW_GET_FUN(__glewGetTrackMatrixivNV) +#define glGetVertexAttribPointervNV GLEW_GET_FUN(__glewGetVertexAttribPointervNV) +#define glGetVertexAttribdvNV GLEW_GET_FUN(__glewGetVertexAttribdvNV) +#define glGetVertexAttribfvNV GLEW_GET_FUN(__glewGetVertexAttribfvNV) +#define glGetVertexAttribivNV GLEW_GET_FUN(__glewGetVertexAttribivNV) +#define glIsProgramNV GLEW_GET_FUN(__glewIsProgramNV) +#define glLoadProgramNV GLEW_GET_FUN(__glewLoadProgramNV) +#define glProgramParameter4dNV GLEW_GET_FUN(__glewProgramParameter4dNV) +#define glProgramParameter4dvNV GLEW_GET_FUN(__glewProgramParameter4dvNV) +#define glProgramParameter4fNV GLEW_GET_FUN(__glewProgramParameter4fNV) +#define glProgramParameter4fvNV GLEW_GET_FUN(__glewProgramParameter4fvNV) +#define glProgramParameters4dvNV GLEW_GET_FUN(__glewProgramParameters4dvNV) +#define glProgramParameters4fvNV GLEW_GET_FUN(__glewProgramParameters4fvNV) +#define glRequestResidentProgramsNV GLEW_GET_FUN(__glewRequestResidentProgramsNV) +#define glTrackMatrixNV GLEW_GET_FUN(__glewTrackMatrixNV) +#define glVertexAttrib1dNV GLEW_GET_FUN(__glewVertexAttrib1dNV) +#define glVertexAttrib1dvNV GLEW_GET_FUN(__glewVertexAttrib1dvNV) +#define glVertexAttrib1fNV GLEW_GET_FUN(__glewVertexAttrib1fNV) +#define glVertexAttrib1fvNV GLEW_GET_FUN(__glewVertexAttrib1fvNV) +#define glVertexAttrib1sNV GLEW_GET_FUN(__glewVertexAttrib1sNV) +#define glVertexAttrib1svNV GLEW_GET_FUN(__glewVertexAttrib1svNV) +#define glVertexAttrib2dNV GLEW_GET_FUN(__glewVertexAttrib2dNV) +#define glVertexAttrib2dvNV GLEW_GET_FUN(__glewVertexAttrib2dvNV) +#define glVertexAttrib2fNV GLEW_GET_FUN(__glewVertexAttrib2fNV) +#define glVertexAttrib2fvNV GLEW_GET_FUN(__glewVertexAttrib2fvNV) +#define glVertexAttrib2sNV GLEW_GET_FUN(__glewVertexAttrib2sNV) +#define glVertexAttrib2svNV GLEW_GET_FUN(__glewVertexAttrib2svNV) +#define glVertexAttrib3dNV GLEW_GET_FUN(__glewVertexAttrib3dNV) +#define glVertexAttrib3dvNV GLEW_GET_FUN(__glewVertexAttrib3dvNV) +#define glVertexAttrib3fNV GLEW_GET_FUN(__glewVertexAttrib3fNV) +#define glVertexAttrib3fvNV GLEW_GET_FUN(__glewVertexAttrib3fvNV) +#define glVertexAttrib3sNV GLEW_GET_FUN(__glewVertexAttrib3sNV) +#define glVertexAttrib3svNV GLEW_GET_FUN(__glewVertexAttrib3svNV) +#define glVertexAttrib4dNV GLEW_GET_FUN(__glewVertexAttrib4dNV) +#define glVertexAttrib4dvNV GLEW_GET_FUN(__glewVertexAttrib4dvNV) +#define glVertexAttrib4fNV GLEW_GET_FUN(__glewVertexAttrib4fNV) +#define glVertexAttrib4fvNV GLEW_GET_FUN(__glewVertexAttrib4fvNV) +#define glVertexAttrib4sNV GLEW_GET_FUN(__glewVertexAttrib4sNV) +#define glVertexAttrib4svNV GLEW_GET_FUN(__glewVertexAttrib4svNV) +#define glVertexAttrib4ubNV GLEW_GET_FUN(__glewVertexAttrib4ubNV) +#define glVertexAttrib4ubvNV GLEW_GET_FUN(__glewVertexAttrib4ubvNV) +#define glVertexAttribPointerNV GLEW_GET_FUN(__glewVertexAttribPointerNV) +#define glVertexAttribs1dvNV GLEW_GET_FUN(__glewVertexAttribs1dvNV) +#define glVertexAttribs1fvNV GLEW_GET_FUN(__glewVertexAttribs1fvNV) +#define glVertexAttribs1svNV GLEW_GET_FUN(__glewVertexAttribs1svNV) +#define glVertexAttribs2dvNV GLEW_GET_FUN(__glewVertexAttribs2dvNV) +#define glVertexAttribs2fvNV GLEW_GET_FUN(__glewVertexAttribs2fvNV) +#define glVertexAttribs2svNV GLEW_GET_FUN(__glewVertexAttribs2svNV) +#define glVertexAttribs3dvNV GLEW_GET_FUN(__glewVertexAttribs3dvNV) +#define glVertexAttribs3fvNV GLEW_GET_FUN(__glewVertexAttribs3fvNV) +#define glVertexAttribs3svNV GLEW_GET_FUN(__glewVertexAttribs3svNV) +#define glVertexAttribs4dvNV GLEW_GET_FUN(__glewVertexAttribs4dvNV) +#define glVertexAttribs4fvNV GLEW_GET_FUN(__glewVertexAttribs4fvNV) +#define glVertexAttribs4svNV GLEW_GET_FUN(__glewVertexAttribs4svNV) +#define glVertexAttribs4ubvNV GLEW_GET_FUN(__glewVertexAttribs4ubvNV) + +#define GLEW_NV_vertex_program GLEW_GET_VAR(__GLEW_NV_vertex_program) + +#endif /* GL_NV_vertex_program */ + +/* ------------------------ GL_NV_vertex_program1_1 ------------------------ */ + +#ifndef GL_NV_vertex_program1_1 +#define GL_NV_vertex_program1_1 1 + +#define GLEW_NV_vertex_program1_1 GLEW_GET_VAR(__GLEW_NV_vertex_program1_1) + +#endif /* GL_NV_vertex_program1_1 */ + +/* ------------------------- GL_NV_vertex_program2 ------------------------- */ + +#ifndef GL_NV_vertex_program2 +#define GL_NV_vertex_program2 1 + +#define GLEW_NV_vertex_program2 GLEW_GET_VAR(__GLEW_NV_vertex_program2) + +#endif /* GL_NV_vertex_program2 */ + +/* ---------------------- GL_NV_vertex_program2_option --------------------- */ + +#ifndef GL_NV_vertex_program2_option +#define GL_NV_vertex_program2_option 1 + +#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 +#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 + +#define GLEW_NV_vertex_program2_option GLEW_GET_VAR(__GLEW_NV_vertex_program2_option) + +#endif /* GL_NV_vertex_program2_option */ + +/* ------------------------- GL_NV_vertex_program3 ------------------------- */ + +#ifndef GL_NV_vertex_program3 +#define GL_NV_vertex_program3 1 + +#define MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C + +#define GLEW_NV_vertex_program3 GLEW_GET_VAR(__GLEW_NV_vertex_program3) + +#endif /* GL_NV_vertex_program3 */ + +/* ------------------------- GL_NV_vertex_program4 ------------------------- */ + +#ifndef GL_NV_vertex_program4 +#define GL_NV_vertex_program4 1 + +#define GLEW_NV_vertex_program4 GLEW_GET_VAR(__GLEW_NV_vertex_program4) + +#endif /* GL_NV_vertex_program4 */ + +/* ------------------------ GL_OES_byte_coordinates ------------------------ */ + +#ifndef GL_OES_byte_coordinates +#define GL_OES_byte_coordinates 1 + +#define GL_BYTE 0x1400 + +#define GLEW_OES_byte_coordinates GLEW_GET_VAR(__GLEW_OES_byte_coordinates) + +#endif /* GL_OES_byte_coordinates */ + +/* ------------------- GL_OES_compressed_paletted_texture ------------------ */ + +#ifndef GL_OES_compressed_paletted_texture +#define GL_OES_compressed_paletted_texture 1 + +#define GL_PALETTE4_RGB8_OES 0x8B90 +#define GL_PALETTE4_RGBA8_OES 0x8B91 +#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 +#define GL_PALETTE4_RGBA4_OES 0x8B93 +#define GL_PALETTE4_RGB5_A1_OES 0x8B94 +#define GL_PALETTE8_RGB8_OES 0x8B95 +#define GL_PALETTE8_RGBA8_OES 0x8B96 +#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 +#define GL_PALETTE8_RGBA4_OES 0x8B98 +#define GL_PALETTE8_RGB5_A1_OES 0x8B99 + +#define GLEW_OES_compressed_paletted_texture GLEW_GET_VAR(__GLEW_OES_compressed_paletted_texture) + +#endif /* GL_OES_compressed_paletted_texture */ + +/* --------------------------- GL_OES_read_format -------------------------- */ + +#ifndef GL_OES_read_format +#define GL_OES_read_format 1 + +#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B + +#define GLEW_OES_read_format GLEW_GET_VAR(__GLEW_OES_read_format) + +#endif /* GL_OES_read_format */ + +/* ------------------------ GL_OES_single_precision ------------------------ */ + +#ifndef GL_OES_single_precision +#define GL_OES_single_precision 1 + +typedef void (GLAPIENTRY * PFNGLCLEARDEPTHFOESPROC) (GLclampd depth); +typedef void (GLAPIENTRY * PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat* equation); +typedef void (GLAPIENTRY * PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f); +typedef void (GLAPIENTRY * PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +typedef void (GLAPIENTRY * PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat* equation); +typedef void (GLAPIENTRY * PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); + +#define glClearDepthfOES GLEW_GET_FUN(__glewClearDepthfOES) +#define glClipPlanefOES GLEW_GET_FUN(__glewClipPlanefOES) +#define glDepthRangefOES GLEW_GET_FUN(__glewDepthRangefOES) +#define glFrustumfOES GLEW_GET_FUN(__glewFrustumfOES) +#define glGetClipPlanefOES GLEW_GET_FUN(__glewGetClipPlanefOES) +#define glOrthofOES GLEW_GET_FUN(__glewOrthofOES) + +#define GLEW_OES_single_precision GLEW_GET_VAR(__GLEW_OES_single_precision) + +#endif /* GL_OES_single_precision */ + +/* ---------------------------- GL_OML_interlace --------------------------- */ + +#ifndef GL_OML_interlace +#define GL_OML_interlace 1 + +#define GL_INTERLACE_OML 0x8980 +#define GL_INTERLACE_READ_OML 0x8981 + +#define GLEW_OML_interlace GLEW_GET_VAR(__GLEW_OML_interlace) + +#endif /* GL_OML_interlace */ + +/* ---------------------------- GL_OML_resample ---------------------------- */ + +#ifndef GL_OML_resample +#define GL_OML_resample 1 + +#define GL_PACK_RESAMPLE_OML 0x8984 +#define GL_UNPACK_RESAMPLE_OML 0x8985 +#define GL_RESAMPLE_REPLICATE_OML 0x8986 +#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 +#define GL_RESAMPLE_AVERAGE_OML 0x8988 +#define GL_RESAMPLE_DECIMATE_OML 0x8989 + +#define GLEW_OML_resample GLEW_GET_VAR(__GLEW_OML_resample) + +#endif /* GL_OML_resample */ + +/* ---------------------------- GL_OML_subsample --------------------------- */ + +#ifndef GL_OML_subsample +#define GL_OML_subsample 1 + +#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 +#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 + +#define GLEW_OML_subsample GLEW_GET_VAR(__GLEW_OML_subsample) + +#endif /* GL_OML_subsample */ + +/* --------------------------- GL_PGI_misc_hints --------------------------- */ + +#ifndef GL_PGI_misc_hints +#define GL_PGI_misc_hints 1 + +#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 107000 +#define GL_CONSERVE_MEMORY_HINT_PGI 107005 +#define GL_RECLAIM_MEMORY_HINT_PGI 107006 +#define GL_NATIVE_GRAPHICS_HANDLE_PGI 107010 +#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 107011 +#define GL_NATIVE_GRAPHICS_END_HINT_PGI 107012 +#define GL_ALWAYS_FAST_HINT_PGI 107020 +#define GL_ALWAYS_SOFT_HINT_PGI 107021 +#define GL_ALLOW_DRAW_OBJ_HINT_PGI 107022 +#define GL_ALLOW_DRAW_WIN_HINT_PGI 107023 +#define GL_ALLOW_DRAW_FRG_HINT_PGI 107024 +#define GL_ALLOW_DRAW_MEM_HINT_PGI 107025 +#define GL_STRICT_DEPTHFUNC_HINT_PGI 107030 +#define GL_STRICT_LIGHTING_HINT_PGI 107031 +#define GL_STRICT_SCISSOR_HINT_PGI 107032 +#define GL_FULL_STIPPLE_HINT_PGI 107033 +#define GL_CLIP_NEAR_HINT_PGI 107040 +#define GL_CLIP_FAR_HINT_PGI 107041 +#define GL_WIDE_LINE_HINT_PGI 107042 +#define GL_BACK_NORMALS_HINT_PGI 107043 + +#define GLEW_PGI_misc_hints GLEW_GET_VAR(__GLEW_PGI_misc_hints) + +#endif /* GL_PGI_misc_hints */ + +/* -------------------------- GL_PGI_vertex_hints -------------------------- */ + +#ifndef GL_PGI_vertex_hints +#define GL_PGI_vertex_hints 1 + +#define GL_VERTEX23_BIT_PGI 0x00000004 +#define GL_VERTEX4_BIT_PGI 0x00000008 +#define GL_COLOR3_BIT_PGI 0x00010000 +#define GL_COLOR4_BIT_PGI 0x00020000 +#define GL_EDGEFLAG_BIT_PGI 0x00040000 +#define GL_INDEX_BIT_PGI 0x00080000 +#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 +#define GL_VERTEX_DATA_HINT_PGI 107050 +#define GL_VERTEX_CONSISTENT_HINT_PGI 107051 +#define GL_MATERIAL_SIDE_HINT_PGI 107052 +#define GL_MAX_VERTEX_HINT_PGI 107053 +#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 +#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 +#define GL_MAT_EMISSION_BIT_PGI 0x00800000 +#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 +#define GL_MAT_SHININESS_BIT_PGI 0x02000000 +#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 +#define GL_NORMAL_BIT_PGI 0x08000000 +#define GL_TEXCOORD1_BIT_PGI 0x10000000 +#define GL_TEXCOORD2_BIT_PGI 0x20000000 +#define GL_TEXCOORD3_BIT_PGI 0x40000000 +#define GL_TEXCOORD4_BIT_PGI 0x80000000 + +#define GLEW_PGI_vertex_hints GLEW_GET_VAR(__GLEW_PGI_vertex_hints) + +#endif /* GL_PGI_vertex_hints */ + +/* ----------------------- GL_REND_screen_coordinates ---------------------- */ + +#ifndef GL_REND_screen_coordinates +#define GL_REND_screen_coordinates 1 + +#define GL_SCREEN_COORDINATES_REND 0x8490 +#define GL_INVERTED_SCREEN_W_REND 0x8491 + +#define GLEW_REND_screen_coordinates GLEW_GET_VAR(__GLEW_REND_screen_coordinates) + +#endif /* GL_REND_screen_coordinates */ + +/* ------------------------------- GL_S3_s3tc ------------------------------ */ + +#ifndef GL_S3_s3tc +#define GL_S3_s3tc 1 + +#define GL_RGB_S3TC 0x83A0 +#define GL_RGB4_S3TC 0x83A1 +#define GL_RGBA_S3TC 0x83A2 +#define GL_RGBA4_S3TC 0x83A3 +#define GL_RGBA_DXT5_S3TC 0x83A4 +#define GL_RGBA4_DXT5_S3TC 0x83A5 + +#define GLEW_S3_s3tc GLEW_GET_VAR(__GLEW_S3_s3tc) + +#endif /* GL_S3_s3tc */ + +/* -------------------------- GL_SGIS_color_range -------------------------- */ + +#ifndef GL_SGIS_color_range +#define GL_SGIS_color_range 1 + +#define GL_EXTENDED_RANGE_SGIS 0x85A5 +#define GL_MIN_RED_SGIS 0x85A6 +#define GL_MAX_RED_SGIS 0x85A7 +#define GL_MIN_GREEN_SGIS 0x85A8 +#define GL_MAX_GREEN_SGIS 0x85A9 +#define GL_MIN_BLUE_SGIS 0x85AA +#define GL_MAX_BLUE_SGIS 0x85AB +#define GL_MIN_ALPHA_SGIS 0x85AC +#define GL_MAX_ALPHA_SGIS 0x85AD + +#define GLEW_SGIS_color_range GLEW_GET_VAR(__GLEW_SGIS_color_range) + +#endif /* GL_SGIS_color_range */ + +/* ------------------------- GL_SGIS_detail_texture ------------------------ */ + +#ifndef GL_SGIS_detail_texture +#define GL_SGIS_detail_texture 1 + +typedef void (GLAPIENTRY * PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat* points); +typedef void (GLAPIENTRY * PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat* points); + +#define glDetailTexFuncSGIS GLEW_GET_FUN(__glewDetailTexFuncSGIS) +#define glGetDetailTexFuncSGIS GLEW_GET_FUN(__glewGetDetailTexFuncSGIS) + +#define GLEW_SGIS_detail_texture GLEW_GET_VAR(__GLEW_SGIS_detail_texture) + +#endif /* GL_SGIS_detail_texture */ + +/* -------------------------- GL_SGIS_fog_function ------------------------- */ + +#ifndef GL_SGIS_fog_function +#define GL_SGIS_fog_function 1 + +typedef void (GLAPIENTRY * PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat* points); +typedef void (GLAPIENTRY * PFNGLGETFOGFUNCSGISPROC) (GLfloat* points); + +#define glFogFuncSGIS GLEW_GET_FUN(__glewFogFuncSGIS) +#define glGetFogFuncSGIS GLEW_GET_FUN(__glewGetFogFuncSGIS) + +#define GLEW_SGIS_fog_function GLEW_GET_VAR(__GLEW_SGIS_fog_function) + +#endif /* GL_SGIS_fog_function */ + +/* ------------------------ GL_SGIS_generate_mipmap ------------------------ */ + +#ifndef GL_SGIS_generate_mipmap +#define GL_SGIS_generate_mipmap 1 + +#define GL_GENERATE_MIPMAP_SGIS 0x8191 +#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 + +#define GLEW_SGIS_generate_mipmap GLEW_GET_VAR(__GLEW_SGIS_generate_mipmap) + +#endif /* GL_SGIS_generate_mipmap */ + +/* -------------------------- GL_SGIS_multisample -------------------------- */ + +#ifndef GL_SGIS_multisample +#define GL_SGIS_multisample 1 + +#define GL_MULTISAMPLE_SGIS 0x809D +#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F +#define GL_SAMPLE_MASK_SGIS 0x80A0 +#define GL_1PASS_SGIS 0x80A1 +#define GL_2PASS_0_SGIS 0x80A2 +#define GL_2PASS_1_SGIS 0x80A3 +#define GL_4PASS_0_SGIS 0x80A4 +#define GL_4PASS_1_SGIS 0x80A5 +#define GL_4PASS_2_SGIS 0x80A6 +#define GL_4PASS_3_SGIS 0x80A7 +#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 +#define GL_SAMPLES_SGIS 0x80A9 +#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA +#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB +#define GL_SAMPLE_PATTERN_SGIS 0x80AC +#define GL_MULTISAMPLE_BIT_EXT 0x20000000 + +typedef void (GLAPIENTRY * PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); +typedef void (GLAPIENTRY * PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); + +#define glSampleMaskSGIS GLEW_GET_FUN(__glewSampleMaskSGIS) +#define glSamplePatternSGIS GLEW_GET_FUN(__glewSamplePatternSGIS) + +#define GLEW_SGIS_multisample GLEW_GET_VAR(__GLEW_SGIS_multisample) + +#endif /* GL_SGIS_multisample */ + +/* ------------------------- GL_SGIS_pixel_texture ------------------------- */ + +#ifndef GL_SGIS_pixel_texture +#define GL_SGIS_pixel_texture 1 + +#define GLEW_SGIS_pixel_texture GLEW_GET_VAR(__GLEW_SGIS_pixel_texture) + +#endif /* GL_SGIS_pixel_texture */ + +/* ------------------------ GL_SGIS_sharpen_texture ------------------------ */ + +#ifndef GL_SGIS_sharpen_texture +#define GL_SGIS_sharpen_texture 1 + +typedef void (GLAPIENTRY * PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat* points); +typedef void (GLAPIENTRY * PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat* points); + +#define glGetSharpenTexFuncSGIS GLEW_GET_FUN(__glewGetSharpenTexFuncSGIS) +#define glSharpenTexFuncSGIS GLEW_GET_FUN(__glewSharpenTexFuncSGIS) + +#define GLEW_SGIS_sharpen_texture GLEW_GET_VAR(__GLEW_SGIS_sharpen_texture) + +#endif /* GL_SGIS_sharpen_texture */ + +/* --------------------------- GL_SGIS_texture4D --------------------------- */ + +#ifndef GL_SGIS_texture4D +#define GL_SGIS_texture4D 1 + +typedef void (GLAPIENTRY * PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLint border, GLenum format, GLenum type, const void* pixels); +typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLenum format, GLenum type, const void* pixels); + +#define glTexImage4DSGIS GLEW_GET_FUN(__glewTexImage4DSGIS) +#define glTexSubImage4DSGIS GLEW_GET_FUN(__glewTexSubImage4DSGIS) + +#define GLEW_SGIS_texture4D GLEW_GET_VAR(__GLEW_SGIS_texture4D) + +#endif /* GL_SGIS_texture4D */ + +/* ---------------------- GL_SGIS_texture_border_clamp --------------------- */ + +#ifndef GL_SGIS_texture_border_clamp +#define GL_SGIS_texture_border_clamp 1 + +#define GL_CLAMP_TO_BORDER_SGIS 0x812D + +#define GLEW_SGIS_texture_border_clamp GLEW_GET_VAR(__GLEW_SGIS_texture_border_clamp) + +#endif /* GL_SGIS_texture_border_clamp */ + +/* ----------------------- GL_SGIS_texture_edge_clamp ---------------------- */ + +#ifndef GL_SGIS_texture_edge_clamp +#define GL_SGIS_texture_edge_clamp 1 + +#define GL_CLAMP_TO_EDGE_SGIS 0x812F + +#define GLEW_SGIS_texture_edge_clamp GLEW_GET_VAR(__GLEW_SGIS_texture_edge_clamp) + +#endif /* GL_SGIS_texture_edge_clamp */ + +/* ------------------------ GL_SGIS_texture_filter4 ------------------------ */ + +#ifndef GL_SGIS_texture_filter4 +#define GL_SGIS_texture_filter4 1 + +typedef void (GLAPIENTRY * PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat* weights); +typedef void (GLAPIENTRY * PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat* weights); + +#define glGetTexFilterFuncSGIS GLEW_GET_FUN(__glewGetTexFilterFuncSGIS) +#define glTexFilterFuncSGIS GLEW_GET_FUN(__glewTexFilterFuncSGIS) + +#define GLEW_SGIS_texture_filter4 GLEW_GET_VAR(__GLEW_SGIS_texture_filter4) + +#endif /* GL_SGIS_texture_filter4 */ + +/* -------------------------- GL_SGIS_texture_lod -------------------------- */ + +#ifndef GL_SGIS_texture_lod +#define GL_SGIS_texture_lod 1 + +#define GL_TEXTURE_MIN_LOD_SGIS 0x813A +#define GL_TEXTURE_MAX_LOD_SGIS 0x813B +#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C +#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D + +#define GLEW_SGIS_texture_lod GLEW_GET_VAR(__GLEW_SGIS_texture_lod) + +#endif /* GL_SGIS_texture_lod */ + +/* ------------------------- GL_SGIS_texture_select ------------------------ */ + +#ifndef GL_SGIS_texture_select +#define GL_SGIS_texture_select 1 + +#define GLEW_SGIS_texture_select GLEW_GET_VAR(__GLEW_SGIS_texture_select) + +#endif /* GL_SGIS_texture_select */ + +/* ----------------------------- GL_SGIX_async ----------------------------- */ + +#ifndef GL_SGIX_async +#define GL_SGIX_async 1 + +#define GL_ASYNC_MARKER_SGIX 0x8329 + +typedef void (GLAPIENTRY * PFNGLASYNCMARKERSGIXPROC) (GLuint marker); +typedef void (GLAPIENTRY * PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); +typedef GLint (GLAPIENTRY * PFNGLFINISHASYNCSGIXPROC) (GLuint* markerp); +typedef GLuint (GLAPIENTRY * PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); +typedef GLboolean (GLAPIENTRY * PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); +typedef GLint (GLAPIENTRY * PFNGLPOLLASYNCSGIXPROC) (GLuint* markerp); + +#define glAsyncMarkerSGIX GLEW_GET_FUN(__glewAsyncMarkerSGIX) +#define glDeleteAsyncMarkersSGIX GLEW_GET_FUN(__glewDeleteAsyncMarkersSGIX) +#define glFinishAsyncSGIX GLEW_GET_FUN(__glewFinishAsyncSGIX) +#define glGenAsyncMarkersSGIX GLEW_GET_FUN(__glewGenAsyncMarkersSGIX) +#define glIsAsyncMarkerSGIX GLEW_GET_FUN(__glewIsAsyncMarkerSGIX) +#define glPollAsyncSGIX GLEW_GET_FUN(__glewPollAsyncSGIX) + +#define GLEW_SGIX_async GLEW_GET_VAR(__GLEW_SGIX_async) + +#endif /* GL_SGIX_async */ + +/* ------------------------ GL_SGIX_async_histogram ------------------------ */ + +#ifndef GL_SGIX_async_histogram +#define GL_SGIX_async_histogram 1 + +#define GL_ASYNC_HISTOGRAM_SGIX 0x832C +#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D + +#define GLEW_SGIX_async_histogram GLEW_GET_VAR(__GLEW_SGIX_async_histogram) + +#endif /* GL_SGIX_async_histogram */ + +/* -------------------------- GL_SGIX_async_pixel -------------------------- */ + +#ifndef GL_SGIX_async_pixel +#define GL_SGIX_async_pixel 1 + +#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C +#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D +#define GL_ASYNC_READ_PIXELS_SGIX 0x835E +#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F +#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 +#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 + +#define GLEW_SGIX_async_pixel GLEW_GET_VAR(__GLEW_SGIX_async_pixel) + +#endif /* GL_SGIX_async_pixel */ + +/* ----------------------- GL_SGIX_blend_alpha_minmax ---------------------- */ + +#ifndef GL_SGIX_blend_alpha_minmax +#define GL_SGIX_blend_alpha_minmax 1 + +#define GL_ALPHA_MIN_SGIX 0x8320 +#define GL_ALPHA_MAX_SGIX 0x8321 + +#define GLEW_SGIX_blend_alpha_minmax GLEW_GET_VAR(__GLEW_SGIX_blend_alpha_minmax) + +#endif /* GL_SGIX_blend_alpha_minmax */ + +/* ---------------------------- GL_SGIX_clipmap ---------------------------- */ + +#ifndef GL_SGIX_clipmap +#define GL_SGIX_clipmap 1 + +#define GLEW_SGIX_clipmap GLEW_GET_VAR(__GLEW_SGIX_clipmap) + +#endif /* GL_SGIX_clipmap */ + +/* ------------------------- GL_SGIX_depth_texture ------------------------- */ + +#ifndef GL_SGIX_depth_texture +#define GL_SGIX_depth_texture 1 + +#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 +#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 +#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 + +#define GLEW_SGIX_depth_texture GLEW_GET_VAR(__GLEW_SGIX_depth_texture) + +#endif /* GL_SGIX_depth_texture */ + +/* -------------------------- GL_SGIX_flush_raster ------------------------- */ + +#ifndef GL_SGIX_flush_raster +#define GL_SGIX_flush_raster 1 + +typedef void (GLAPIENTRY * PFNGLFLUSHRASTERSGIXPROC) (void); + +#define glFlushRasterSGIX GLEW_GET_FUN(__glewFlushRasterSGIX) + +#define GLEW_SGIX_flush_raster GLEW_GET_VAR(__GLEW_SGIX_flush_raster) + +#endif /* GL_SGIX_flush_raster */ + +/* --------------------------- GL_SGIX_fog_offset -------------------------- */ + +#ifndef GL_SGIX_fog_offset +#define GL_SGIX_fog_offset 1 + +#define GL_FOG_OFFSET_SGIX 0x8198 +#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 + +#define GLEW_SGIX_fog_offset GLEW_GET_VAR(__GLEW_SGIX_fog_offset) + +#endif /* GL_SGIX_fog_offset */ + +/* -------------------------- GL_SGIX_fog_texture -------------------------- */ + +#ifndef GL_SGIX_fog_texture +#define GL_SGIX_fog_texture 1 + +#define GL_TEXTURE_FOG_SGIX 0 +#define GL_FOG_PATCHY_FACTOR_SGIX 0 +#define GL_FRAGMENT_FOG_SGIX 0 + +typedef void (GLAPIENTRY * PFNGLTEXTUREFOGSGIXPROC) (GLenum pname); + +#define glTextureFogSGIX GLEW_GET_FUN(__glewTextureFogSGIX) + +#define GLEW_SGIX_fog_texture GLEW_GET_VAR(__GLEW_SGIX_fog_texture) + +#endif /* GL_SGIX_fog_texture */ + +/* ------------------- GL_SGIX_fragment_specular_lighting ------------------ */ + +#ifndef GL_SGIX_fragment_specular_lighting +#define GL_SGIX_fragment_specular_lighting 1 + +typedef void (GLAPIENTRY * PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, const GLfloat param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, const GLint param); +typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum value, GLfloat* data); +typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum value, GLint* data); +typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat* data); +typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint* data); + +#define glFragmentColorMaterialSGIX GLEW_GET_FUN(__glewFragmentColorMaterialSGIX) +#define glFragmentLightModelfSGIX GLEW_GET_FUN(__glewFragmentLightModelfSGIX) +#define glFragmentLightModelfvSGIX GLEW_GET_FUN(__glewFragmentLightModelfvSGIX) +#define glFragmentLightModeliSGIX GLEW_GET_FUN(__glewFragmentLightModeliSGIX) +#define glFragmentLightModelivSGIX GLEW_GET_FUN(__glewFragmentLightModelivSGIX) +#define glFragmentLightfSGIX GLEW_GET_FUN(__glewFragmentLightfSGIX) +#define glFragmentLightfvSGIX GLEW_GET_FUN(__glewFragmentLightfvSGIX) +#define glFragmentLightiSGIX GLEW_GET_FUN(__glewFragmentLightiSGIX) +#define glFragmentLightivSGIX GLEW_GET_FUN(__glewFragmentLightivSGIX) +#define glFragmentMaterialfSGIX GLEW_GET_FUN(__glewFragmentMaterialfSGIX) +#define glFragmentMaterialfvSGIX GLEW_GET_FUN(__glewFragmentMaterialfvSGIX) +#define glFragmentMaterialiSGIX GLEW_GET_FUN(__glewFragmentMaterialiSGIX) +#define glFragmentMaterialivSGIX GLEW_GET_FUN(__glewFragmentMaterialivSGIX) +#define glGetFragmentLightfvSGIX GLEW_GET_FUN(__glewGetFragmentLightfvSGIX) +#define glGetFragmentLightivSGIX GLEW_GET_FUN(__glewGetFragmentLightivSGIX) +#define glGetFragmentMaterialfvSGIX GLEW_GET_FUN(__glewGetFragmentMaterialfvSGIX) +#define glGetFragmentMaterialivSGIX GLEW_GET_FUN(__glewGetFragmentMaterialivSGIX) + +#define GLEW_SGIX_fragment_specular_lighting GLEW_GET_VAR(__GLEW_SGIX_fragment_specular_lighting) + +#endif /* GL_SGIX_fragment_specular_lighting */ + +/* --------------------------- GL_SGIX_framezoom --------------------------- */ + +#ifndef GL_SGIX_framezoom +#define GL_SGIX_framezoom 1 + +typedef void (GLAPIENTRY * PFNGLFRAMEZOOMSGIXPROC) (GLint factor); + +#define glFrameZoomSGIX GLEW_GET_FUN(__glewFrameZoomSGIX) + +#define GLEW_SGIX_framezoom GLEW_GET_VAR(__GLEW_SGIX_framezoom) + +#endif /* GL_SGIX_framezoom */ + +/* --------------------------- GL_SGIX_interlace --------------------------- */ + +#ifndef GL_SGIX_interlace +#define GL_SGIX_interlace 1 + +#define GL_INTERLACE_SGIX 0x8094 + +#define GLEW_SGIX_interlace GLEW_GET_VAR(__GLEW_SGIX_interlace) + +#endif /* GL_SGIX_interlace */ + +/* ------------------------- GL_SGIX_ir_instrument1 ------------------------ */ + +#ifndef GL_SGIX_ir_instrument1 +#define GL_SGIX_ir_instrument1 1 + +#define GLEW_SGIX_ir_instrument1 GLEW_GET_VAR(__GLEW_SGIX_ir_instrument1) + +#endif /* GL_SGIX_ir_instrument1 */ + +/* ------------------------- GL_SGIX_list_priority ------------------------- */ + +#ifndef GL_SGIX_list_priority +#define GL_SGIX_list_priority 1 + +#define GLEW_SGIX_list_priority GLEW_GET_VAR(__GLEW_SGIX_list_priority) + +#endif /* GL_SGIX_list_priority */ + +/* ------------------------- GL_SGIX_pixel_texture ------------------------- */ + +#ifndef GL_SGIX_pixel_texture +#define GL_SGIX_pixel_texture 1 + +typedef void (GLAPIENTRY * PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); + +#define glPixelTexGenSGIX GLEW_GET_FUN(__glewPixelTexGenSGIX) + +#define GLEW_SGIX_pixel_texture GLEW_GET_VAR(__GLEW_SGIX_pixel_texture) + +#endif /* GL_SGIX_pixel_texture */ + +/* ----------------------- GL_SGIX_pixel_texture_bits ---------------------- */ + +#ifndef GL_SGIX_pixel_texture_bits +#define GL_SGIX_pixel_texture_bits 1 + +#define GLEW_SGIX_pixel_texture_bits GLEW_GET_VAR(__GLEW_SGIX_pixel_texture_bits) + +#endif /* GL_SGIX_pixel_texture_bits */ + +/* ------------------------ GL_SGIX_reference_plane ------------------------ */ + +#ifndef GL_SGIX_reference_plane +#define GL_SGIX_reference_plane 1 + +typedef void (GLAPIENTRY * PFNGLREFERENCEPLANESGIXPROC) (const GLdouble* equation); + +#define glReferencePlaneSGIX GLEW_GET_FUN(__glewReferencePlaneSGIX) + +#define GLEW_SGIX_reference_plane GLEW_GET_VAR(__GLEW_SGIX_reference_plane) + +#endif /* GL_SGIX_reference_plane */ + +/* ---------------------------- GL_SGIX_resample --------------------------- */ + +#ifndef GL_SGIX_resample +#define GL_SGIX_resample 1 + +#define GL_PACK_RESAMPLE_SGIX 0x842E +#define GL_UNPACK_RESAMPLE_SGIX 0x842F +#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 +#define GL_RESAMPLE_REPLICATE_SGIX 0x8433 +#define GL_RESAMPLE_ZERO_FILL_SGIX 0x8434 + +#define GLEW_SGIX_resample GLEW_GET_VAR(__GLEW_SGIX_resample) + +#endif /* GL_SGIX_resample */ + +/* ----------------------------- GL_SGIX_shadow ---------------------------- */ + +#ifndef GL_SGIX_shadow +#define GL_SGIX_shadow 1 + +#define GL_TEXTURE_COMPARE_SGIX 0x819A +#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B +#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C +#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D + +#define GLEW_SGIX_shadow GLEW_GET_VAR(__GLEW_SGIX_shadow) + +#endif /* GL_SGIX_shadow */ + +/* ------------------------- GL_SGIX_shadow_ambient ------------------------ */ + +#ifndef GL_SGIX_shadow_ambient +#define GL_SGIX_shadow_ambient 1 + +#define GL_SHADOW_AMBIENT_SGIX 0x80BF + +#define GLEW_SGIX_shadow_ambient GLEW_GET_VAR(__GLEW_SGIX_shadow_ambient) + +#endif /* GL_SGIX_shadow_ambient */ + +/* ----------------------------- GL_SGIX_sprite ---------------------------- */ + +#ifndef GL_SGIX_sprite +#define GL_SGIX_sprite 1 + +typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, GLint* params); + +#define glSpriteParameterfSGIX GLEW_GET_FUN(__glewSpriteParameterfSGIX) +#define glSpriteParameterfvSGIX GLEW_GET_FUN(__glewSpriteParameterfvSGIX) +#define glSpriteParameteriSGIX GLEW_GET_FUN(__glewSpriteParameteriSGIX) +#define glSpriteParameterivSGIX GLEW_GET_FUN(__glewSpriteParameterivSGIX) + +#define GLEW_SGIX_sprite GLEW_GET_VAR(__GLEW_SGIX_sprite) + +#endif /* GL_SGIX_sprite */ + +/* ----------------------- GL_SGIX_tag_sample_buffer ----------------------- */ + +#ifndef GL_SGIX_tag_sample_buffer +#define GL_SGIX_tag_sample_buffer 1 + +typedef void (GLAPIENTRY * PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); + +#define glTagSampleBufferSGIX GLEW_GET_FUN(__glewTagSampleBufferSGIX) + +#define GLEW_SGIX_tag_sample_buffer GLEW_GET_VAR(__GLEW_SGIX_tag_sample_buffer) + +#endif /* GL_SGIX_tag_sample_buffer */ + +/* ------------------------ GL_SGIX_texture_add_env ------------------------ */ + +#ifndef GL_SGIX_texture_add_env +#define GL_SGIX_texture_add_env 1 + +#define GLEW_SGIX_texture_add_env GLEW_GET_VAR(__GLEW_SGIX_texture_add_env) + +#endif /* GL_SGIX_texture_add_env */ + +/* -------------------- GL_SGIX_texture_coordinate_clamp ------------------- */ + +#ifndef GL_SGIX_texture_coordinate_clamp +#define GL_SGIX_texture_coordinate_clamp 1 + +#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 +#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A +#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B + +#define GLEW_SGIX_texture_coordinate_clamp GLEW_GET_VAR(__GLEW_SGIX_texture_coordinate_clamp) + +#endif /* GL_SGIX_texture_coordinate_clamp */ + +/* ------------------------ GL_SGIX_texture_lod_bias ----------------------- */ + +#ifndef GL_SGIX_texture_lod_bias +#define GL_SGIX_texture_lod_bias 1 + +#define GLEW_SGIX_texture_lod_bias GLEW_GET_VAR(__GLEW_SGIX_texture_lod_bias) + +#endif /* GL_SGIX_texture_lod_bias */ + +/* ---------------------- GL_SGIX_texture_multi_buffer --------------------- */ + +#ifndef GL_SGIX_texture_multi_buffer +#define GL_SGIX_texture_multi_buffer 1 + +#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E + +#define GLEW_SGIX_texture_multi_buffer GLEW_GET_VAR(__GLEW_SGIX_texture_multi_buffer) + +#endif /* GL_SGIX_texture_multi_buffer */ + +/* ------------------------- GL_SGIX_texture_range ------------------------- */ + +#ifndef GL_SGIX_texture_range +#define GL_SGIX_texture_range 1 + +#define GL_RGB_SIGNED_SGIX 0x85E0 +#define GL_RGBA_SIGNED_SGIX 0x85E1 +#define GL_ALPHA_SIGNED_SGIX 0x85E2 +#define GL_LUMINANCE_SIGNED_SGIX 0x85E3 +#define GL_INTENSITY_SIGNED_SGIX 0x85E4 +#define GL_LUMINANCE_ALPHA_SIGNED_SGIX 0x85E5 +#define GL_RGB16_SIGNED_SGIX 0x85E6 +#define GL_RGBA16_SIGNED_SGIX 0x85E7 +#define GL_ALPHA16_SIGNED_SGIX 0x85E8 +#define GL_LUMINANCE16_SIGNED_SGIX 0x85E9 +#define GL_INTENSITY16_SIGNED_SGIX 0x85EA +#define GL_LUMINANCE16_ALPHA16_SIGNED_SGIX 0x85EB +#define GL_RGB_EXTENDED_RANGE_SGIX 0x85EC +#define GL_RGBA_EXTENDED_RANGE_SGIX 0x85ED +#define GL_ALPHA_EXTENDED_RANGE_SGIX 0x85EE +#define GL_LUMINANCE_EXTENDED_RANGE_SGIX 0x85EF +#define GL_INTENSITY_EXTENDED_RANGE_SGIX 0x85F0 +#define GL_LUMINANCE_ALPHA_EXTENDED_RANGE_SGIX 0x85F1 +#define GL_RGB16_EXTENDED_RANGE_SGIX 0x85F2 +#define GL_RGBA16_EXTENDED_RANGE_SGIX 0x85F3 +#define GL_ALPHA16_EXTENDED_RANGE_SGIX 0x85F4 +#define GL_LUMINANCE16_EXTENDED_RANGE_SGIX 0x85F5 +#define GL_INTENSITY16_EXTENDED_RANGE_SGIX 0x85F6 +#define GL_LUMINANCE16_ALPHA16_EXTENDED_RANGE_SGIX 0x85F7 +#define GL_MIN_LUMINANCE_SGIS 0x85F8 +#define GL_MAX_LUMINANCE_SGIS 0x85F9 +#define GL_MIN_INTENSITY_SGIS 0x85FA +#define GL_MAX_INTENSITY_SGIS 0x85FB + +#define GLEW_SGIX_texture_range GLEW_GET_VAR(__GLEW_SGIX_texture_range) + +#endif /* GL_SGIX_texture_range */ + +/* ----------------------- GL_SGIX_texture_scale_bias ---------------------- */ + +#ifndef GL_SGIX_texture_scale_bias +#define GL_SGIX_texture_scale_bias 1 + +#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 +#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A +#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B +#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C + +#define GLEW_SGIX_texture_scale_bias GLEW_GET_VAR(__GLEW_SGIX_texture_scale_bias) + +#endif /* GL_SGIX_texture_scale_bias */ + +/* ------------------------- GL_SGIX_vertex_preclip ------------------------ */ + +#ifndef GL_SGIX_vertex_preclip +#define GL_SGIX_vertex_preclip 1 + +#define GL_VERTEX_PRECLIP_SGIX 0x83EE +#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF + +#define GLEW_SGIX_vertex_preclip GLEW_GET_VAR(__GLEW_SGIX_vertex_preclip) + +#endif /* GL_SGIX_vertex_preclip */ + +/* ---------------------- GL_SGIX_vertex_preclip_hint ---------------------- */ + +#ifndef GL_SGIX_vertex_preclip_hint +#define GL_SGIX_vertex_preclip_hint 1 + +#define GL_VERTEX_PRECLIP_SGIX 0x83EE +#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF + +#define GLEW_SGIX_vertex_preclip_hint GLEW_GET_VAR(__GLEW_SGIX_vertex_preclip_hint) + +#endif /* GL_SGIX_vertex_preclip_hint */ + +/* ----------------------------- GL_SGIX_ycrcb ----------------------------- */ + +#ifndef GL_SGIX_ycrcb +#define GL_SGIX_ycrcb 1 + +#define GLEW_SGIX_ycrcb GLEW_GET_VAR(__GLEW_SGIX_ycrcb) + +#endif /* GL_SGIX_ycrcb */ + +/* -------------------------- GL_SGI_color_matrix -------------------------- */ + +#ifndef GL_SGI_color_matrix +#define GL_SGI_color_matrix 1 + +#define GL_COLOR_MATRIX_SGI 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB + +#define GLEW_SGI_color_matrix GLEW_GET_VAR(__GLEW_SGI_color_matrix) + +#endif /* GL_SGI_color_matrix */ + +/* --------------------------- GL_SGI_color_table -------------------------- */ + +#ifndef GL_SGI_color_table +#define GL_SGI_color_table 1 + +#define GL_COLOR_TABLE_SGI 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 +#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 +#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 +#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 +#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 +#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF + +typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void* table); +typedef void (GLAPIENTRY * PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, void* table); + +#define glColorTableParameterfvSGI GLEW_GET_FUN(__glewColorTableParameterfvSGI) +#define glColorTableParameterivSGI GLEW_GET_FUN(__glewColorTableParameterivSGI) +#define glColorTableSGI GLEW_GET_FUN(__glewColorTableSGI) +#define glCopyColorTableSGI GLEW_GET_FUN(__glewCopyColorTableSGI) +#define glGetColorTableParameterfvSGI GLEW_GET_FUN(__glewGetColorTableParameterfvSGI) +#define glGetColorTableParameterivSGI GLEW_GET_FUN(__glewGetColorTableParameterivSGI) +#define glGetColorTableSGI GLEW_GET_FUN(__glewGetColorTableSGI) + +#define GLEW_SGI_color_table GLEW_GET_VAR(__GLEW_SGI_color_table) + +#endif /* GL_SGI_color_table */ + +/* ----------------------- GL_SGI_texture_color_table ---------------------- */ + +#ifndef GL_SGI_texture_color_table +#define GL_SGI_texture_color_table 1 + +#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC +#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD + +#define GLEW_SGI_texture_color_table GLEW_GET_VAR(__GLEW_SGI_texture_color_table) + +#endif /* GL_SGI_texture_color_table */ + +/* ------------------------- GL_SUNX_constant_data ------------------------- */ + +#ifndef GL_SUNX_constant_data +#define GL_SUNX_constant_data 1 + +#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 +#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 + +typedef void (GLAPIENTRY * PFNGLFINISHTEXTURESUNXPROC) (void); + +#define glFinishTextureSUNX GLEW_GET_FUN(__glewFinishTextureSUNX) + +#define GLEW_SUNX_constant_data GLEW_GET_VAR(__GLEW_SUNX_constant_data) + +#endif /* GL_SUNX_constant_data */ + +/* -------------------- GL_SUN_convolution_border_modes -------------------- */ + +#ifndef GL_SUN_convolution_border_modes +#define GL_SUN_convolution_border_modes 1 + +#define GL_WRAP_BORDER_SUN 0x81D4 + +#define GLEW_SUN_convolution_border_modes GLEW_GET_VAR(__GLEW_SUN_convolution_border_modes) + +#endif /* GL_SUN_convolution_border_modes */ + +/* -------------------------- GL_SUN_global_alpha -------------------------- */ + +#ifndef GL_SUN_global_alpha +#define GL_SUN_global_alpha 1 + +#define GL_GLOBAL_ALPHA_SUN 0x81D9 +#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA + +typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); +typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); +typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); +typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); +typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); +typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); +typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); +typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); + +#define glGlobalAlphaFactorbSUN GLEW_GET_FUN(__glewGlobalAlphaFactorbSUN) +#define glGlobalAlphaFactordSUN GLEW_GET_FUN(__glewGlobalAlphaFactordSUN) +#define glGlobalAlphaFactorfSUN GLEW_GET_FUN(__glewGlobalAlphaFactorfSUN) +#define glGlobalAlphaFactoriSUN GLEW_GET_FUN(__glewGlobalAlphaFactoriSUN) +#define glGlobalAlphaFactorsSUN GLEW_GET_FUN(__glewGlobalAlphaFactorsSUN) +#define glGlobalAlphaFactorubSUN GLEW_GET_FUN(__glewGlobalAlphaFactorubSUN) +#define glGlobalAlphaFactoruiSUN GLEW_GET_FUN(__glewGlobalAlphaFactoruiSUN) +#define glGlobalAlphaFactorusSUN GLEW_GET_FUN(__glewGlobalAlphaFactorusSUN) + +#define GLEW_SUN_global_alpha GLEW_GET_VAR(__GLEW_SUN_global_alpha) + +#endif /* GL_SUN_global_alpha */ + +/* --------------------------- GL_SUN_mesh_array --------------------------- */ + +#ifndef GL_SUN_mesh_array +#define GL_SUN_mesh_array 1 + +#define GL_QUAD_MESH_SUN 0x8614 +#define GL_TRIANGLE_MESH_SUN 0x8615 + +#define GLEW_SUN_mesh_array GLEW_GET_VAR(__GLEW_SUN_mesh_array) + +#endif /* GL_SUN_mesh_array */ + +/* ------------------------ GL_SUN_read_video_pixels ----------------------- */ + +#ifndef GL_SUN_read_video_pixels +#define GL_SUN_read_video_pixels 1 + +typedef void (GLAPIENTRY * PFNGLREADVIDEOPIXELSSUNPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels); + +#define glReadVideoPixelsSUN GLEW_GET_FUN(__glewReadVideoPixelsSUN) + +#define GLEW_SUN_read_video_pixels GLEW_GET_VAR(__GLEW_SUN_read_video_pixels) + +#endif /* GL_SUN_read_video_pixels */ + +/* --------------------------- GL_SUN_slice_accum -------------------------- */ + +#ifndef GL_SUN_slice_accum +#define GL_SUN_slice_accum 1 + +#define GL_SLICE_ACCUM_SUN 0x85CC + +#define GLEW_SUN_slice_accum GLEW_GET_VAR(__GLEW_SUN_slice_accum) + +#endif /* GL_SUN_slice_accum */ + +/* -------------------------- GL_SUN_triangle_list ------------------------- */ + +#ifndef GL_SUN_triangle_list +#define GL_SUN_triangle_list 1 + +#define GL_RESTART_SUN 0x01 +#define GL_REPLACE_MIDDLE_SUN 0x02 +#define GL_REPLACE_OLDEST_SUN 0x03 +#define GL_TRIANGLE_LIST_SUN 0x81D7 +#define GL_REPLACEMENT_CODE_SUN 0x81D8 +#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 +#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 +#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 +#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 +#define GL_R1UI_V3F_SUN 0x85C4 +#define GL_R1UI_C4UB_V3F_SUN 0x85C5 +#define GL_R1UI_C3F_V3F_SUN 0x85C6 +#define GL_R1UI_N3F_V3F_SUN 0x85C7 +#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 +#define GL_R1UI_T2F_V3F_SUN 0x85C9 +#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA +#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB + +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const void* pointer); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte* code); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint* code); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort* code); + +#define glReplacementCodePointerSUN GLEW_GET_FUN(__glewReplacementCodePointerSUN) +#define glReplacementCodeubSUN GLEW_GET_FUN(__glewReplacementCodeubSUN) +#define glReplacementCodeubvSUN GLEW_GET_FUN(__glewReplacementCodeubvSUN) +#define glReplacementCodeuiSUN GLEW_GET_FUN(__glewReplacementCodeuiSUN) +#define glReplacementCodeuivSUN GLEW_GET_FUN(__glewReplacementCodeuivSUN) +#define glReplacementCodeusSUN GLEW_GET_FUN(__glewReplacementCodeusSUN) +#define glReplacementCodeusvSUN GLEW_GET_FUN(__glewReplacementCodeusvSUN) + +#define GLEW_SUN_triangle_list GLEW_GET_VAR(__GLEW_SUN_triangle_list) + +#endif /* GL_SUN_triangle_list */ + +/* ----------------------------- GL_SUN_vertex ----------------------------- */ + +#ifndef GL_SUN_vertex +#define GL_SUN_vertex 1 + +typedef void (GLAPIENTRY * PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat* c, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* c, const GLfloat *n, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte* c, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte* c, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* n, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *c, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint* rc, const GLubyte *c, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *n, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *tc, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *c, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat* tc, const GLubyte *c, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *n, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY * PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat* tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (GLAPIENTRY * PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY * PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat* tc, const GLfloat *v); + +#define glColor3fVertex3fSUN GLEW_GET_FUN(__glewColor3fVertex3fSUN) +#define glColor3fVertex3fvSUN GLEW_GET_FUN(__glewColor3fVertex3fvSUN) +#define glColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewColor4fNormal3fVertex3fSUN) +#define glColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewColor4fNormal3fVertex3fvSUN) +#define glColor4ubVertex2fSUN GLEW_GET_FUN(__glewColor4ubVertex2fSUN) +#define glColor4ubVertex2fvSUN GLEW_GET_FUN(__glewColor4ubVertex2fvSUN) +#define glColor4ubVertex3fSUN GLEW_GET_FUN(__glewColor4ubVertex3fSUN) +#define glColor4ubVertex3fvSUN GLEW_GET_FUN(__glewColor4ubVertex3fvSUN) +#define glNormal3fVertex3fSUN GLEW_GET_FUN(__glewNormal3fVertex3fSUN) +#define glNormal3fVertex3fvSUN GLEW_GET_FUN(__glewNormal3fVertex3fvSUN) +#define glReplacementCodeuiColor3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor3fVertex3fSUN) +#define glReplacementCodeuiColor3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor3fVertex3fvSUN) +#define glReplacementCodeuiColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4fNormal3fVertex3fSUN) +#define glReplacementCodeuiColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4fNormal3fVertex3fvSUN) +#define glReplacementCodeuiColor4ubVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4ubVertex3fSUN) +#define glReplacementCodeuiColor4ubVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4ubVertex3fvSUN) +#define glReplacementCodeuiNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiNormal3fVertex3fSUN) +#define glReplacementCodeuiNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiNormal3fVertex3fvSUN) +#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN) +#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN) +#define glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fNormal3fVertex3fSUN) +#define glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN) +#define glReplacementCodeuiTexCoord2fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fVertex3fSUN) +#define glReplacementCodeuiTexCoord2fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fVertex3fvSUN) +#define glReplacementCodeuiVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiVertex3fSUN) +#define glReplacementCodeuiVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiVertex3fvSUN) +#define glTexCoord2fColor3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor3fVertex3fSUN) +#define glTexCoord2fColor3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor3fVertex3fvSUN) +#define glTexCoord2fColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor4fNormal3fVertex3fSUN) +#define glTexCoord2fColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor4fNormal3fVertex3fvSUN) +#define glTexCoord2fColor4ubVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor4ubVertex3fSUN) +#define glTexCoord2fColor4ubVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor4ubVertex3fvSUN) +#define glTexCoord2fNormal3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fNormal3fVertex3fSUN) +#define glTexCoord2fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fNormal3fVertex3fvSUN) +#define glTexCoord2fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fVertex3fSUN) +#define glTexCoord2fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fVertex3fvSUN) +#define glTexCoord4fColor4fNormal3fVertex4fSUN GLEW_GET_FUN(__glewTexCoord4fColor4fNormal3fVertex4fSUN) +#define glTexCoord4fColor4fNormal3fVertex4fvSUN GLEW_GET_FUN(__glewTexCoord4fColor4fNormal3fVertex4fvSUN) +#define glTexCoord4fVertex4fSUN GLEW_GET_FUN(__glewTexCoord4fVertex4fSUN) +#define glTexCoord4fVertex4fvSUN GLEW_GET_FUN(__glewTexCoord4fVertex4fvSUN) + +#define GLEW_SUN_vertex GLEW_GET_VAR(__GLEW_SUN_vertex) + +#endif /* GL_SUN_vertex */ + +/* -------------------------- GL_WIN_phong_shading ------------------------- */ + +#ifndef GL_WIN_phong_shading +#define GL_WIN_phong_shading 1 + +#define GL_PHONG_WIN 0x80EA +#define GL_PHONG_HINT_WIN 0x80EB + +#define GLEW_WIN_phong_shading GLEW_GET_VAR(__GLEW_WIN_phong_shading) + +#endif /* GL_WIN_phong_shading */ + +/* -------------------------- GL_WIN_specular_fog -------------------------- */ + +#ifndef GL_WIN_specular_fog +#define GL_WIN_specular_fog 1 + +#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC + +#define GLEW_WIN_specular_fog GLEW_GET_VAR(__GLEW_WIN_specular_fog) + +#endif /* GL_WIN_specular_fog */ + +/* ---------------------------- GL_WIN_swap_hint --------------------------- */ + +#ifndef GL_WIN_swap_hint +#define GL_WIN_swap_hint 1 + +typedef void (GLAPIENTRY * PFNGLADDSWAPHINTRECTWINPROC) (GLint x, GLint y, GLsizei width, GLsizei height); + +#define glAddSwapHintRectWIN GLEW_GET_FUN(__glewAddSwapHintRectWIN) + +#define GLEW_WIN_swap_hint GLEW_GET_VAR(__GLEW_WIN_swap_hint) + +#endif /* GL_WIN_swap_hint */ + +/* ------------------------------------------------------------------------- */ + +#if defined(GLEW_MX) && defined(_WIN32) +#define GLEW_FUN_EXPORT +#else +#define GLEW_FUN_EXPORT GLEWAPI +#endif /* GLEW_MX */ + +#if defined(GLEW_MX) +#define GLEW_VAR_EXPORT +#else +#define GLEW_VAR_EXPORT GLEWAPI +#endif /* GLEW_MX */ + +#if defined(GLEW_MX) && defined(_WIN32) +struct GLEWContextStruct +{ +#endif /* GLEW_MX */ + +GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE3DPROC __glewCopyTexSubImage3D; +GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSPROC __glewDrawRangeElements; +GLEW_FUN_EXPORT PFNGLTEXIMAGE3DPROC __glewTexImage3D; +GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE3DPROC __glewTexSubImage3D; + +GLEW_FUN_EXPORT PFNGLACTIVETEXTUREPROC __glewActiveTexture; +GLEW_FUN_EXPORT PFNGLCLIENTACTIVETEXTUREPROC __glewClientActiveTexture; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE1DPROC __glewCompressedTexImage1D; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE2DPROC __glewCompressedTexImage2D; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE3DPROC __glewCompressedTexImage3D; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC __glewCompressedTexSubImage1D; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC __glewCompressedTexSubImage2D; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC __glewCompressedTexSubImage3D; +GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDTEXIMAGEPROC __glewGetCompressedTexImage; +GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXDPROC __glewLoadTransposeMatrixd; +GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXFPROC __glewLoadTransposeMatrixf; +GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXDPROC __glewMultTransposeMatrixd; +GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXFPROC __glewMultTransposeMatrixf; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DPROC __glewMultiTexCoord1d; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DVPROC __glewMultiTexCoord1dv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FPROC __glewMultiTexCoord1f; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FVPROC __glewMultiTexCoord1fv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IPROC __glewMultiTexCoord1i; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IVPROC __glewMultiTexCoord1iv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SPROC __glewMultiTexCoord1s; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SVPROC __glewMultiTexCoord1sv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DPROC __glewMultiTexCoord2d; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DVPROC __glewMultiTexCoord2dv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FPROC __glewMultiTexCoord2f; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FVPROC __glewMultiTexCoord2fv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IPROC __glewMultiTexCoord2i; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IVPROC __glewMultiTexCoord2iv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SPROC __glewMultiTexCoord2s; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SVPROC __glewMultiTexCoord2sv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DPROC __glewMultiTexCoord3d; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DVPROC __glewMultiTexCoord3dv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FPROC __glewMultiTexCoord3f; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FVPROC __glewMultiTexCoord3fv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IPROC __glewMultiTexCoord3i; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IVPROC __glewMultiTexCoord3iv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SPROC __glewMultiTexCoord3s; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SVPROC __glewMultiTexCoord3sv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DPROC __glewMultiTexCoord4d; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DVPROC __glewMultiTexCoord4dv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FPROC __glewMultiTexCoord4f; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FVPROC __glewMultiTexCoord4fv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IPROC __glewMultiTexCoord4i; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IVPROC __glewMultiTexCoord4iv; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SPROC __glewMultiTexCoord4s; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SVPROC __glewMultiTexCoord4sv; +GLEW_FUN_EXPORT PFNGLSAMPLECOVERAGEPROC __glewSampleCoverage; + +GLEW_FUN_EXPORT PFNGLBLENDCOLORPROC __glewBlendColor; +GLEW_FUN_EXPORT PFNGLBLENDEQUATIONPROC __glewBlendEquation; +GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEPROC __glewBlendFuncSeparate; +GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTERPROC __glewFogCoordPointer; +GLEW_FUN_EXPORT PFNGLFOGCOORDDPROC __glewFogCoordd; +GLEW_FUN_EXPORT PFNGLFOGCOORDDVPROC __glewFogCoorddv; +GLEW_FUN_EXPORT PFNGLFOGCOORDFPROC __glewFogCoordf; +GLEW_FUN_EXPORT PFNGLFOGCOORDFVPROC __glewFogCoordfv; +GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSPROC __glewMultiDrawArrays; +GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSPROC __glewMultiDrawElements; +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFPROC __glewPointParameterf; +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVPROC __glewPointParameterfv; +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERIPROC __glewPointParameteri; +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERIVPROC __glewPointParameteriv; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BPROC __glewSecondaryColor3b; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BVPROC __glewSecondaryColor3bv; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DPROC __glewSecondaryColor3d; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DVPROC __glewSecondaryColor3dv; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FPROC __glewSecondaryColor3f; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FVPROC __glewSecondaryColor3fv; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IPROC __glewSecondaryColor3i; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IVPROC __glewSecondaryColor3iv; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SPROC __glewSecondaryColor3s; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SVPROC __glewSecondaryColor3sv; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBPROC __glewSecondaryColor3ub; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBVPROC __glewSecondaryColor3ubv; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIPROC __glewSecondaryColor3ui; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIVPROC __glewSecondaryColor3uiv; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USPROC __glewSecondaryColor3us; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USVPROC __glewSecondaryColor3usv; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTERPROC __glewSecondaryColorPointer; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2DPROC __glewWindowPos2d; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVPROC __glewWindowPos2dv; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2FPROC __glewWindowPos2f; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVPROC __glewWindowPos2fv; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2IPROC __glewWindowPos2i; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVPROC __glewWindowPos2iv; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2SPROC __glewWindowPos2s; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVPROC __glewWindowPos2sv; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3DPROC __glewWindowPos3d; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVPROC __glewWindowPos3dv; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3FPROC __glewWindowPos3f; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVPROC __glewWindowPos3fv; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3IPROC __glewWindowPos3i; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVPROC __glewWindowPos3iv; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3SPROC __glewWindowPos3s; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVPROC __glewWindowPos3sv; + +GLEW_FUN_EXPORT PFNGLBEGINQUERYPROC __glewBeginQuery; +GLEW_FUN_EXPORT PFNGLBINDBUFFERPROC __glewBindBuffer; +GLEW_FUN_EXPORT PFNGLBUFFERDATAPROC __glewBufferData; +GLEW_FUN_EXPORT PFNGLBUFFERSUBDATAPROC __glewBufferSubData; +GLEW_FUN_EXPORT PFNGLDELETEBUFFERSPROC __glewDeleteBuffers; +GLEW_FUN_EXPORT PFNGLDELETEQUERIESPROC __glewDeleteQueries; +GLEW_FUN_EXPORT PFNGLENDQUERYPROC __glewEndQuery; +GLEW_FUN_EXPORT PFNGLGENBUFFERSPROC __glewGenBuffers; +GLEW_FUN_EXPORT PFNGLGENQUERIESPROC __glewGenQueries; +GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERIVPROC __glewGetBufferParameteriv; +GLEW_FUN_EXPORT PFNGLGETBUFFERPOINTERVPROC __glewGetBufferPointerv; +GLEW_FUN_EXPORT PFNGLGETBUFFERSUBDATAPROC __glewGetBufferSubData; +GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTIVPROC __glewGetQueryObjectiv; +GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUIVPROC __glewGetQueryObjectuiv; +GLEW_FUN_EXPORT PFNGLGETQUERYIVPROC __glewGetQueryiv; +GLEW_FUN_EXPORT PFNGLISBUFFERPROC __glewIsBuffer; +GLEW_FUN_EXPORT PFNGLISQUERYPROC __glewIsQuery; +GLEW_FUN_EXPORT PFNGLMAPBUFFERPROC __glewMapBuffer; +GLEW_FUN_EXPORT PFNGLUNMAPBUFFERPROC __glewUnmapBuffer; + +GLEW_FUN_EXPORT PFNGLATTACHSHADERPROC __glewAttachShader; +GLEW_FUN_EXPORT PFNGLBINDATTRIBLOCATIONPROC __glewBindAttribLocation; +GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEPROC __glewBlendEquationSeparate; +GLEW_FUN_EXPORT PFNGLCOMPILESHADERPROC __glewCompileShader; +GLEW_FUN_EXPORT PFNGLCREATEPROGRAMPROC __glewCreateProgram; +GLEW_FUN_EXPORT PFNGLCREATESHADERPROC __glewCreateShader; +GLEW_FUN_EXPORT PFNGLDELETEPROGRAMPROC __glewDeleteProgram; +GLEW_FUN_EXPORT PFNGLDELETESHADERPROC __glewDeleteShader; +GLEW_FUN_EXPORT PFNGLDETACHSHADERPROC __glewDetachShader; +GLEW_FUN_EXPORT PFNGLDISABLEVERTEXATTRIBARRAYPROC __glewDisableVertexAttribArray; +GLEW_FUN_EXPORT PFNGLDRAWBUFFERSPROC __glewDrawBuffers; +GLEW_FUN_EXPORT PFNGLENABLEVERTEXATTRIBARRAYPROC __glewEnableVertexAttribArray; +GLEW_FUN_EXPORT PFNGLGETACTIVEATTRIBPROC __glewGetActiveAttrib; +GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMPROC __glewGetActiveUniform; +GLEW_FUN_EXPORT PFNGLGETATTACHEDSHADERSPROC __glewGetAttachedShaders; +GLEW_FUN_EXPORT PFNGLGETATTRIBLOCATIONPROC __glewGetAttribLocation; +GLEW_FUN_EXPORT PFNGLGETPROGRAMINFOLOGPROC __glewGetProgramInfoLog; +GLEW_FUN_EXPORT PFNGLGETPROGRAMIVPROC __glewGetProgramiv; +GLEW_FUN_EXPORT PFNGLGETSHADERINFOLOGPROC __glewGetShaderInfoLog; +GLEW_FUN_EXPORT PFNGLGETSHADERSOURCEPROC __glewGetShaderSource; +GLEW_FUN_EXPORT PFNGLGETSHADERIVPROC __glewGetShaderiv; +GLEW_FUN_EXPORT PFNGLGETUNIFORMLOCATIONPROC __glewGetUniformLocation; +GLEW_FUN_EXPORT PFNGLGETUNIFORMFVPROC __glewGetUniformfv; +GLEW_FUN_EXPORT PFNGLGETUNIFORMIVPROC __glewGetUniformiv; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBPOINTERVPROC __glewGetVertexAttribPointerv; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBDVPROC __glewGetVertexAttribdv; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBFVPROC __glewGetVertexAttribfv; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIVPROC __glewGetVertexAttribiv; +GLEW_FUN_EXPORT PFNGLISPROGRAMPROC __glewIsProgram; +GLEW_FUN_EXPORT PFNGLISSHADERPROC __glewIsShader; +GLEW_FUN_EXPORT PFNGLLINKPROGRAMPROC __glewLinkProgram; +GLEW_FUN_EXPORT PFNGLSHADERSOURCEPROC __glewShaderSource; +GLEW_FUN_EXPORT PFNGLSTENCILFUNCSEPARATEPROC __glewStencilFuncSeparate; +GLEW_FUN_EXPORT PFNGLSTENCILMASKSEPARATEPROC __glewStencilMaskSeparate; +GLEW_FUN_EXPORT PFNGLSTENCILOPSEPARATEPROC __glewStencilOpSeparate; +GLEW_FUN_EXPORT PFNGLUNIFORM1FPROC __glewUniform1f; +GLEW_FUN_EXPORT PFNGLUNIFORM1FVPROC __glewUniform1fv; +GLEW_FUN_EXPORT PFNGLUNIFORM1IPROC __glewUniform1i; +GLEW_FUN_EXPORT PFNGLUNIFORM1IVPROC __glewUniform1iv; +GLEW_FUN_EXPORT PFNGLUNIFORM2FPROC __glewUniform2f; +GLEW_FUN_EXPORT PFNGLUNIFORM2FVPROC __glewUniform2fv; +GLEW_FUN_EXPORT PFNGLUNIFORM2IPROC __glewUniform2i; +GLEW_FUN_EXPORT PFNGLUNIFORM2IVPROC __glewUniform2iv; +GLEW_FUN_EXPORT PFNGLUNIFORM3FPROC __glewUniform3f; +GLEW_FUN_EXPORT PFNGLUNIFORM3FVPROC __glewUniform3fv; +GLEW_FUN_EXPORT PFNGLUNIFORM3IPROC __glewUniform3i; +GLEW_FUN_EXPORT PFNGLUNIFORM3IVPROC __glewUniform3iv; +GLEW_FUN_EXPORT PFNGLUNIFORM4FPROC __glewUniform4f; +GLEW_FUN_EXPORT PFNGLUNIFORM4FVPROC __glewUniform4fv; +GLEW_FUN_EXPORT PFNGLUNIFORM4IPROC __glewUniform4i; +GLEW_FUN_EXPORT PFNGLUNIFORM4IVPROC __glewUniform4iv; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2FVPROC __glewUniformMatrix2fv; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3FVPROC __glewUniformMatrix3fv; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4FVPROC __glewUniformMatrix4fv; +GLEW_FUN_EXPORT PFNGLUSEPROGRAMPROC __glewUseProgram; +GLEW_FUN_EXPORT PFNGLVALIDATEPROGRAMPROC __glewValidateProgram; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DPROC __glewVertexAttrib1d; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DVPROC __glewVertexAttrib1dv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FPROC __glewVertexAttrib1f; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FVPROC __glewVertexAttrib1fv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SPROC __glewVertexAttrib1s; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SVPROC __glewVertexAttrib1sv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DPROC __glewVertexAttrib2d; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DVPROC __glewVertexAttrib2dv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FPROC __glewVertexAttrib2f; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FVPROC __glewVertexAttrib2fv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SPROC __glewVertexAttrib2s; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SVPROC __glewVertexAttrib2sv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DPROC __glewVertexAttrib3d; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DVPROC __glewVertexAttrib3dv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FPROC __glewVertexAttrib3f; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FVPROC __glewVertexAttrib3fv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SPROC __glewVertexAttrib3s; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SVPROC __glewVertexAttrib3sv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NBVPROC __glewVertexAttrib4Nbv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NIVPROC __glewVertexAttrib4Niv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NSVPROC __glewVertexAttrib4Nsv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBPROC __glewVertexAttrib4Nub; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBVPROC __glewVertexAttrib4Nubv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUIVPROC __glewVertexAttrib4Nuiv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUSVPROC __glewVertexAttrib4Nusv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4BVPROC __glewVertexAttrib4bv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DPROC __glewVertexAttrib4d; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DVPROC __glewVertexAttrib4dv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FPROC __glewVertexAttrib4f; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FVPROC __glewVertexAttrib4fv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4IVPROC __glewVertexAttrib4iv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SPROC __glewVertexAttrib4s; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SVPROC __glewVertexAttrib4sv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBVPROC __glewVertexAttrib4ubv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UIVPROC __glewVertexAttrib4uiv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4USVPROC __glewVertexAttrib4usv; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPOINTERPROC __glewVertexAttribPointer; + +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X3FVPROC __glewUniformMatrix2x3fv; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X4FVPROC __glewUniformMatrix2x4fv; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X2FVPROC __glewUniformMatrix3x2fv; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X4FVPROC __glewUniformMatrix3x4fv; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X2FVPROC __glewUniformMatrix4x2fv; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X3FVPROC __glewUniformMatrix4x3fv; + +GLEW_FUN_EXPORT PFNGLTBUFFERMASK3DFXPROC __glewTbufferMask3DFX; + +GLEW_FUN_EXPORT PFNGLDRAWELEMENTARRAYAPPLEPROC __glewDrawElementArrayAPPLE; +GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC __glewDrawRangeElementArrayAPPLE; +GLEW_FUN_EXPORT PFNGLELEMENTPOINTERAPPLEPROC __glewElementPointerAPPLE; +GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC __glewMultiDrawElementArrayAPPLE; +GLEW_FUN_EXPORT PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC __glewMultiDrawRangeElementArrayAPPLE; + +GLEW_FUN_EXPORT PFNGLDELETEFENCESAPPLEPROC __glewDeleteFencesAPPLE; +GLEW_FUN_EXPORT PFNGLFINISHFENCEAPPLEPROC __glewFinishFenceAPPLE; +GLEW_FUN_EXPORT PFNGLFINISHOBJECTAPPLEPROC __glewFinishObjectAPPLE; +GLEW_FUN_EXPORT PFNGLGENFENCESAPPLEPROC __glewGenFencesAPPLE; +GLEW_FUN_EXPORT PFNGLISFENCEAPPLEPROC __glewIsFenceAPPLE; +GLEW_FUN_EXPORT PFNGLSETFENCEAPPLEPROC __glewSetFenceAPPLE; +GLEW_FUN_EXPORT PFNGLTESTFENCEAPPLEPROC __glewTestFenceAPPLE; +GLEW_FUN_EXPORT PFNGLTESTOBJECTAPPLEPROC __glewTestObjectAPPLE; + +GLEW_FUN_EXPORT PFNGLBUFFERPARAMETERIAPPLEPROC __glewBufferParameteriAPPLE; +GLEW_FUN_EXPORT PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC __glewFlushMappedBufferRangeAPPLE; + +GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC __glewGetTexParameterPointervAPPLE; +GLEW_FUN_EXPORT PFNGLTEXTURERANGEAPPLEPROC __glewTextureRangeAPPLE; + +GLEW_FUN_EXPORT PFNGLBINDVERTEXARRAYAPPLEPROC __glewBindVertexArrayAPPLE; +GLEW_FUN_EXPORT PFNGLDELETEVERTEXARRAYSAPPLEPROC __glewDeleteVertexArraysAPPLE; +GLEW_FUN_EXPORT PFNGLGENVERTEXARRAYSAPPLEPROC __glewGenVertexArraysAPPLE; +GLEW_FUN_EXPORT PFNGLISVERTEXARRAYAPPLEPROC __glewIsVertexArrayAPPLE; + +GLEW_FUN_EXPORT PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC __glewFlushVertexArrayRangeAPPLE; +GLEW_FUN_EXPORT PFNGLVERTEXARRAYPARAMETERIAPPLEPROC __glewVertexArrayParameteriAPPLE; +GLEW_FUN_EXPORT PFNGLVERTEXARRAYRANGEAPPLEPROC __glewVertexArrayRangeAPPLE; + +GLEW_FUN_EXPORT PFNGLCLAMPCOLORARBPROC __glewClampColorARB; + +GLEW_FUN_EXPORT PFNGLDRAWBUFFERSARBPROC __glewDrawBuffersARB; + +GLEW_FUN_EXPORT PFNGLCOLORSUBTABLEPROC __glewColorSubTable; +GLEW_FUN_EXPORT PFNGLCOLORTABLEPROC __glewColorTable; +GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERFVPROC __glewColorTableParameterfv; +GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERIVPROC __glewColorTableParameteriv; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER1DPROC __glewConvolutionFilter1D; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER2DPROC __glewConvolutionFilter2D; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFPROC __glewConvolutionParameterf; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFVPROC __glewConvolutionParameterfv; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIPROC __glewConvolutionParameteri; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIVPROC __glewConvolutionParameteriv; +GLEW_FUN_EXPORT PFNGLCOPYCOLORSUBTABLEPROC __glewCopyColorSubTable; +GLEW_FUN_EXPORT PFNGLCOPYCOLORTABLEPROC __glewCopyColorTable; +GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER1DPROC __glewCopyConvolutionFilter1D; +GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER2DPROC __glewCopyConvolutionFilter2D; +GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPROC __glewGetColorTable; +GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVPROC __glewGetColorTableParameterfv; +GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVPROC __glewGetColorTableParameteriv; +GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONFILTERPROC __glewGetConvolutionFilter; +GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERFVPROC __glewGetConvolutionParameterfv; +GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERIVPROC __glewGetConvolutionParameteriv; +GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPROC __glewGetHistogram; +GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERFVPROC __glewGetHistogramParameterfv; +GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERIVPROC __glewGetHistogramParameteriv; +GLEW_FUN_EXPORT PFNGLGETMINMAXPROC __glewGetMinmax; +GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERFVPROC __glewGetMinmaxParameterfv; +GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERIVPROC __glewGetMinmaxParameteriv; +GLEW_FUN_EXPORT PFNGLGETSEPARABLEFILTERPROC __glewGetSeparableFilter; +GLEW_FUN_EXPORT PFNGLHISTOGRAMPROC __glewHistogram; +GLEW_FUN_EXPORT PFNGLMINMAXPROC __glewMinmax; +GLEW_FUN_EXPORT PFNGLRESETHISTOGRAMPROC __glewResetHistogram; +GLEW_FUN_EXPORT PFNGLRESETMINMAXPROC __glewResetMinmax; +GLEW_FUN_EXPORT PFNGLSEPARABLEFILTER2DPROC __glewSeparableFilter2D; + +GLEW_FUN_EXPORT PFNGLCURRENTPALETTEMATRIXARBPROC __glewCurrentPaletteMatrixARB; +GLEW_FUN_EXPORT PFNGLMATRIXINDEXPOINTERARBPROC __glewMatrixIndexPointerARB; +GLEW_FUN_EXPORT PFNGLMATRIXINDEXUBVARBPROC __glewMatrixIndexubvARB; +GLEW_FUN_EXPORT PFNGLMATRIXINDEXUIVARBPROC __glewMatrixIndexuivARB; +GLEW_FUN_EXPORT PFNGLMATRIXINDEXUSVARBPROC __glewMatrixIndexusvARB; + +GLEW_FUN_EXPORT PFNGLSAMPLECOVERAGEARBPROC __glewSampleCoverageARB; + +GLEW_FUN_EXPORT PFNGLACTIVETEXTUREARBPROC __glewActiveTextureARB; +GLEW_FUN_EXPORT PFNGLCLIENTACTIVETEXTUREARBPROC __glewClientActiveTextureARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DARBPROC __glewMultiTexCoord1dARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DVARBPROC __glewMultiTexCoord1dvARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FARBPROC __glewMultiTexCoord1fARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FVARBPROC __glewMultiTexCoord1fvARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IARBPROC __glewMultiTexCoord1iARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IVARBPROC __glewMultiTexCoord1ivARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SARBPROC __glewMultiTexCoord1sARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SVARBPROC __glewMultiTexCoord1svARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DARBPROC __glewMultiTexCoord2dARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DVARBPROC __glewMultiTexCoord2dvARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FARBPROC __glewMultiTexCoord2fARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FVARBPROC __glewMultiTexCoord2fvARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IARBPROC __glewMultiTexCoord2iARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IVARBPROC __glewMultiTexCoord2ivARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SARBPROC __glewMultiTexCoord2sARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SVARBPROC __glewMultiTexCoord2svARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DARBPROC __glewMultiTexCoord3dARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DVARBPROC __glewMultiTexCoord3dvARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FARBPROC __glewMultiTexCoord3fARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FVARBPROC __glewMultiTexCoord3fvARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IARBPROC __glewMultiTexCoord3iARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IVARBPROC __glewMultiTexCoord3ivARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SARBPROC __glewMultiTexCoord3sARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SVARBPROC __glewMultiTexCoord3svARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DARBPROC __glewMultiTexCoord4dARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DVARBPROC __glewMultiTexCoord4dvARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FARBPROC __glewMultiTexCoord4fARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FVARBPROC __glewMultiTexCoord4fvARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IARBPROC __glewMultiTexCoord4iARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IVARBPROC __glewMultiTexCoord4ivARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SARBPROC __glewMultiTexCoord4sARB; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SVARBPROC __glewMultiTexCoord4svARB; + +GLEW_FUN_EXPORT PFNGLBEGINQUERYARBPROC __glewBeginQueryARB; +GLEW_FUN_EXPORT PFNGLDELETEQUERIESARBPROC __glewDeleteQueriesARB; +GLEW_FUN_EXPORT PFNGLENDQUERYARBPROC __glewEndQueryARB; +GLEW_FUN_EXPORT PFNGLGENQUERIESARBPROC __glewGenQueriesARB; +GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTIVARBPROC __glewGetQueryObjectivARB; +GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUIVARBPROC __glewGetQueryObjectuivARB; +GLEW_FUN_EXPORT PFNGLGETQUERYIVARBPROC __glewGetQueryivARB; +GLEW_FUN_EXPORT PFNGLISQUERYARBPROC __glewIsQueryARB; + +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFARBPROC __glewPointParameterfARB; +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVARBPROC __glewPointParameterfvARB; + +GLEW_FUN_EXPORT PFNGLATTACHOBJECTARBPROC __glewAttachObjectARB; +GLEW_FUN_EXPORT PFNGLCOMPILESHADERARBPROC __glewCompileShaderARB; +GLEW_FUN_EXPORT PFNGLCREATEPROGRAMOBJECTARBPROC __glewCreateProgramObjectARB; +GLEW_FUN_EXPORT PFNGLCREATESHADEROBJECTARBPROC __glewCreateShaderObjectARB; +GLEW_FUN_EXPORT PFNGLDELETEOBJECTARBPROC __glewDeleteObjectARB; +GLEW_FUN_EXPORT PFNGLDETACHOBJECTARBPROC __glewDetachObjectARB; +GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMARBPROC __glewGetActiveUniformARB; +GLEW_FUN_EXPORT PFNGLGETATTACHEDOBJECTSARBPROC __glewGetAttachedObjectsARB; +GLEW_FUN_EXPORT PFNGLGETHANDLEARBPROC __glewGetHandleARB; +GLEW_FUN_EXPORT PFNGLGETINFOLOGARBPROC __glewGetInfoLogARB; +GLEW_FUN_EXPORT PFNGLGETOBJECTPARAMETERFVARBPROC __glewGetObjectParameterfvARB; +GLEW_FUN_EXPORT PFNGLGETOBJECTPARAMETERIVARBPROC __glewGetObjectParameterivARB; +GLEW_FUN_EXPORT PFNGLGETSHADERSOURCEARBPROC __glewGetShaderSourceARB; +GLEW_FUN_EXPORT PFNGLGETUNIFORMLOCATIONARBPROC __glewGetUniformLocationARB; +GLEW_FUN_EXPORT PFNGLGETUNIFORMFVARBPROC __glewGetUniformfvARB; +GLEW_FUN_EXPORT PFNGLGETUNIFORMIVARBPROC __glewGetUniformivARB; +GLEW_FUN_EXPORT PFNGLLINKPROGRAMARBPROC __glewLinkProgramARB; +GLEW_FUN_EXPORT PFNGLSHADERSOURCEARBPROC __glewShaderSourceARB; +GLEW_FUN_EXPORT PFNGLUNIFORM1FARBPROC __glewUniform1fARB; +GLEW_FUN_EXPORT PFNGLUNIFORM1FVARBPROC __glewUniform1fvARB; +GLEW_FUN_EXPORT PFNGLUNIFORM1IARBPROC __glewUniform1iARB; +GLEW_FUN_EXPORT PFNGLUNIFORM1IVARBPROC __glewUniform1ivARB; +GLEW_FUN_EXPORT PFNGLUNIFORM2FARBPROC __glewUniform2fARB; +GLEW_FUN_EXPORT PFNGLUNIFORM2FVARBPROC __glewUniform2fvARB; +GLEW_FUN_EXPORT PFNGLUNIFORM2IARBPROC __glewUniform2iARB; +GLEW_FUN_EXPORT PFNGLUNIFORM2IVARBPROC __glewUniform2ivARB; +GLEW_FUN_EXPORT PFNGLUNIFORM3FARBPROC __glewUniform3fARB; +GLEW_FUN_EXPORT PFNGLUNIFORM3FVARBPROC __glewUniform3fvARB; +GLEW_FUN_EXPORT PFNGLUNIFORM3IARBPROC __glewUniform3iARB; +GLEW_FUN_EXPORT PFNGLUNIFORM3IVARBPROC __glewUniform3ivARB; +GLEW_FUN_EXPORT PFNGLUNIFORM4FARBPROC __glewUniform4fARB; +GLEW_FUN_EXPORT PFNGLUNIFORM4FVARBPROC __glewUniform4fvARB; +GLEW_FUN_EXPORT PFNGLUNIFORM4IARBPROC __glewUniform4iARB; +GLEW_FUN_EXPORT PFNGLUNIFORM4IVARBPROC __glewUniform4ivARB; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2FVARBPROC __glewUniformMatrix2fvARB; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3FVARBPROC __glewUniformMatrix3fvARB; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4FVARBPROC __glewUniformMatrix4fvARB; +GLEW_FUN_EXPORT PFNGLUSEPROGRAMOBJECTARBPROC __glewUseProgramObjectARB; +GLEW_FUN_EXPORT PFNGLVALIDATEPROGRAMARBPROC __glewValidateProgramARB; + +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE1DARBPROC __glewCompressedTexImage1DARB; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE2DARBPROC __glewCompressedTexImage2DARB; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE3DARBPROC __glewCompressedTexImage3DARB; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC __glewCompressedTexSubImage1DARB; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC __glewCompressedTexSubImage2DARB; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC __glewCompressedTexSubImage3DARB; +GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDTEXIMAGEARBPROC __glewGetCompressedTexImageARB; + +GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXDARBPROC __glewLoadTransposeMatrixdARB; +GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXFARBPROC __glewLoadTransposeMatrixfARB; +GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXDARBPROC __glewMultTransposeMatrixdARB; +GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXFARBPROC __glewMultTransposeMatrixfARB; + +GLEW_FUN_EXPORT PFNGLVERTEXBLENDARBPROC __glewVertexBlendARB; +GLEW_FUN_EXPORT PFNGLWEIGHTPOINTERARBPROC __glewWeightPointerARB; +GLEW_FUN_EXPORT PFNGLWEIGHTBVARBPROC __glewWeightbvARB; +GLEW_FUN_EXPORT PFNGLWEIGHTDVARBPROC __glewWeightdvARB; +GLEW_FUN_EXPORT PFNGLWEIGHTFVARBPROC __glewWeightfvARB; +GLEW_FUN_EXPORT PFNGLWEIGHTIVARBPROC __glewWeightivARB; +GLEW_FUN_EXPORT PFNGLWEIGHTSVARBPROC __glewWeightsvARB; +GLEW_FUN_EXPORT PFNGLWEIGHTUBVARBPROC __glewWeightubvARB; +GLEW_FUN_EXPORT PFNGLWEIGHTUIVARBPROC __glewWeightuivARB; +GLEW_FUN_EXPORT PFNGLWEIGHTUSVARBPROC __glewWeightusvARB; + +GLEW_FUN_EXPORT PFNGLBINDBUFFERARBPROC __glewBindBufferARB; +GLEW_FUN_EXPORT PFNGLBUFFERDATAARBPROC __glewBufferDataARB; +GLEW_FUN_EXPORT PFNGLBUFFERSUBDATAARBPROC __glewBufferSubDataARB; +GLEW_FUN_EXPORT PFNGLDELETEBUFFERSARBPROC __glewDeleteBuffersARB; +GLEW_FUN_EXPORT PFNGLGENBUFFERSARBPROC __glewGenBuffersARB; +GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERIVARBPROC __glewGetBufferParameterivARB; +GLEW_FUN_EXPORT PFNGLGETBUFFERPOINTERVARBPROC __glewGetBufferPointervARB; +GLEW_FUN_EXPORT PFNGLGETBUFFERSUBDATAARBPROC __glewGetBufferSubDataARB; +GLEW_FUN_EXPORT PFNGLISBUFFERARBPROC __glewIsBufferARB; +GLEW_FUN_EXPORT PFNGLMAPBUFFERARBPROC __glewMapBufferARB; +GLEW_FUN_EXPORT PFNGLUNMAPBUFFERARBPROC __glewUnmapBufferARB; + +GLEW_FUN_EXPORT PFNGLBINDPROGRAMARBPROC __glewBindProgramARB; +GLEW_FUN_EXPORT PFNGLDELETEPROGRAMSARBPROC __glewDeleteProgramsARB; +GLEW_FUN_EXPORT PFNGLDISABLEVERTEXATTRIBARRAYARBPROC __glewDisableVertexAttribArrayARB; +GLEW_FUN_EXPORT PFNGLENABLEVERTEXATTRIBARRAYARBPROC __glewEnableVertexAttribArrayARB; +GLEW_FUN_EXPORT PFNGLGENPROGRAMSARBPROC __glewGenProgramsARB; +GLEW_FUN_EXPORT PFNGLGETPROGRAMENVPARAMETERDVARBPROC __glewGetProgramEnvParameterdvARB; +GLEW_FUN_EXPORT PFNGLGETPROGRAMENVPARAMETERFVARBPROC __glewGetProgramEnvParameterfvARB; +GLEW_FUN_EXPORT PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC __glewGetProgramLocalParameterdvARB; +GLEW_FUN_EXPORT PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC __glewGetProgramLocalParameterfvARB; +GLEW_FUN_EXPORT PFNGLGETPROGRAMSTRINGARBPROC __glewGetProgramStringARB; +GLEW_FUN_EXPORT PFNGLGETPROGRAMIVARBPROC __glewGetProgramivARB; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBPOINTERVARBPROC __glewGetVertexAttribPointervARB; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBDVARBPROC __glewGetVertexAttribdvARB; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBFVARBPROC __glewGetVertexAttribfvARB; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIVARBPROC __glewGetVertexAttribivARB; +GLEW_FUN_EXPORT PFNGLISPROGRAMARBPROC __glewIsProgramARB; +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4DARBPROC __glewProgramEnvParameter4dARB; +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4DVARBPROC __glewProgramEnvParameter4dvARB; +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4FARBPROC __glewProgramEnvParameter4fARB; +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4FVARBPROC __glewProgramEnvParameter4fvARB; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4DARBPROC __glewProgramLocalParameter4dARB; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4DVARBPROC __glewProgramLocalParameter4dvARB; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4FARBPROC __glewProgramLocalParameter4fARB; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4FVARBPROC __glewProgramLocalParameter4fvARB; +GLEW_FUN_EXPORT PFNGLPROGRAMSTRINGARBPROC __glewProgramStringARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DARBPROC __glewVertexAttrib1dARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DVARBPROC __glewVertexAttrib1dvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FARBPROC __glewVertexAttrib1fARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FVARBPROC __glewVertexAttrib1fvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SARBPROC __glewVertexAttrib1sARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SVARBPROC __glewVertexAttrib1svARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DARBPROC __glewVertexAttrib2dARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DVARBPROC __glewVertexAttrib2dvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FARBPROC __glewVertexAttrib2fARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FVARBPROC __glewVertexAttrib2fvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SARBPROC __glewVertexAttrib2sARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SVARBPROC __glewVertexAttrib2svARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DARBPROC __glewVertexAttrib3dARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DVARBPROC __glewVertexAttrib3dvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FARBPROC __glewVertexAttrib3fARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FVARBPROC __glewVertexAttrib3fvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SARBPROC __glewVertexAttrib3sARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SVARBPROC __glewVertexAttrib3svARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NBVARBPROC __glewVertexAttrib4NbvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NIVARBPROC __glewVertexAttrib4NivARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NSVARBPROC __glewVertexAttrib4NsvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBARBPROC __glewVertexAttrib4NubARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBVARBPROC __glewVertexAttrib4NubvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUIVARBPROC __glewVertexAttrib4NuivARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUSVARBPROC __glewVertexAttrib4NusvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4BVARBPROC __glewVertexAttrib4bvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DARBPROC __glewVertexAttrib4dARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DVARBPROC __glewVertexAttrib4dvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FARBPROC __glewVertexAttrib4fARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FVARBPROC __glewVertexAttrib4fvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4IVARBPROC __glewVertexAttrib4ivARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SARBPROC __glewVertexAttrib4sARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SVARBPROC __glewVertexAttrib4svARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBVARBPROC __glewVertexAttrib4ubvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UIVARBPROC __glewVertexAttrib4uivARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4USVARBPROC __glewVertexAttrib4usvARB; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPOINTERARBPROC __glewVertexAttribPointerARB; + +GLEW_FUN_EXPORT PFNGLBINDATTRIBLOCATIONARBPROC __glewBindAttribLocationARB; +GLEW_FUN_EXPORT PFNGLGETACTIVEATTRIBARBPROC __glewGetActiveAttribARB; +GLEW_FUN_EXPORT PFNGLGETATTRIBLOCATIONARBPROC __glewGetAttribLocationARB; + +GLEW_FUN_EXPORT PFNGLWINDOWPOS2DARBPROC __glewWindowPos2dARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVARBPROC __glewWindowPos2dvARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2FARBPROC __glewWindowPos2fARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVARBPROC __glewWindowPos2fvARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2IARBPROC __glewWindowPos2iARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVARBPROC __glewWindowPos2ivARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2SARBPROC __glewWindowPos2sARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVARBPROC __glewWindowPos2svARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3DARBPROC __glewWindowPos3dARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVARBPROC __glewWindowPos3dvARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3FARBPROC __glewWindowPos3fARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVARBPROC __glewWindowPos3fvARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3IARBPROC __glewWindowPos3iARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVARBPROC __glewWindowPos3ivARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3SARBPROC __glewWindowPos3sARB; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVARBPROC __glewWindowPos3svARB; + +GLEW_FUN_EXPORT PFNGLDRAWBUFFERSATIPROC __glewDrawBuffersATI; + +GLEW_FUN_EXPORT PFNGLDRAWELEMENTARRAYATIPROC __glewDrawElementArrayATI; +GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTARRAYATIPROC __glewDrawRangeElementArrayATI; +GLEW_FUN_EXPORT PFNGLELEMENTPOINTERATIPROC __glewElementPointerATI; + +GLEW_FUN_EXPORT PFNGLGETTEXBUMPPARAMETERFVATIPROC __glewGetTexBumpParameterfvATI; +GLEW_FUN_EXPORT PFNGLGETTEXBUMPPARAMETERIVATIPROC __glewGetTexBumpParameterivATI; +GLEW_FUN_EXPORT PFNGLTEXBUMPPARAMETERFVATIPROC __glewTexBumpParameterfvATI; +GLEW_FUN_EXPORT PFNGLTEXBUMPPARAMETERIVATIPROC __glewTexBumpParameterivATI; + +GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP1ATIPROC __glewAlphaFragmentOp1ATI; +GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP2ATIPROC __glewAlphaFragmentOp2ATI; +GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP3ATIPROC __glewAlphaFragmentOp3ATI; +GLEW_FUN_EXPORT PFNGLBEGINFRAGMENTSHADERATIPROC __glewBeginFragmentShaderATI; +GLEW_FUN_EXPORT PFNGLBINDFRAGMENTSHADERATIPROC __glewBindFragmentShaderATI; +GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP1ATIPROC __glewColorFragmentOp1ATI; +GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP2ATIPROC __glewColorFragmentOp2ATI; +GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP3ATIPROC __glewColorFragmentOp3ATI; +GLEW_FUN_EXPORT PFNGLDELETEFRAGMENTSHADERATIPROC __glewDeleteFragmentShaderATI; +GLEW_FUN_EXPORT PFNGLENDFRAGMENTSHADERATIPROC __glewEndFragmentShaderATI; +GLEW_FUN_EXPORT PFNGLGENFRAGMENTSHADERSATIPROC __glewGenFragmentShadersATI; +GLEW_FUN_EXPORT PFNGLPASSTEXCOORDATIPROC __glewPassTexCoordATI; +GLEW_FUN_EXPORT PFNGLSAMPLEMAPATIPROC __glewSampleMapATI; +GLEW_FUN_EXPORT PFNGLSETFRAGMENTSHADERCONSTANTATIPROC __glewSetFragmentShaderConstantATI; + +GLEW_FUN_EXPORT PFNGLMAPOBJECTBUFFERATIPROC __glewMapObjectBufferATI; +GLEW_FUN_EXPORT PFNGLUNMAPOBJECTBUFFERATIPROC __glewUnmapObjectBufferATI; + +GLEW_FUN_EXPORT PFNGLPNTRIANGLESFATIPROC __glPNTrianglewesfATI; +GLEW_FUN_EXPORT PFNGLPNTRIANGLESIATIPROC __glPNTrianglewesiATI; + +GLEW_FUN_EXPORT PFNGLSTENCILFUNCSEPARATEATIPROC __glewStencilFuncSeparateATI; +GLEW_FUN_EXPORT PFNGLSTENCILOPSEPARATEATIPROC __glewStencilOpSeparateATI; + +GLEW_FUN_EXPORT PFNGLARRAYOBJECTATIPROC __glewArrayObjectATI; +GLEW_FUN_EXPORT PFNGLFREEOBJECTBUFFERATIPROC __glewFreeObjectBufferATI; +GLEW_FUN_EXPORT PFNGLGETARRAYOBJECTFVATIPROC __glewGetArrayObjectfvATI; +GLEW_FUN_EXPORT PFNGLGETARRAYOBJECTIVATIPROC __glewGetArrayObjectivATI; +GLEW_FUN_EXPORT PFNGLGETOBJECTBUFFERFVATIPROC __glewGetObjectBufferfvATI; +GLEW_FUN_EXPORT PFNGLGETOBJECTBUFFERIVATIPROC __glewGetObjectBufferivATI; +GLEW_FUN_EXPORT PFNGLGETVARIANTARRAYOBJECTFVATIPROC __glewGetVariantArrayObjectfvATI; +GLEW_FUN_EXPORT PFNGLGETVARIANTARRAYOBJECTIVATIPROC __glewGetVariantArrayObjectivATI; +GLEW_FUN_EXPORT PFNGLISOBJECTBUFFERATIPROC __glewIsObjectBufferATI; +GLEW_FUN_EXPORT PFNGLNEWOBJECTBUFFERATIPROC __glewNewObjectBufferATI; +GLEW_FUN_EXPORT PFNGLUPDATEOBJECTBUFFERATIPROC __glewUpdateObjectBufferATI; +GLEW_FUN_EXPORT PFNGLVARIANTARRAYOBJECTATIPROC __glewVariantArrayObjectATI; + +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC __glewGetVertexAttribArrayObjectfvATI; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC __glewGetVertexAttribArrayObjectivATI; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBARRAYOBJECTATIPROC __glewVertexAttribArrayObjectATI; + +GLEW_FUN_EXPORT PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC __glewClientActiveVertexStreamATI; +GLEW_FUN_EXPORT PFNGLNORMALSTREAM3BATIPROC __glewNormalStream3bATI; +GLEW_FUN_EXPORT PFNGLNORMALSTREAM3BVATIPROC __glewNormalStream3bvATI; +GLEW_FUN_EXPORT PFNGLNORMALSTREAM3DATIPROC __glewNormalStream3dATI; +GLEW_FUN_EXPORT PFNGLNORMALSTREAM3DVATIPROC __glewNormalStream3dvATI; +GLEW_FUN_EXPORT PFNGLNORMALSTREAM3FATIPROC __glewNormalStream3fATI; +GLEW_FUN_EXPORT PFNGLNORMALSTREAM3FVATIPROC __glewNormalStream3fvATI; +GLEW_FUN_EXPORT PFNGLNORMALSTREAM3IATIPROC __glewNormalStream3iATI; +GLEW_FUN_EXPORT PFNGLNORMALSTREAM3IVATIPROC __glewNormalStream3ivATI; +GLEW_FUN_EXPORT PFNGLNORMALSTREAM3SATIPROC __glewNormalStream3sATI; +GLEW_FUN_EXPORT PFNGLNORMALSTREAM3SVATIPROC __glewNormalStream3svATI; +GLEW_FUN_EXPORT PFNGLVERTEXBLENDENVFATIPROC __glewVertexBlendEnvfATI; +GLEW_FUN_EXPORT PFNGLVERTEXBLENDENVIATIPROC __glewVertexBlendEnviATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2DATIPROC __glewVertexStream2dATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2DVATIPROC __glewVertexStream2dvATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2FATIPROC __glewVertexStream2fATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2FVATIPROC __glewVertexStream2fvATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2IATIPROC __glewVertexStream2iATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2IVATIPROC __glewVertexStream2ivATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2SATIPROC __glewVertexStream2sATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2SVATIPROC __glewVertexStream2svATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3DATIPROC __glewVertexStream3dATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3DVATIPROC __glewVertexStream3dvATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3FATIPROC __glewVertexStream3fATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3FVATIPROC __glewVertexStream3fvATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3IATIPROC __glewVertexStream3iATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3IVATIPROC __glewVertexStream3ivATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3SATIPROC __glewVertexStream3sATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3SVATIPROC __glewVertexStream3svATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4DATIPROC __glewVertexStream4dATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4DVATIPROC __glewVertexStream4dvATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4FATIPROC __glewVertexStream4fATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4FVATIPROC __glewVertexStream4fvATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4IATIPROC __glewVertexStream4iATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4IVATIPROC __glewVertexStream4ivATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4SATIPROC __glewVertexStream4sATI; +GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4SVATIPROC __glewVertexStream4svATI; + +GLEW_FUN_EXPORT PFNGLGETUNIFORMBUFFERSIZEEXTPROC __glewGetUniformBufferSizeEXT; +GLEW_FUN_EXPORT PFNGLGETUNIFORMOFFSETEXTPROC __glewGetUniformOffsetEXT; +GLEW_FUN_EXPORT PFNGLUNIFORMBUFFEREXTPROC __glewUniformBufferEXT; + +GLEW_FUN_EXPORT PFNGLBLENDCOLOREXTPROC __glewBlendColorEXT; + +GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEEXTPROC __glewBlendEquationSeparateEXT; + +GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEEXTPROC __glewBlendFuncSeparateEXT; + +GLEW_FUN_EXPORT PFNGLBLENDEQUATIONEXTPROC __glewBlendEquationEXT; + +GLEW_FUN_EXPORT PFNGLCOLORSUBTABLEEXTPROC __glewColorSubTableEXT; +GLEW_FUN_EXPORT PFNGLCOPYCOLORSUBTABLEEXTPROC __glewCopyColorSubTableEXT; + +GLEW_FUN_EXPORT PFNGLLOCKARRAYSEXTPROC __glewLockArraysEXT; +GLEW_FUN_EXPORT PFNGLUNLOCKARRAYSEXTPROC __glewUnlockArraysEXT; + +GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER1DEXTPROC __glewConvolutionFilter1DEXT; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER2DEXTPROC __glewConvolutionFilter2DEXT; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFEXTPROC __glewConvolutionParameterfEXT; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFVEXTPROC __glewConvolutionParameterfvEXT; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIEXTPROC __glewConvolutionParameteriEXT; +GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIVEXTPROC __glewConvolutionParameterivEXT; +GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC __glewCopyConvolutionFilter1DEXT; +GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC __glewCopyConvolutionFilter2DEXT; +GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONFILTEREXTPROC __glewGetConvolutionFilterEXT; +GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC __glewGetConvolutionParameterfvEXT; +GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC __glewGetConvolutionParameterivEXT; +GLEW_FUN_EXPORT PFNGLGETSEPARABLEFILTEREXTPROC __glewGetSeparableFilterEXT; +GLEW_FUN_EXPORT PFNGLSEPARABLEFILTER2DEXTPROC __glewSeparableFilter2DEXT; + +GLEW_FUN_EXPORT PFNGLBINORMALPOINTEREXTPROC __glewBinormalPointerEXT; +GLEW_FUN_EXPORT PFNGLTANGENTPOINTEREXTPROC __glewTangentPointerEXT; + +GLEW_FUN_EXPORT PFNGLCOPYTEXIMAGE1DEXTPROC __glewCopyTexImage1DEXT; +GLEW_FUN_EXPORT PFNGLCOPYTEXIMAGE2DEXTPROC __glewCopyTexImage2DEXT; +GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE1DEXTPROC __glewCopyTexSubImage1DEXT; +GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE2DEXTPROC __glewCopyTexSubImage2DEXT; +GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE3DEXTPROC __glewCopyTexSubImage3DEXT; + +GLEW_FUN_EXPORT PFNGLCULLPARAMETERDVEXTPROC __glewCullParameterdvEXT; +GLEW_FUN_EXPORT PFNGLCULLPARAMETERFVEXTPROC __glewCullParameterfvEXT; + +GLEW_FUN_EXPORT PFNGLDEPTHBOUNDSEXTPROC __glewDepthBoundsEXT; + +GLEW_FUN_EXPORT PFNGLCOLORMASKINDEXEDEXTPROC __glewColorMaskIndexedEXT; +GLEW_FUN_EXPORT PFNGLDISABLEINDEXEDEXTPROC __glewDisableIndexedEXT; +GLEW_FUN_EXPORT PFNGLENABLEINDEXEDEXTPROC __glewEnableIndexedEXT; +GLEW_FUN_EXPORT PFNGLGETBOOLEANINDEXEDVEXTPROC __glewGetBooleanIndexedvEXT; +GLEW_FUN_EXPORT PFNGLGETINTEGERINDEXEDVEXTPROC __glewGetIntegerIndexedvEXT; +GLEW_FUN_EXPORT PFNGLISENABLEDINDEXEDEXTPROC __glewIsEnabledIndexedEXT; + +GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDEXTPROC __glewDrawArraysInstancedEXT; +GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDEXTPROC __glewDrawElementsInstancedEXT; + +GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSEXTPROC __glewDrawRangeElementsEXT; + +GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTEREXTPROC __glewFogCoordPointerEXT; +GLEW_FUN_EXPORT PFNGLFOGCOORDDEXTPROC __glewFogCoorddEXT; +GLEW_FUN_EXPORT PFNGLFOGCOORDDVEXTPROC __glewFogCoorddvEXT; +GLEW_FUN_EXPORT PFNGLFOGCOORDFEXTPROC __glewFogCoordfEXT; +GLEW_FUN_EXPORT PFNGLFOGCOORDFVEXTPROC __glewFogCoordfvEXT; + +GLEW_FUN_EXPORT PFNGLFRAGMENTCOLORMATERIALEXTPROC __glewFragmentColorMaterialEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFEXTPROC __glewFragmentLightModelfEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFVEXTPROC __glewFragmentLightModelfvEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIEXTPROC __glewFragmentLightModeliEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIVEXTPROC __glewFragmentLightModelivEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFEXTPROC __glewFragmentLightfEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFVEXTPROC __glewFragmentLightfvEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIEXTPROC __glewFragmentLightiEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIVEXTPROC __glewFragmentLightivEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFEXTPROC __glewFragmentMaterialfEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFVEXTPROC __glewFragmentMaterialfvEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIEXTPROC __glewFragmentMaterialiEXT; +GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIVEXTPROC __glewFragmentMaterialivEXT; +GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTFVEXTPROC __glewGetFragmentLightfvEXT; +GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTIVEXTPROC __glewGetFragmentLightivEXT; +GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALFVEXTPROC __glewGetFragmentMaterialfvEXT; +GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALIVEXTPROC __glewGetFragmentMaterialivEXT; +GLEW_FUN_EXPORT PFNGLLIGHTENVIEXTPROC __glewLightEnviEXT; + +GLEW_FUN_EXPORT PFNGLBLITFRAMEBUFFEREXTPROC __glewBlitFramebufferEXT; + +GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewRenderbufferStorageMultisampleEXT; + +GLEW_FUN_EXPORT PFNGLBINDFRAMEBUFFEREXTPROC __glewBindFramebufferEXT; +GLEW_FUN_EXPORT PFNGLBINDRENDERBUFFEREXTPROC __glewBindRenderbufferEXT; +GLEW_FUN_EXPORT PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC __glewCheckFramebufferStatusEXT; +GLEW_FUN_EXPORT PFNGLDELETEFRAMEBUFFERSEXTPROC __glewDeleteFramebuffersEXT; +GLEW_FUN_EXPORT PFNGLDELETERENDERBUFFERSEXTPROC __glewDeleteRenderbuffersEXT; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC __glewFramebufferRenderbufferEXT; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE1DEXTPROC __glewFramebufferTexture1DEXT; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE2DEXTPROC __glewFramebufferTexture2DEXT; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE3DEXTPROC __glewFramebufferTexture3DEXT; +GLEW_FUN_EXPORT PFNGLGENFRAMEBUFFERSEXTPROC __glewGenFramebuffersEXT; +GLEW_FUN_EXPORT PFNGLGENRENDERBUFFERSEXTPROC __glewGenRenderbuffersEXT; +GLEW_FUN_EXPORT PFNGLGENERATEMIPMAPEXTPROC __glewGenerateMipmapEXT; +GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC __glewGetFramebufferAttachmentParameterivEXT; +GLEW_FUN_EXPORT PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC __glewGetRenderbufferParameterivEXT; +GLEW_FUN_EXPORT PFNGLISFRAMEBUFFEREXTPROC __glewIsFramebufferEXT; +GLEW_FUN_EXPORT PFNGLISRENDERBUFFEREXTPROC __glewIsRenderbufferEXT; +GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEEXTPROC __glewRenderbufferStorageEXT; + +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREEXTPROC __glewFramebufferTextureEXT; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC __glewFramebufferTextureFaceEXT; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC __glewFramebufferTextureLayerEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERIEXTPROC __glewProgramParameteriEXT; + +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERS4FVEXTPROC __glewProgramEnvParameters4fvEXT; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC __glewProgramLocalParameters4fvEXT; + +GLEW_FUN_EXPORT PFNGLBINDFRAGDATALOCATIONEXTPROC __glewBindFragDataLocationEXT; +GLEW_FUN_EXPORT PFNGLGETFRAGDATALOCATIONEXTPROC __glewGetFragDataLocationEXT; +GLEW_FUN_EXPORT PFNGLGETUNIFORMUIVEXTPROC __glewGetUniformuivEXT; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIIVEXTPROC __glewGetVertexAttribIivEXT; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIUIVEXTPROC __glewGetVertexAttribIuivEXT; +GLEW_FUN_EXPORT PFNGLUNIFORM1UIEXTPROC __glewUniform1uiEXT; +GLEW_FUN_EXPORT PFNGLUNIFORM1UIVEXTPROC __glewUniform1uivEXT; +GLEW_FUN_EXPORT PFNGLUNIFORM2UIEXTPROC __glewUniform2uiEXT; +GLEW_FUN_EXPORT PFNGLUNIFORM2UIVEXTPROC __glewUniform2uivEXT; +GLEW_FUN_EXPORT PFNGLUNIFORM3UIEXTPROC __glewUniform3uiEXT; +GLEW_FUN_EXPORT PFNGLUNIFORM3UIVEXTPROC __glewUniform3uivEXT; +GLEW_FUN_EXPORT PFNGLUNIFORM4UIEXTPROC __glewUniform4uiEXT; +GLEW_FUN_EXPORT PFNGLUNIFORM4UIVEXTPROC __glewUniform4uivEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IEXTPROC __glewVertexAttribI1iEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IVEXTPROC __glewVertexAttribI1ivEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIEXTPROC __glewVertexAttribI1uiEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIVEXTPROC __glewVertexAttribI1uivEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IEXTPROC __glewVertexAttribI2iEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IVEXTPROC __glewVertexAttribI2ivEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIEXTPROC __glewVertexAttribI2uiEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIVEXTPROC __glewVertexAttribI2uivEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IEXTPROC __glewVertexAttribI3iEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IVEXTPROC __glewVertexAttribI3ivEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIEXTPROC __glewVertexAttribI3uiEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIVEXTPROC __glewVertexAttribI3uivEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4BVEXTPROC __glewVertexAttribI4bvEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IEXTPROC __glewVertexAttribI4iEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IVEXTPROC __glewVertexAttribI4ivEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4SVEXTPROC __glewVertexAttribI4svEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UBVEXTPROC __glewVertexAttribI4ubvEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIEXTPROC __glewVertexAttribI4uiEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIVEXTPROC __glewVertexAttribI4uivEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4USVEXTPROC __glewVertexAttribI4usvEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBIPOINTEREXTPROC __glewVertexAttribIPointerEXT; + +GLEW_FUN_EXPORT PFNGLGETHISTOGRAMEXTPROC __glewGetHistogramEXT; +GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERFVEXTPROC __glewGetHistogramParameterfvEXT; +GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERIVEXTPROC __glewGetHistogramParameterivEXT; +GLEW_FUN_EXPORT PFNGLGETMINMAXEXTPROC __glewGetMinmaxEXT; +GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERFVEXTPROC __glewGetMinmaxParameterfvEXT; +GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERIVEXTPROC __glewGetMinmaxParameterivEXT; +GLEW_FUN_EXPORT PFNGLHISTOGRAMEXTPROC __glewHistogramEXT; +GLEW_FUN_EXPORT PFNGLMINMAXEXTPROC __glewMinmaxEXT; +GLEW_FUN_EXPORT PFNGLRESETHISTOGRAMEXTPROC __glewResetHistogramEXT; +GLEW_FUN_EXPORT PFNGLRESETMINMAXEXTPROC __glewResetMinmaxEXT; + +GLEW_FUN_EXPORT PFNGLINDEXFUNCEXTPROC __glewIndexFuncEXT; + +GLEW_FUN_EXPORT PFNGLINDEXMATERIALEXTPROC __glewIndexMaterialEXT; + +GLEW_FUN_EXPORT PFNGLAPPLYTEXTUREEXTPROC __glewApplyTextureEXT; +GLEW_FUN_EXPORT PFNGLTEXTURELIGHTEXTPROC __glewTextureLightEXT; +GLEW_FUN_EXPORT PFNGLTEXTUREMATERIALEXTPROC __glewTextureMaterialEXT; + +GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSEXTPROC __glewMultiDrawArraysEXT; +GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSEXTPROC __glewMultiDrawElementsEXT; + +GLEW_FUN_EXPORT PFNGLSAMPLEMASKEXTPROC __glewSampleMaskEXT; +GLEW_FUN_EXPORT PFNGLSAMPLEPATTERNEXTPROC __glewSamplePatternEXT; + +GLEW_FUN_EXPORT PFNGLCOLORTABLEEXTPROC __glewColorTableEXT; +GLEW_FUN_EXPORT PFNGLGETCOLORTABLEEXTPROC __glewGetColorTableEXT; +GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVEXTPROC __glewGetColorTableParameterfvEXT; +GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVEXTPROC __glewGetColorTableParameterivEXT; + +GLEW_FUN_EXPORT PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC __glewGetPixelTransformParameterfvEXT; +GLEW_FUN_EXPORT PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC __glewGetPixelTransformParameterivEXT; +GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERFEXTPROC __glewPixelTransformParameterfEXT; +GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC __glewPixelTransformParameterfvEXT; +GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERIEXTPROC __glewPixelTransformParameteriEXT; +GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC __glewPixelTransformParameterivEXT; + +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFEXTPROC __glewPointParameterfEXT; +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVEXTPROC __glewPointParameterfvEXT; + +GLEW_FUN_EXPORT PFNGLPOLYGONOFFSETEXTPROC __glewPolygonOffsetEXT; + +GLEW_FUN_EXPORT PFNGLBEGINSCENEEXTPROC __glewBeginSceneEXT; +GLEW_FUN_EXPORT PFNGLENDSCENEEXTPROC __glewEndSceneEXT; + +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BEXTPROC __glewSecondaryColor3bEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BVEXTPROC __glewSecondaryColor3bvEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DEXTPROC __glewSecondaryColor3dEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DVEXTPROC __glewSecondaryColor3dvEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FEXTPROC __glewSecondaryColor3fEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FVEXTPROC __glewSecondaryColor3fvEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IEXTPROC __glewSecondaryColor3iEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IVEXTPROC __glewSecondaryColor3ivEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SEXTPROC __glewSecondaryColor3sEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SVEXTPROC __glewSecondaryColor3svEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBEXTPROC __glewSecondaryColor3ubEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBVEXTPROC __glewSecondaryColor3ubvEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIEXTPROC __glewSecondaryColor3uiEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIVEXTPROC __glewSecondaryColor3uivEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USEXTPROC __glewSecondaryColor3usEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USVEXTPROC __glewSecondaryColor3usvEXT; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTEREXTPROC __glewSecondaryColorPointerEXT; + +GLEW_FUN_EXPORT PFNGLACTIVESTENCILFACEEXTPROC __glewActiveStencilFaceEXT; + +GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE1DEXTPROC __glewTexSubImage1DEXT; +GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE2DEXTPROC __glewTexSubImage2DEXT; +GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE3DEXTPROC __glewTexSubImage3DEXT; + +GLEW_FUN_EXPORT PFNGLTEXIMAGE3DEXTPROC __glewTexImage3DEXT; + +GLEW_FUN_EXPORT PFNGLTEXBUFFEREXTPROC __glewTexBufferEXT; + +GLEW_FUN_EXPORT PFNGLCLEARCOLORIIEXTPROC __glewClearColorIiEXT; +GLEW_FUN_EXPORT PFNGLCLEARCOLORIUIEXTPROC __glewClearColorIuiEXT; +GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIIVEXTPROC __glewGetTexParameterIivEXT; +GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIUIVEXTPROC __glewGetTexParameterIuivEXT; +GLEW_FUN_EXPORT PFNGLTEXPARAMETERIIVEXTPROC __glewTexParameterIivEXT; +GLEW_FUN_EXPORT PFNGLTEXPARAMETERIUIVEXTPROC __glewTexParameterIuivEXT; + +GLEW_FUN_EXPORT PFNGLARETEXTURESRESIDENTEXTPROC __glewAreTexturesResidentEXT; +GLEW_FUN_EXPORT PFNGLBINDTEXTUREEXTPROC __glewBindTextureEXT; +GLEW_FUN_EXPORT PFNGLDELETETEXTURESEXTPROC __glewDeleteTexturesEXT; +GLEW_FUN_EXPORT PFNGLGENTEXTURESEXTPROC __glewGenTexturesEXT; +GLEW_FUN_EXPORT PFNGLISTEXTUREEXTPROC __glewIsTextureEXT; +GLEW_FUN_EXPORT PFNGLPRIORITIZETEXTURESEXTPROC __glewPrioritizeTexturesEXT; + +GLEW_FUN_EXPORT PFNGLTEXTURENORMALEXTPROC __glewTextureNormalEXT; + +GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTI64VEXTPROC __glewGetQueryObjecti64vEXT; +GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUI64VEXTPROC __glewGetQueryObjectui64vEXT; + +GLEW_FUN_EXPORT PFNGLARRAYELEMENTEXTPROC __glewArrayElementEXT; +GLEW_FUN_EXPORT PFNGLCOLORPOINTEREXTPROC __glewColorPointerEXT; +GLEW_FUN_EXPORT PFNGLDRAWARRAYSEXTPROC __glewDrawArraysEXT; +GLEW_FUN_EXPORT PFNGLEDGEFLAGPOINTEREXTPROC __glewEdgeFlagPointerEXT; +GLEW_FUN_EXPORT PFNGLGETPOINTERVEXTPROC __glewGetPointervEXT; +GLEW_FUN_EXPORT PFNGLINDEXPOINTEREXTPROC __glewIndexPointerEXT; +GLEW_FUN_EXPORT PFNGLNORMALPOINTEREXTPROC __glewNormalPointerEXT; +GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTEREXTPROC __glewTexCoordPointerEXT; +GLEW_FUN_EXPORT PFNGLVERTEXPOINTEREXTPROC __glewVertexPointerEXT; + +GLEW_FUN_EXPORT PFNGLBEGINVERTEXSHADEREXTPROC __glewBeginVertexShaderEXT; +GLEW_FUN_EXPORT PFNGLBINDLIGHTPARAMETEREXTPROC __glewBindLightParameterEXT; +GLEW_FUN_EXPORT PFNGLBINDMATERIALPARAMETEREXTPROC __glewBindMaterialParameterEXT; +GLEW_FUN_EXPORT PFNGLBINDPARAMETEREXTPROC __glewBindParameterEXT; +GLEW_FUN_EXPORT PFNGLBINDTEXGENPARAMETEREXTPROC __glewBindTexGenParameterEXT; +GLEW_FUN_EXPORT PFNGLBINDTEXTUREUNITPARAMETEREXTPROC __glewBindTextureUnitParameterEXT; +GLEW_FUN_EXPORT PFNGLBINDVERTEXSHADEREXTPROC __glewBindVertexShaderEXT; +GLEW_FUN_EXPORT PFNGLDELETEVERTEXSHADEREXTPROC __glewDeleteVertexShaderEXT; +GLEW_FUN_EXPORT PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC __glewDisableVariantClientStateEXT; +GLEW_FUN_EXPORT PFNGLENABLEVARIANTCLIENTSTATEEXTPROC __glewEnableVariantClientStateEXT; +GLEW_FUN_EXPORT PFNGLENDVERTEXSHADEREXTPROC __glewEndVertexShaderEXT; +GLEW_FUN_EXPORT PFNGLEXTRACTCOMPONENTEXTPROC __glewExtractComponentEXT; +GLEW_FUN_EXPORT PFNGLGENSYMBOLSEXTPROC __glewGenSymbolsEXT; +GLEW_FUN_EXPORT PFNGLGENVERTEXSHADERSEXTPROC __glewGenVertexShadersEXT; +GLEW_FUN_EXPORT PFNGLGETINVARIANTBOOLEANVEXTPROC __glewGetInvariantBooleanvEXT; +GLEW_FUN_EXPORT PFNGLGETINVARIANTFLOATVEXTPROC __glewGetInvariantFloatvEXT; +GLEW_FUN_EXPORT PFNGLGETINVARIANTINTEGERVEXTPROC __glewGetInvariantIntegervEXT; +GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC __glewGetLocalConstantBooleanvEXT; +GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTFLOATVEXTPROC __glewGetLocalConstantFloatvEXT; +GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTINTEGERVEXTPROC __glewGetLocalConstantIntegervEXT; +GLEW_FUN_EXPORT PFNGLGETVARIANTBOOLEANVEXTPROC __glewGetVariantBooleanvEXT; +GLEW_FUN_EXPORT PFNGLGETVARIANTFLOATVEXTPROC __glewGetVariantFloatvEXT; +GLEW_FUN_EXPORT PFNGLGETVARIANTINTEGERVEXTPROC __glewGetVariantIntegervEXT; +GLEW_FUN_EXPORT PFNGLGETVARIANTPOINTERVEXTPROC __glewGetVariantPointervEXT; +GLEW_FUN_EXPORT PFNGLINSERTCOMPONENTEXTPROC __glewInsertComponentEXT; +GLEW_FUN_EXPORT PFNGLISVARIANTENABLEDEXTPROC __glewIsVariantEnabledEXT; +GLEW_FUN_EXPORT PFNGLSETINVARIANTEXTPROC __glewSetInvariantEXT; +GLEW_FUN_EXPORT PFNGLSETLOCALCONSTANTEXTPROC __glewSetLocalConstantEXT; +GLEW_FUN_EXPORT PFNGLSHADEROP1EXTPROC __glewShaderOp1EXT; +GLEW_FUN_EXPORT PFNGLSHADEROP2EXTPROC __glewShaderOp2EXT; +GLEW_FUN_EXPORT PFNGLSHADEROP3EXTPROC __glewShaderOp3EXT; +GLEW_FUN_EXPORT PFNGLSWIZZLEEXTPROC __glewSwizzleEXT; +GLEW_FUN_EXPORT PFNGLVARIANTPOINTEREXTPROC __glewVariantPointerEXT; +GLEW_FUN_EXPORT PFNGLVARIANTBVEXTPROC __glewVariantbvEXT; +GLEW_FUN_EXPORT PFNGLVARIANTDVEXTPROC __glewVariantdvEXT; +GLEW_FUN_EXPORT PFNGLVARIANTFVEXTPROC __glewVariantfvEXT; +GLEW_FUN_EXPORT PFNGLVARIANTIVEXTPROC __glewVariantivEXT; +GLEW_FUN_EXPORT PFNGLVARIANTSVEXTPROC __glewVariantsvEXT; +GLEW_FUN_EXPORT PFNGLVARIANTUBVEXTPROC __glewVariantubvEXT; +GLEW_FUN_EXPORT PFNGLVARIANTUIVEXTPROC __glewVariantuivEXT; +GLEW_FUN_EXPORT PFNGLVARIANTUSVEXTPROC __glewVariantusvEXT; +GLEW_FUN_EXPORT PFNGLWRITEMASKEXTPROC __glewWriteMaskEXT; + +GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTPOINTEREXTPROC __glewVertexWeightPointerEXT; +GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTFEXTPROC __glewVertexWeightfEXT; +GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTFVEXTPROC __glewVertexWeightfvEXT; + +GLEW_FUN_EXPORT PFNGLFRAMETERMINATORGREMEDYPROC __glewFrameTerminatorGREMEDY; + +GLEW_FUN_EXPORT PFNGLSTRINGMARKERGREMEDYPROC __glewStringMarkerGREMEDY; + +GLEW_FUN_EXPORT PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC __glewGetImageTransformParameterfvHP; +GLEW_FUN_EXPORT PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC __glewGetImageTransformParameterivHP; +GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERFHPPROC __glewImageTransformParameterfHP; +GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERFVHPPROC __glewImageTransformParameterfvHP; +GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERIHPPROC __glewImageTransformParameteriHP; +GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERIVHPPROC __glewImageTransformParameterivHP; + +GLEW_FUN_EXPORT PFNGLMULTIMODEDRAWARRAYSIBMPROC __glewMultiModeDrawArraysIBM; +GLEW_FUN_EXPORT PFNGLMULTIMODEDRAWELEMENTSIBMPROC __glewMultiModeDrawElementsIBM; + +GLEW_FUN_EXPORT PFNGLCOLORPOINTERLISTIBMPROC __glewColorPointerListIBM; +GLEW_FUN_EXPORT PFNGLEDGEFLAGPOINTERLISTIBMPROC __glewEdgeFlagPointerListIBM; +GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTERLISTIBMPROC __glewFogCoordPointerListIBM; +GLEW_FUN_EXPORT PFNGLINDEXPOINTERLISTIBMPROC __glewIndexPointerListIBM; +GLEW_FUN_EXPORT PFNGLNORMALPOINTERLISTIBMPROC __glewNormalPointerListIBM; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTERLISTIBMPROC __glewSecondaryColorPointerListIBM; +GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTERLISTIBMPROC __glewTexCoordPointerListIBM; +GLEW_FUN_EXPORT PFNGLVERTEXPOINTERLISTIBMPROC __glewVertexPointerListIBM; + +GLEW_FUN_EXPORT PFNGLCOLORPOINTERVINTELPROC __glewColorPointervINTEL; +GLEW_FUN_EXPORT PFNGLNORMALPOINTERVINTELPROC __glewNormalPointervINTEL; +GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTERVINTELPROC __glewTexCoordPointervINTEL; +GLEW_FUN_EXPORT PFNGLVERTEXPOINTERVINTELPROC __glewVertexPointervINTEL; + +GLEW_FUN_EXPORT PFNGLTEXSCISSORFUNCINTELPROC __glewTexScissorFuncINTEL; +GLEW_FUN_EXPORT PFNGLTEXSCISSORINTELPROC __glewTexScissorINTEL; + +GLEW_FUN_EXPORT PFNGLBUFFERREGIONENABLEDEXTPROC __glewBufferRegionEnabledEXT; +GLEW_FUN_EXPORT PFNGLDELETEBUFFERREGIONEXTPROC __glewDeleteBufferRegionEXT; +GLEW_FUN_EXPORT PFNGLDRAWBUFFERREGIONEXTPROC __glewDrawBufferRegionEXT; +GLEW_FUN_EXPORT PFNGLNEWBUFFERREGIONEXTPROC __glewNewBufferRegionEXT; +GLEW_FUN_EXPORT PFNGLREADBUFFERREGIONEXTPROC __glewReadBufferRegionEXT; + +GLEW_FUN_EXPORT PFNGLRESIZEBUFFERSMESAPROC __glewResizeBuffersMESA; + +GLEW_FUN_EXPORT PFNGLWINDOWPOS2DMESAPROC __glewWindowPos2dMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVMESAPROC __glewWindowPos2dvMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2FMESAPROC __glewWindowPos2fMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVMESAPROC __glewWindowPos2fvMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2IMESAPROC __glewWindowPos2iMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVMESAPROC __glewWindowPos2ivMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2SMESAPROC __glewWindowPos2sMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVMESAPROC __glewWindowPos2svMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3DMESAPROC __glewWindowPos3dMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVMESAPROC __glewWindowPos3dvMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3FMESAPROC __glewWindowPos3fMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVMESAPROC __glewWindowPos3fvMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3IMESAPROC __glewWindowPos3iMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVMESAPROC __glewWindowPos3ivMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3SMESAPROC __glewWindowPos3sMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVMESAPROC __glewWindowPos3svMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS4DMESAPROC __glewWindowPos4dMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS4DVMESAPROC __glewWindowPos4dvMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS4FMESAPROC __glewWindowPos4fMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS4FVMESAPROC __glewWindowPos4fvMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS4IMESAPROC __glewWindowPos4iMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS4IVMESAPROC __glewWindowPos4ivMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS4SMESAPROC __glewWindowPos4sMESA; +GLEW_FUN_EXPORT PFNGLWINDOWPOS4SVMESAPROC __glewWindowPos4svMESA; + +GLEW_FUN_EXPORT PFNGLCLEARDEPTHDNVPROC __glewClearDepthdNV; +GLEW_FUN_EXPORT PFNGLDEPTHBOUNDSDNVPROC __glewDepthBoundsdNV; +GLEW_FUN_EXPORT PFNGLDEPTHRANGEDNVPROC __glewDepthRangedNV; + +GLEW_FUN_EXPORT PFNGLEVALMAPSNVPROC __glewEvalMapsNV; +GLEW_FUN_EXPORT PFNGLGETMAPATTRIBPARAMETERFVNVPROC __glewGetMapAttribParameterfvNV; +GLEW_FUN_EXPORT PFNGLGETMAPATTRIBPARAMETERIVNVPROC __glewGetMapAttribParameterivNV; +GLEW_FUN_EXPORT PFNGLGETMAPCONTROLPOINTSNVPROC __glewGetMapControlPointsNV; +GLEW_FUN_EXPORT PFNGLGETMAPPARAMETERFVNVPROC __glewGetMapParameterfvNV; +GLEW_FUN_EXPORT PFNGLGETMAPPARAMETERIVNVPROC __glewGetMapParameterivNV; +GLEW_FUN_EXPORT PFNGLMAPCONTROLPOINTSNVPROC __glewMapControlPointsNV; +GLEW_FUN_EXPORT PFNGLMAPPARAMETERFVNVPROC __glewMapParameterfvNV; +GLEW_FUN_EXPORT PFNGLMAPPARAMETERIVNVPROC __glewMapParameterivNV; + +GLEW_FUN_EXPORT PFNGLDELETEFENCESNVPROC __glewDeleteFencesNV; +GLEW_FUN_EXPORT PFNGLFINISHFENCENVPROC __glewFinishFenceNV; +GLEW_FUN_EXPORT PFNGLGENFENCESNVPROC __glewGenFencesNV; +GLEW_FUN_EXPORT PFNGLGETFENCEIVNVPROC __glewGetFenceivNV; +GLEW_FUN_EXPORT PFNGLISFENCENVPROC __glewIsFenceNV; +GLEW_FUN_EXPORT PFNGLSETFENCENVPROC __glewSetFenceNV; +GLEW_FUN_EXPORT PFNGLTESTFENCENVPROC __glewTestFenceNV; + +GLEW_FUN_EXPORT PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC __glewGetProgramNamedParameterdvNV; +GLEW_FUN_EXPORT PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC __glewGetProgramNamedParameterfvNV; +GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4DNVPROC __glewProgramNamedParameter4dNV; +GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC __glewProgramNamedParameter4dvNV; +GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4FNVPROC __glewProgramNamedParameter4fNV; +GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC __glewProgramNamedParameter4fvNV; + +GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC __glewRenderbufferStorageMultisampleCoverageNV; + +GLEW_FUN_EXPORT PFNGLPROGRAMVERTEXLIMITNVPROC __glewProgramVertexLimitNV; + +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4INVPROC __glewProgramEnvParameterI4iNV; +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4IVNVPROC __glewProgramEnvParameterI4ivNV; +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4UINVPROC __glewProgramEnvParameterI4uiNV; +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4UIVNVPROC __glewProgramEnvParameterI4uivNV; +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERSI4IVNVPROC __glewProgramEnvParametersI4ivNV; +GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC __glewProgramEnvParametersI4uivNV; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4INVPROC __glewProgramLocalParameterI4iNV; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC __glewProgramLocalParameterI4ivNV; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4UINVPROC __glewProgramLocalParameterI4uiNV; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC __glewProgramLocalParameterI4uivNV; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC __glewProgramLocalParametersI4ivNV; +GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC __glewProgramLocalParametersI4uivNV; + +GLEW_FUN_EXPORT PFNGLCOLOR3HNVPROC __glewColor3hNV; +GLEW_FUN_EXPORT PFNGLCOLOR3HVNVPROC __glewColor3hvNV; +GLEW_FUN_EXPORT PFNGLCOLOR4HNVPROC __glewColor4hNV; +GLEW_FUN_EXPORT PFNGLCOLOR4HVNVPROC __glewColor4hvNV; +GLEW_FUN_EXPORT PFNGLFOGCOORDHNVPROC __glewFogCoordhNV; +GLEW_FUN_EXPORT PFNGLFOGCOORDHVNVPROC __glewFogCoordhvNV; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1HNVPROC __glewMultiTexCoord1hNV; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1HVNVPROC __glewMultiTexCoord1hvNV; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2HNVPROC __glewMultiTexCoord2hNV; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2HVNVPROC __glewMultiTexCoord2hvNV; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3HNVPROC __glewMultiTexCoord3hNV; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3HVNVPROC __glewMultiTexCoord3hvNV; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4HNVPROC __glewMultiTexCoord4hNV; +GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4HVNVPROC __glewMultiTexCoord4hvNV; +GLEW_FUN_EXPORT PFNGLNORMAL3HNVPROC __glewNormal3hNV; +GLEW_FUN_EXPORT PFNGLNORMAL3HVNVPROC __glewNormal3hvNV; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3HNVPROC __glewSecondaryColor3hNV; +GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3HVNVPROC __glewSecondaryColor3hvNV; +GLEW_FUN_EXPORT PFNGLTEXCOORD1HNVPROC __glewTexCoord1hNV; +GLEW_FUN_EXPORT PFNGLTEXCOORD1HVNVPROC __glewTexCoord1hvNV; +GLEW_FUN_EXPORT PFNGLTEXCOORD2HNVPROC __glewTexCoord2hNV; +GLEW_FUN_EXPORT PFNGLTEXCOORD2HVNVPROC __glewTexCoord2hvNV; +GLEW_FUN_EXPORT PFNGLTEXCOORD3HNVPROC __glewTexCoord3hNV; +GLEW_FUN_EXPORT PFNGLTEXCOORD3HVNVPROC __glewTexCoord3hvNV; +GLEW_FUN_EXPORT PFNGLTEXCOORD4HNVPROC __glewTexCoord4hNV; +GLEW_FUN_EXPORT PFNGLTEXCOORD4HVNVPROC __glewTexCoord4hvNV; +GLEW_FUN_EXPORT PFNGLVERTEX2HNVPROC __glewVertex2hNV; +GLEW_FUN_EXPORT PFNGLVERTEX2HVNVPROC __glewVertex2hvNV; +GLEW_FUN_EXPORT PFNGLVERTEX3HNVPROC __glewVertex3hNV; +GLEW_FUN_EXPORT PFNGLVERTEX3HVNVPROC __glewVertex3hvNV; +GLEW_FUN_EXPORT PFNGLVERTEX4HNVPROC __glewVertex4hNV; +GLEW_FUN_EXPORT PFNGLVERTEX4HVNVPROC __glewVertex4hvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1HNVPROC __glewVertexAttrib1hNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1HVNVPROC __glewVertexAttrib1hvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2HNVPROC __glewVertexAttrib2hNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2HVNVPROC __glewVertexAttrib2hvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3HNVPROC __glewVertexAttrib3hNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3HVNVPROC __glewVertexAttrib3hvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4HNVPROC __glewVertexAttrib4hNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4HVNVPROC __glewVertexAttrib4hvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1HVNVPROC __glewVertexAttribs1hvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2HVNVPROC __glewVertexAttribs2hvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3HVNVPROC __glewVertexAttribs3hvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4HVNVPROC __glewVertexAttribs4hvNV; +GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTHNVPROC __glewVertexWeighthNV; +GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTHVNVPROC __glewVertexWeighthvNV; + +GLEW_FUN_EXPORT PFNGLBEGINOCCLUSIONQUERYNVPROC __glewBeginOcclusionQueryNV; +GLEW_FUN_EXPORT PFNGLDELETEOCCLUSIONQUERIESNVPROC __glewDeleteOcclusionQueriesNV; +GLEW_FUN_EXPORT PFNGLENDOCCLUSIONQUERYNVPROC __glewEndOcclusionQueryNV; +GLEW_FUN_EXPORT PFNGLGENOCCLUSIONQUERIESNVPROC __glewGenOcclusionQueriesNV; +GLEW_FUN_EXPORT PFNGLGETOCCLUSIONQUERYIVNVPROC __glewGetOcclusionQueryivNV; +GLEW_FUN_EXPORT PFNGLGETOCCLUSIONQUERYUIVNVPROC __glewGetOcclusionQueryuivNV; +GLEW_FUN_EXPORT PFNGLISOCCLUSIONQUERYNVPROC __glewIsOcclusionQueryNV; + +GLEW_FUN_EXPORT PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC __glewProgramBufferParametersIivNV; +GLEW_FUN_EXPORT PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC __glewProgramBufferParametersIuivNV; +GLEW_FUN_EXPORT PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC __glewProgramBufferParametersfvNV; + +GLEW_FUN_EXPORT PFNGLFLUSHPIXELDATARANGENVPROC __glewFlushPixelDataRangeNV; +GLEW_FUN_EXPORT PFNGLPIXELDATARANGENVPROC __glewPixelDataRangeNV; + +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERINVPROC __glewPointParameteriNV; +GLEW_FUN_EXPORT PFNGLPOINTPARAMETERIVNVPROC __glewPointParameterivNV; + +GLEW_FUN_EXPORT PFNGLPRIMITIVERESTARTINDEXNVPROC __glewPrimitiveRestartIndexNV; +GLEW_FUN_EXPORT PFNGLPRIMITIVERESTARTNVPROC __glewPrimitiveRestartNV; + +GLEW_FUN_EXPORT PFNGLCOMBINERINPUTNVPROC __glewCombinerInputNV; +GLEW_FUN_EXPORT PFNGLCOMBINEROUTPUTNVPROC __glewCombinerOutputNV; +GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERFNVPROC __glewCombinerParameterfNV; +GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERFVNVPROC __glewCombinerParameterfvNV; +GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERINVPROC __glewCombinerParameteriNV; +GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERIVNVPROC __glewCombinerParameterivNV; +GLEW_FUN_EXPORT PFNGLFINALCOMBINERINPUTNVPROC __glewFinalCombinerInputNV; +GLEW_FUN_EXPORT PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC __glewGetCombinerInputParameterfvNV; +GLEW_FUN_EXPORT PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC __glewGetCombinerInputParameterivNV; +GLEW_FUN_EXPORT PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC __glewGetCombinerOutputParameterfvNV; +GLEW_FUN_EXPORT PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC __glewGetCombinerOutputParameterivNV; +GLEW_FUN_EXPORT PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC __glewGetFinalCombinerInputParameterfvNV; +GLEW_FUN_EXPORT PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC __glewGetFinalCombinerInputParameterivNV; + +GLEW_FUN_EXPORT PFNGLCOMBINERSTAGEPARAMETERFVNVPROC __glewCombinerStageParameterfvNV; +GLEW_FUN_EXPORT PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC __glewGetCombinerStageParameterfvNV; + +GLEW_FUN_EXPORT PFNGLACTIVEVARYINGNVPROC __glewActiveVaryingNV; +GLEW_FUN_EXPORT PFNGLBEGINTRANSFORMFEEDBACKNVPROC __glewBeginTransformFeedbackNV; +GLEW_FUN_EXPORT PFNGLBINDBUFFERBASENVPROC __glewBindBufferBaseNV; +GLEW_FUN_EXPORT PFNGLBINDBUFFEROFFSETNVPROC __glewBindBufferOffsetNV; +GLEW_FUN_EXPORT PFNGLBINDBUFFERRANGENVPROC __glewBindBufferRangeNV; +GLEW_FUN_EXPORT PFNGLENDTRANSFORMFEEDBACKNVPROC __glewEndTransformFeedbackNV; +GLEW_FUN_EXPORT PFNGLGETACTIVEVARYINGNVPROC __glewGetActiveVaryingNV; +GLEW_FUN_EXPORT PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC __glewGetTransformFeedbackVaryingNV; +GLEW_FUN_EXPORT PFNGLGETVARYINGLOCATIONNVPROC __glewGetVaryingLocationNV; +GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC __glewTransformFeedbackAttribsNV; +GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC __glewTransformFeedbackVaryingsNV; + +GLEW_FUN_EXPORT PFNGLFLUSHVERTEXARRAYRANGENVPROC __glewFlushVertexArrayRangeNV; +GLEW_FUN_EXPORT PFNGLVERTEXARRAYRANGENVPROC __glewVertexArrayRangeNV; + +GLEW_FUN_EXPORT PFNGLAREPROGRAMSRESIDENTNVPROC __glewAreProgramsResidentNV; +GLEW_FUN_EXPORT PFNGLBINDPROGRAMNVPROC __glewBindProgramNV; +GLEW_FUN_EXPORT PFNGLDELETEPROGRAMSNVPROC __glewDeleteProgramsNV; +GLEW_FUN_EXPORT PFNGLEXECUTEPROGRAMNVPROC __glewExecuteProgramNV; +GLEW_FUN_EXPORT PFNGLGENPROGRAMSNVPROC __glewGenProgramsNV; +GLEW_FUN_EXPORT PFNGLGETPROGRAMPARAMETERDVNVPROC __glewGetProgramParameterdvNV; +GLEW_FUN_EXPORT PFNGLGETPROGRAMPARAMETERFVNVPROC __glewGetProgramParameterfvNV; +GLEW_FUN_EXPORT PFNGLGETPROGRAMSTRINGNVPROC __glewGetProgramStringNV; +GLEW_FUN_EXPORT PFNGLGETPROGRAMIVNVPROC __glewGetProgramivNV; +GLEW_FUN_EXPORT PFNGLGETTRACKMATRIXIVNVPROC __glewGetTrackMatrixivNV; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBPOINTERVNVPROC __glewGetVertexAttribPointervNV; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBDVNVPROC __glewGetVertexAttribdvNV; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBFVNVPROC __glewGetVertexAttribfvNV; +GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIVNVPROC __glewGetVertexAttribivNV; +GLEW_FUN_EXPORT PFNGLISPROGRAMNVPROC __glewIsProgramNV; +GLEW_FUN_EXPORT PFNGLLOADPROGRAMNVPROC __glewLoadProgramNV; +GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4DNVPROC __glewProgramParameter4dNV; +GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4DVNVPROC __glewProgramParameter4dvNV; +GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4FNVPROC __glewProgramParameter4fNV; +GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4FVNVPROC __glewProgramParameter4fvNV; +GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERS4DVNVPROC __glewProgramParameters4dvNV; +GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERS4FVNVPROC __glewProgramParameters4fvNV; +GLEW_FUN_EXPORT PFNGLREQUESTRESIDENTPROGRAMSNVPROC __glewRequestResidentProgramsNV; +GLEW_FUN_EXPORT PFNGLTRACKMATRIXNVPROC __glewTrackMatrixNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DNVPROC __glewVertexAttrib1dNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DVNVPROC __glewVertexAttrib1dvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FNVPROC __glewVertexAttrib1fNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FVNVPROC __glewVertexAttrib1fvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SNVPROC __glewVertexAttrib1sNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SVNVPROC __glewVertexAttrib1svNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DNVPROC __glewVertexAttrib2dNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DVNVPROC __glewVertexAttrib2dvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FNVPROC __glewVertexAttrib2fNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FVNVPROC __glewVertexAttrib2fvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SNVPROC __glewVertexAttrib2sNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SVNVPROC __glewVertexAttrib2svNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DNVPROC __glewVertexAttrib3dNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DVNVPROC __glewVertexAttrib3dvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FNVPROC __glewVertexAttrib3fNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FVNVPROC __glewVertexAttrib3fvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SNVPROC __glewVertexAttrib3sNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SVNVPROC __glewVertexAttrib3svNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DNVPROC __glewVertexAttrib4dNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DVNVPROC __glewVertexAttrib4dvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FNVPROC __glewVertexAttrib4fNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FVNVPROC __glewVertexAttrib4fvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SNVPROC __glewVertexAttrib4sNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SVNVPROC __glewVertexAttrib4svNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBNVPROC __glewVertexAttrib4ubNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBVNVPROC __glewVertexAttrib4ubvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPOINTERNVPROC __glewVertexAttribPointerNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1DVNVPROC __glewVertexAttribs1dvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1FVNVPROC __glewVertexAttribs1fvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1SVNVPROC __glewVertexAttribs1svNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2DVNVPROC __glewVertexAttribs2dvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2FVNVPROC __glewVertexAttribs2fvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2SVNVPROC __glewVertexAttribs2svNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3DVNVPROC __glewVertexAttribs3dvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3FVNVPROC __glewVertexAttribs3fvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3SVNVPROC __glewVertexAttribs3svNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4DVNVPROC __glewVertexAttribs4dvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4FVNVPROC __glewVertexAttribs4fvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4SVNVPROC __glewVertexAttribs4svNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4UBVNVPROC __glewVertexAttribs4ubvNV; + +GLEW_FUN_EXPORT PFNGLCLEARDEPTHFOESPROC __glewClearDepthfOES; +GLEW_FUN_EXPORT PFNGLCLIPPLANEFOESPROC __glewClipPlanefOES; +GLEW_FUN_EXPORT PFNGLDEPTHRANGEFOESPROC __glewDepthRangefOES; +GLEW_FUN_EXPORT PFNGLFRUSTUMFOESPROC __glewFrustumfOES; +GLEW_FUN_EXPORT PFNGLGETCLIPPLANEFOESPROC __glewGetClipPlanefOES; +GLEW_FUN_EXPORT PFNGLORTHOFOESPROC __glewOrthofOES; + +GLEW_FUN_EXPORT PFNGLDETAILTEXFUNCSGISPROC __glewDetailTexFuncSGIS; +GLEW_FUN_EXPORT PFNGLGETDETAILTEXFUNCSGISPROC __glewGetDetailTexFuncSGIS; + +GLEW_FUN_EXPORT PFNGLFOGFUNCSGISPROC __glewFogFuncSGIS; +GLEW_FUN_EXPORT PFNGLGETFOGFUNCSGISPROC __glewGetFogFuncSGIS; + +GLEW_FUN_EXPORT PFNGLSAMPLEMASKSGISPROC __glewSampleMaskSGIS; +GLEW_FUN_EXPORT PFNGLSAMPLEPATTERNSGISPROC __glewSamplePatternSGIS; + +GLEW_FUN_EXPORT PFNGLGETSHARPENTEXFUNCSGISPROC __glewGetSharpenTexFuncSGIS; +GLEW_FUN_EXPORT PFNGLSHARPENTEXFUNCSGISPROC __glewSharpenTexFuncSGIS; + +GLEW_FUN_EXPORT PFNGLTEXIMAGE4DSGISPROC __glewTexImage4DSGIS; +GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE4DSGISPROC __glewTexSubImage4DSGIS; + +GLEW_FUN_EXPORT PFNGLGETTEXFILTERFUNCSGISPROC __glewGetTexFilterFuncSGIS; +GLEW_FUN_EXPORT PFNGLTEXFILTERFUNCSGISPROC __glewTexFilterFuncSGIS; + +GLEW_FUN_EXPORT PFNGLASYNCMARKERSGIXPROC __glewAsyncMarkerSGIX; +GLEW_FUN_EXPORT PFNGLDELETEASYNCMARKERSSGIXPROC __glewDeleteAsyncMarkersSGIX; +GLEW_FUN_EXPORT PFNGLFINISHASYNCSGIXPROC __glewFinishAsyncSGIX; +GLEW_FUN_EXPORT PFNGLGENASYNCMARKERSSGIXPROC __glewGenAsyncMarkersSGIX; +GLEW_FUN_EXPORT PFNGLISASYNCMARKERSGIXPROC __glewIsAsyncMarkerSGIX; +GLEW_FUN_EXPORT PFNGLPOLLASYNCSGIXPROC __glewPollAsyncSGIX; + +GLEW_FUN_EXPORT PFNGLFLUSHRASTERSGIXPROC __glewFlushRasterSGIX; + +GLEW_FUN_EXPORT PFNGLTEXTUREFOGSGIXPROC __glewTextureFogSGIX; + +GLEW_FUN_EXPORT PFNGLFRAGMENTCOLORMATERIALSGIXPROC __glewFragmentColorMaterialSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFSGIXPROC __glewFragmentLightModelfSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFVSGIXPROC __glewFragmentLightModelfvSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELISGIXPROC __glewFragmentLightModeliSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIVSGIXPROC __glewFragmentLightModelivSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFSGIXPROC __glewFragmentLightfSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFVSGIXPROC __glewFragmentLightfvSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTISGIXPROC __glewFragmentLightiSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIVSGIXPROC __glewFragmentLightivSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFSGIXPROC __glewFragmentMaterialfSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFVSGIXPROC __glewFragmentMaterialfvSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALISGIXPROC __glewFragmentMaterialiSGIX; +GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIVSGIXPROC __glewFragmentMaterialivSGIX; +GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTFVSGIXPROC __glewGetFragmentLightfvSGIX; +GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTIVSGIXPROC __glewGetFragmentLightivSGIX; +GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALFVSGIXPROC __glewGetFragmentMaterialfvSGIX; +GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALIVSGIXPROC __glewGetFragmentMaterialivSGIX; + +GLEW_FUN_EXPORT PFNGLFRAMEZOOMSGIXPROC __glewFrameZoomSGIX; + +GLEW_FUN_EXPORT PFNGLPIXELTEXGENSGIXPROC __glewPixelTexGenSGIX; + +GLEW_FUN_EXPORT PFNGLREFERENCEPLANESGIXPROC __glewReferencePlaneSGIX; + +GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERFSGIXPROC __glewSpriteParameterfSGIX; +GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERFVSGIXPROC __glewSpriteParameterfvSGIX; +GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERISGIXPROC __glewSpriteParameteriSGIX; +GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERIVSGIXPROC __glewSpriteParameterivSGIX; + +GLEW_FUN_EXPORT PFNGLTAGSAMPLEBUFFERSGIXPROC __glewTagSampleBufferSGIX; + +GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERFVSGIPROC __glewColorTableParameterfvSGI; +GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERIVSGIPROC __glewColorTableParameterivSGI; +GLEW_FUN_EXPORT PFNGLCOLORTABLESGIPROC __glewColorTableSGI; +GLEW_FUN_EXPORT PFNGLCOPYCOLORTABLESGIPROC __glewCopyColorTableSGI; +GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVSGIPROC __glewGetColorTableParameterfvSGI; +GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVSGIPROC __glewGetColorTableParameterivSGI; +GLEW_FUN_EXPORT PFNGLGETCOLORTABLESGIPROC __glewGetColorTableSGI; + +GLEW_FUN_EXPORT PFNGLFINISHTEXTURESUNXPROC __glewFinishTextureSUNX; + +GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORBSUNPROC __glewGlobalAlphaFactorbSUN; +GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORDSUNPROC __glewGlobalAlphaFactordSUN; +GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORFSUNPROC __glewGlobalAlphaFactorfSUN; +GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORISUNPROC __glewGlobalAlphaFactoriSUN; +GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORSSUNPROC __glewGlobalAlphaFactorsSUN; +GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUBSUNPROC __glewGlobalAlphaFactorubSUN; +GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUISUNPROC __glewGlobalAlphaFactoruiSUN; +GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUSSUNPROC __glewGlobalAlphaFactorusSUN; + +GLEW_FUN_EXPORT PFNGLREADVIDEOPIXELSSUNPROC __glewReadVideoPixelsSUN; + +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEPOINTERSUNPROC __glewReplacementCodePointerSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUBSUNPROC __glewReplacementCodeubSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUBVSUNPROC __glewReplacementCodeubvSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUISUNPROC __glewReplacementCodeuiSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVSUNPROC __glewReplacementCodeuivSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUSSUNPROC __glewReplacementCodeusSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUSVSUNPROC __glewReplacementCodeusvSUN; + +GLEW_FUN_EXPORT PFNGLCOLOR3FVERTEX3FSUNPROC __glewColor3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLCOLOR3FVERTEX3FVSUNPROC __glewColor3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewColor4fNormal3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewColor4fNormal3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX2FSUNPROC __glewColor4ubVertex2fSUN; +GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX2FVSUNPROC __glewColor4ubVertex2fvSUN; +GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX3FSUNPROC __glewColor4ubVertex3fSUN; +GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX3FVSUNPROC __glewColor4ubVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLNORMAL3FVERTEX3FSUNPROC __glewNormal3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLNORMAL3FVERTEX3FVSUNPROC __glewNormal3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC __glewReplacementCodeuiColor3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC __glewReplacementCodeuiColor4ubVertex3fSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC __glewReplacementCodeuiColor4ubVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiNormal3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiNormal3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC __glewReplacementCodeuiVertex3fSUN; +GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC __glewReplacementCodeuiVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC __glewTexCoord2fColor3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC __glewTexCoord2fColor3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC __glewTexCoord2fColor4ubVertex3fSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC __glewTexCoord2fColor4ubVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fNormal3fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fNormal3fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD2FVERTEX3FSUNPROC __glewTexCoord2fVertex3fSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD2FVERTEX3FVSUNPROC __glewTexCoord2fVertex3fvSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fvSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD4FVERTEX4FSUNPROC __glewTexCoord4fVertex4fSUN; +GLEW_FUN_EXPORT PFNGLTEXCOORD4FVERTEX4FVSUNPROC __glewTexCoord4fVertex4fvSUN; + +GLEW_FUN_EXPORT PFNGLADDSWAPHINTRECTWINPROC __glewAddSwapHintRectWIN; + +#if defined(GLEW_MX) && !defined(_WIN32) +struct GLEWContextStruct +{ +#endif /* GLEW_MX */ + +GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_1; +GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2; +GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_3; +GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_4; +GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_5; +GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_2_0; +GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_2_1; +GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_multisample; +GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_tbuffer; +GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_texture_compression_FXT1; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_client_storage; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_element_array; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_fence; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_float_pixels; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_flush_buffer_range; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_pixel_buffer; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_specular_vector; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_texture_range; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_transform_hint; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_vertex_array_object; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_vertex_array_range; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_ycbcr_422; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_color_buffer_float; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_depth_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_buffers; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_program; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_program_shadow; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_shader; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_half_float_pixel; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_imaging; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_matrix_palette; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multisample; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multitexture; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_occlusion_query; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_pixel_buffer_object; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_point_parameters; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_point_sprite; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_objects; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_100; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shadow; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shadow_ambient; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_border_clamp; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_compression; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_cube_map; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_add; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_combine; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_crossbar; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_dot3; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_float; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_mirrored_repeat; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_non_power_of_two; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_rectangle; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_transpose_matrix; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_blend; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_buffer_object; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_program; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_shader; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_window_pos; +GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_point_sprites; +GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_texture_env_combine3; +GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_texture_env_route; +GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_vertex_shader_output_point_size; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_draw_buffers; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_element_array; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_envmap_bumpmap; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_fragment_shader; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_map_object_buffer; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_pn_triangles; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_separate_stencil; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_shader_texture_lod; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_text_fragment_shader; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_compression_3dc; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_env_combine3; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_float; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_mirror_once; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_array_object; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_attrib_array_object; +GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_streams; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_422_pixels; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_Cg_shader; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_abgr; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_bgra; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_bindable_uniform; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_color; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_equation_separate; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_func_separate; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_logic_op; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_minmax; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_subtract; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_clip_volume_hint; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_cmyka; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_color_subtable; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_compiled_vertex_array; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_convolution; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_coordinate_frame; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_copy_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_cull_vertex; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_depth_bounds_test; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_buffers2; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_instanced; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_range_elements; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_fog_coord; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_fragment_lighting; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_blit; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_multisample; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_object; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_sRGB; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_geometry_shader4; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_gpu_program_parameters; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_gpu_shader4; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_histogram; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_array_formats; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_func; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_material; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_light_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_misc_attribute; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multi_draw_arrays; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multisample; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_depth_stencil; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_float; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_pixels; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_paletted_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_buffer_object; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_transform; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_transform_color_table; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_point_parameters; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_polygon_offset; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_rescale_normal; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_scene_marker; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_secondary_color; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_separate_specular_color; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shadow_funcs; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shared_texture_palette; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_clear_tag; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_two_side; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_wrap; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_subtexture; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture3D; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_array; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_buffer_object; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_dxt1; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_latc; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_rgtc; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_s3tc; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_cube_map; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_edge_clamp; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_add; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_combine; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_dot3; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_filter_anisotropic; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_integer; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_lod_bias; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_mirror_clamp; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_object; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_perturb_normal; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_rectangle; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_sRGB; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_shared_exponent; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_timer_query; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_array; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_shader; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_weighting; +GLEW_VAR_EXPORT GLboolean __GLEW_GREMEDY_frame_terminator; +GLEW_VAR_EXPORT GLboolean __GLEW_GREMEDY_string_marker; +GLEW_VAR_EXPORT GLboolean __GLEW_HP_convolution_border_modes; +GLEW_VAR_EXPORT GLboolean __GLEW_HP_image_transform; +GLEW_VAR_EXPORT GLboolean __GLEW_HP_occlusion_test; +GLEW_VAR_EXPORT GLboolean __GLEW_HP_texture_lighting; +GLEW_VAR_EXPORT GLboolean __GLEW_IBM_cull_vertex; +GLEW_VAR_EXPORT GLboolean __GLEW_IBM_multimode_draw_arrays; +GLEW_VAR_EXPORT GLboolean __GLEW_IBM_rasterpos_clip; +GLEW_VAR_EXPORT GLboolean __GLEW_IBM_static_data; +GLEW_VAR_EXPORT GLboolean __GLEW_IBM_texture_mirrored_repeat; +GLEW_VAR_EXPORT GLboolean __GLEW_IBM_vertex_array_lists; +GLEW_VAR_EXPORT GLboolean __GLEW_INGR_color_clamp; +GLEW_VAR_EXPORT GLboolean __GLEW_INGR_interlace_read; +GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_parallel_arrays; +GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_texture_scissor; +GLEW_VAR_EXPORT GLboolean __GLEW_KTX_buffer_region; +GLEW_VAR_EXPORT GLboolean __GLEW_MESAX_texture_stack; +GLEW_VAR_EXPORT GLboolean __GLEW_MESA_pack_invert; +GLEW_VAR_EXPORT GLboolean __GLEW_MESA_resize_buffers; +GLEW_VAR_EXPORT GLboolean __GLEW_MESA_window_pos; +GLEW_VAR_EXPORT GLboolean __GLEW_MESA_ycbcr_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_square; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_copy_depth_to_color; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_buffer_float; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_clamp; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_range_unclamped; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_evaluators; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_fence; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_float_buffer; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_fog_distance; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program2; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program4; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program_option; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_framebuffer_multisample_coverage; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_geometry_program4; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_geometry_shader4; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program4; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_half_float; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_light_max_exponent; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_multisample_filter_hint; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_occlusion_query; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_packed_depth_stencil; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_parameter_buffer_object; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_pixel_data_range; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_point_sprite; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_primitive_restart; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_register_combiners; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_register_combiners2; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_emboss; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_reflection; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_compression_vtc; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_env_combine4; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_expand_normal; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_rectangle; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader2; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader3; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_transform_feedback; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_array_range; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_array_range2; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program1_1; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program2; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program2_option; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program3; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program4; +GLEW_VAR_EXPORT GLboolean __GLEW_OES_byte_coordinates; +GLEW_VAR_EXPORT GLboolean __GLEW_OES_compressed_paletted_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_OES_read_format; +GLEW_VAR_EXPORT GLboolean __GLEW_OES_single_precision; +GLEW_VAR_EXPORT GLboolean __GLEW_OML_interlace; +GLEW_VAR_EXPORT GLboolean __GLEW_OML_resample; +GLEW_VAR_EXPORT GLboolean __GLEW_OML_subsample; +GLEW_VAR_EXPORT GLboolean __GLEW_PGI_misc_hints; +GLEW_VAR_EXPORT GLboolean __GLEW_PGI_vertex_hints; +GLEW_VAR_EXPORT GLboolean __GLEW_REND_screen_coordinates; +GLEW_VAR_EXPORT GLboolean __GLEW_S3_s3tc; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_color_range; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_detail_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_fog_function; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_generate_mipmap; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_multisample; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_pixel_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_sharpen_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture4D; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_border_clamp; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_edge_clamp; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_filter4; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_lod; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_select; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async_histogram; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async_pixel; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_blend_alpha_minmax; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_clipmap; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_depth_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_flush_raster; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_offset; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fragment_specular_lighting; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_framezoom; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_interlace; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_ir_instrument1; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_list_priority; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_pixel_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_pixel_texture_bits; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_reference_plane; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_resample; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_shadow; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_shadow_ambient; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_sprite; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_tag_sample_buffer; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_add_env; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_coordinate_clamp; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_lod_bias; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_multi_buffer; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_range; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_scale_bias; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_vertex_preclip; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_vertex_preclip_hint; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_ycrcb; +GLEW_VAR_EXPORT GLboolean __GLEW_SGI_color_matrix; +GLEW_VAR_EXPORT GLboolean __GLEW_SGI_color_table; +GLEW_VAR_EXPORT GLboolean __GLEW_SGI_texture_color_table; +GLEW_VAR_EXPORT GLboolean __GLEW_SUNX_constant_data; +GLEW_VAR_EXPORT GLboolean __GLEW_SUN_convolution_border_modes; +GLEW_VAR_EXPORT GLboolean __GLEW_SUN_global_alpha; +GLEW_VAR_EXPORT GLboolean __GLEW_SUN_mesh_array; +GLEW_VAR_EXPORT GLboolean __GLEW_SUN_read_video_pixels; +GLEW_VAR_EXPORT GLboolean __GLEW_SUN_slice_accum; +GLEW_VAR_EXPORT GLboolean __GLEW_SUN_triangle_list; +GLEW_VAR_EXPORT GLboolean __GLEW_SUN_vertex; +GLEW_VAR_EXPORT GLboolean __GLEW_WIN_phong_shading; +GLEW_VAR_EXPORT GLboolean __GLEW_WIN_specular_fog; +GLEW_VAR_EXPORT GLboolean __GLEW_WIN_swap_hint; + +#ifdef GLEW_MX +}; /* GLEWContextStruct */ +#endif /* GLEW_MX */ + +/* ------------------------------------------------------------------------- */ + +/* error codes */ +#define GLEW_OK 0 +#define GLEW_NO_ERROR 0 +#define GLEW_ERROR_NO_GL_VERSION 1 /* missing GL version */ +#define GLEW_ERROR_GL_VERSION_10_ONLY 2 /* GL 1.1 and up are not supported */ +#define GLEW_ERROR_GLX_VERSION_11_ONLY 3 /* GLX 1.2 and up are not supported */ + +/* string codes */ +#define GLEW_VERSION 1 +#define GLEW_VERSION_MAJOR 2 +#define GLEW_VERSION_MINOR 3 +#define GLEW_VERSION_MICRO 4 + +/* API */ +#ifdef GLEW_MX + +typedef struct GLEWContextStruct GLEWContext; +GLEWAPI GLenum glewContextInit (GLEWContext* ctx); +GLEWAPI GLboolean glewContextIsSupported (GLEWContext* ctx, const char* name); + +#define glewInit() glewContextInit(glewGetContext()) +#define glewIsSupported(x) glewContextIsSupported(glewGetContext(), x) +#define glewIsExtensionSupported(x) glewIsSupported(x) + +#define GLEW_GET_VAR(x) (*(const GLboolean*)&(glewGetContext()->x)) +#ifdef _WIN32 +# define GLEW_GET_FUN(x) glewGetContext()->x +#else +# define GLEW_GET_FUN(x) x +#endif + +#else /* GLEW_MX */ + +GLEWAPI GLenum glewInit (); +GLEWAPI GLboolean glewIsSupported (const char* name); +#define glewIsExtensionSupported(x) glewIsSupported(x) + +#define GLEW_GET_VAR(x) (*(const GLboolean*)&x) +#define GLEW_GET_FUN(x) x + +#endif /* GLEW_MX */ + +GLEWAPI GLboolean glewExperimental; +GLEWAPI GLboolean glewGetExtension (const char* name); +GLEWAPI const GLubyte* glewGetErrorString (GLenum error); +GLEWAPI const GLubyte* glewGetString (GLenum name); + +#ifdef __cplusplus +} +#endif + +#ifdef GLEW_APIENTRY_DEFINED +#undef GLEW_APIENTRY_DEFINED +#undef APIENTRY +#undef GLAPIENTRY +#endif + +#ifdef GLEW_CALLBACK_DEFINED +#undef GLEW_CALLBACK_DEFINED +#undef CALLBACK +#endif + +#ifdef GLEW_WINGDIAPI_DEFINED +#undef GLEW_WINGDIAPI_DEFINED +#undef WINGDIAPI +#endif + +#undef GLAPI +/* #undef GLEWAPI */ + +#endif /* __glew_h__ */ diff --git a/3rdparty/libprojectm/glxew.h b/3rdparty/libprojectm/glxew.h new file mode 100644 index 000000000..4b6bc9943 --- /dev/null +++ b/3rdparty/libprojectm/glxew.h @@ -0,0 +1,1267 @@ +/* +** The OpenGL Extension Wrangler Library +** Copyright (C) 2002-2008, Milan Ikits +** Copyright (C) 2002-2008, Marcelo E. Magallon +** Copyright (C) 2002, Lev Povalahev +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are met: +** +** * Redistributions of source code must retain the above copyright notice, +** this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright notice, +** this list of conditions and the following disclaimer in the documentation +** and/or other materials provided with the distribution. +** * The name of the author may be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +** THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + * Mesa 3-D graphics library + * Version: 7.0 + * + * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* +** Copyright (c) 2007 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +#ifndef __glxew_h__ +#define __glxew_h__ +#define __GLXEW_H__ + +#ifdef __glxext_h_ +#error glxext.h included before glxew.h +#endif +#ifdef GLX_H +#error glx.h included before glxew.h +#endif + +#define __glxext_h_ +#define __GLX_glx_h__ +#define GLX_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ---------------------------- GLX_VERSION_1_0 --------------------------- */ + +#ifndef GLX_VERSION_1_0 +#define GLX_VERSION_1_0 1 + +#define GLX_USE_GL 1 +#define GLX_BUFFER_SIZE 2 +#define GLX_LEVEL 3 +#define GLX_RGBA 4 +#define GLX_DOUBLEBUFFER 5 +#define GLX_STEREO 6 +#define GLX_AUX_BUFFERS 7 +#define GLX_RED_SIZE 8 +#define GLX_GREEN_SIZE 9 +#define GLX_BLUE_SIZE 10 +#define GLX_ALPHA_SIZE 11 +#define GLX_DEPTH_SIZE 12 +#define GLX_STENCIL_SIZE 13 +#define GLX_ACCUM_RED_SIZE 14 +#define GLX_ACCUM_GREEN_SIZE 15 +#define GLX_ACCUM_BLUE_SIZE 16 +#define GLX_ACCUM_ALPHA_SIZE 17 +#define GLX_BAD_SCREEN 1 +#define GLX_BAD_ATTRIBUTE 2 +#define GLX_NO_EXTENSION 3 +#define GLX_BAD_VISUAL 4 +#define GLX_BAD_CONTEXT 5 +#define GLX_BAD_VALUE 6 +#define GLX_BAD_ENUM 7 + +typedef XID GLXDrawable; +typedef XID GLXPixmap; +#ifdef __sun +typedef struct __glXContextRec *GLXContext; +#else +typedef struct __GLXcontextRec *GLXContext; +#endif + +extern Bool glXQueryExtension (Display *dpy, int *errorBase, int *eventBase); +extern Bool glXQueryVersion (Display *dpy, int *major, int *minor); +extern int glXGetConfig (Display *dpy, XVisualInfo *vis, int attrib, int *value); +extern XVisualInfo* glXChooseVisual (Display *dpy, int screen, int *attribList); +extern GLXPixmap glXCreateGLXPixmap (Display *dpy, XVisualInfo *vis, Pixmap pixmap); +extern void glXDestroyGLXPixmap (Display *dpy, GLXPixmap pix); +extern GLXContext glXCreateContext (Display *dpy, XVisualInfo *vis, GLXContext shareList, Bool direct); +extern void glXDestroyContext (Display *dpy, GLXContext ctx); +extern Bool glXIsDirect (Display *dpy, GLXContext ctx); +extern void glXCopyContext (Display *dpy, GLXContext src, GLXContext dst, GLulong mask); +extern Bool glXMakeCurrent (Display *dpy, GLXDrawable drawable, GLXContext ctx); +extern GLXContext glXGetCurrentContext (void); +extern GLXDrawable glXGetCurrentDrawable (void); +extern void glXWaitGL (void); +extern void glXWaitX (void); +extern void glXSwapBuffers (Display *dpy, GLXDrawable drawable); +extern void glXUseXFont (Font font, int first, int count, int listBase); + +#define GLXEW_VERSION_1_0 GLXEW_GET_VAR(__GLXEW_VERSION_1_0) + +#endif /* GLX_VERSION_1_0 */ + +/* ---------------------------- GLX_VERSION_1_1 --------------------------- */ + +#ifndef GLX_VERSION_1_1 +#define GLX_VERSION_1_1 + +#define GLX_VENDOR 0x1 +#define GLX_VERSION 0x2 +#define GLX_EXTENSIONS 0x3 + +extern const char* glXQueryExtensionsString (Display *dpy, int screen); +extern const char* glXGetClientString (Display *dpy, int name); +extern const char* glXQueryServerString (Display *dpy, int screen, int name); + +#define GLXEW_VERSION_1_1 GLXEW_GET_VAR(__GLXEW_VERSION_1_1) + +#endif /* GLX_VERSION_1_1 */ + +/* ---------------------------- GLX_VERSION_1_2 ---------------------------- */ + +#ifndef GLX_VERSION_1_2 +#define GLX_VERSION_1_2 1 + +typedef Display* ( * PFNGLXGETCURRENTDISPLAYPROC) (void); + +#define glXGetCurrentDisplay GLXEW_GET_FUN(__glewXGetCurrentDisplay) + +#define GLXEW_VERSION_1_2 GLXEW_GET_VAR(__GLXEW_VERSION_1_2) + +#endif /* GLX_VERSION_1_2 */ + +/* ---------------------------- GLX_VERSION_1_3 ---------------------------- */ + +#ifndef GLX_VERSION_1_3 +#define GLX_VERSION_1_3 1 + +#define GLX_RGBA_BIT 0x00000001 +#define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001 +#define GLX_WINDOW_BIT 0x00000001 +#define GLX_COLOR_INDEX_BIT 0x00000002 +#define GLX_PIXMAP_BIT 0x00000002 +#define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002 +#define GLX_BACK_LEFT_BUFFER_BIT 0x00000004 +#define GLX_PBUFFER_BIT 0x00000004 +#define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008 +#define GLX_AUX_BUFFERS_BIT 0x00000010 +#define GLX_CONFIG_CAVEAT 0x20 +#define GLX_DEPTH_BUFFER_BIT 0x00000020 +#define GLX_X_VISUAL_TYPE 0x22 +#define GLX_TRANSPARENT_TYPE 0x23 +#define GLX_TRANSPARENT_INDEX_VALUE 0x24 +#define GLX_TRANSPARENT_RED_VALUE 0x25 +#define GLX_TRANSPARENT_GREEN_VALUE 0x26 +#define GLX_TRANSPARENT_BLUE_VALUE 0x27 +#define GLX_TRANSPARENT_ALPHA_VALUE 0x28 +#define GLX_STENCIL_BUFFER_BIT 0x00000040 +#define GLX_ACCUM_BUFFER_BIT 0x00000080 +#define GLX_NONE 0x8000 +#define GLX_SLOW_CONFIG 0x8001 +#define GLX_TRUE_COLOR 0x8002 +#define GLX_DIRECT_COLOR 0x8003 +#define GLX_PSEUDO_COLOR 0x8004 +#define GLX_STATIC_COLOR 0x8005 +#define GLX_GRAY_SCALE 0x8006 +#define GLX_STATIC_GRAY 0x8007 +#define GLX_TRANSPARENT_RGB 0x8008 +#define GLX_TRANSPARENT_INDEX 0x8009 +#define GLX_VISUAL_ID 0x800B +#define GLX_SCREEN 0x800C +#define GLX_NON_CONFORMANT_CONFIG 0x800D +#define GLX_DRAWABLE_TYPE 0x8010 +#define GLX_RENDER_TYPE 0x8011 +#define GLX_X_RENDERABLE 0x8012 +#define GLX_FBCONFIG_ID 0x8013 +#define GLX_RGBA_TYPE 0x8014 +#define GLX_COLOR_INDEX_TYPE 0x8015 +#define GLX_MAX_PBUFFER_WIDTH 0x8016 +#define GLX_MAX_PBUFFER_HEIGHT 0x8017 +#define GLX_MAX_PBUFFER_PIXELS 0x8018 +#define GLX_PRESERVED_CONTENTS 0x801B +#define GLX_LARGEST_PBUFFER 0x801C +#define GLX_WIDTH 0x801D +#define GLX_HEIGHT 0x801E +#define GLX_EVENT_MASK 0x801F +#define GLX_DAMAGED 0x8020 +#define GLX_SAVED 0x8021 +#define GLX_WINDOW 0x8022 +#define GLX_PBUFFER 0x8023 +#define GLX_PBUFFER_HEIGHT 0x8040 +#define GLX_PBUFFER_WIDTH 0x8041 +#define GLX_PBUFFER_CLOBBER_MASK 0x08000000 +#define GLX_DONT_CARE 0xFFFFFFFF + +typedef XID GLXFBConfigID; +typedef XID GLXWindow; +typedef XID GLXPbuffer; +typedef struct __GLXFBConfigRec *GLXFBConfig; + +typedef struct { + int event_type; + int draw_type; + unsigned long serial; + Bool send_event; + Display *display; + GLXDrawable drawable; + unsigned int buffer_mask; + unsigned int aux_buffer; + int x, y; + int width, height; + int count; +} GLXPbufferClobberEvent; +typedef union __GLXEvent { + GLXPbufferClobberEvent glxpbufferclobber; + long pad[24]; +} GLXEvent; + +typedef GLXFBConfig* ( * PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements); +typedef GLXContext ( * PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); +typedef GLXPbuffer ( * PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list); +typedef GLXPixmap ( * PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list); +typedef GLXWindow ( * PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list); +typedef void ( * PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf); +typedef void ( * PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap); +typedef void ( * PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win); +typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLEPROC) (void); +typedef int ( * PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value); +typedef GLXFBConfig* ( * PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements); +typedef void ( * PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask); +typedef XVisualInfo* ( * PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config); +typedef Bool ( * PFNGLXMAKECONTEXTCURRENTPROC) (Display *display, GLXDrawable draw, GLXDrawable read, GLXContext ctx); +typedef int ( * PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value); +typedef void ( * PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value); +typedef void ( * PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask); + +#define glXChooseFBConfig GLXEW_GET_FUN(__glewXChooseFBConfig) +#define glXCreateNewContext GLXEW_GET_FUN(__glewXCreateNewContext) +#define glXCreatePbuffer GLXEW_GET_FUN(__glewXCreatePbuffer) +#define glXCreatePixmap GLXEW_GET_FUN(__glewXCreatePixmap) +#define glXCreateWindow GLXEW_GET_FUN(__glewXCreateWindow) +#define glXDestroyPbuffer GLXEW_GET_FUN(__glewXDestroyPbuffer) +#define glXDestroyPixmap GLXEW_GET_FUN(__glewXDestroyPixmap) +#define glXDestroyWindow GLXEW_GET_FUN(__glewXDestroyWindow) +#define glXGetCurrentReadDrawable GLXEW_GET_FUN(__glewXGetCurrentReadDrawable) +#define glXGetFBConfigAttrib GLXEW_GET_FUN(__glewXGetFBConfigAttrib) +#define glXGetFBConfigs GLXEW_GET_FUN(__glewXGetFBConfigs) +#define glXGetSelectedEvent GLXEW_GET_FUN(__glewXGetSelectedEvent) +#define glXGetVisualFromFBConfig GLXEW_GET_FUN(__glewXGetVisualFromFBConfig) +#define glXMakeContextCurrent GLXEW_GET_FUN(__glewXMakeContextCurrent) +#define glXQueryContext GLXEW_GET_FUN(__glewXQueryContext) +#define glXQueryDrawable GLXEW_GET_FUN(__glewXQueryDrawable) +#define glXSelectEvent GLXEW_GET_FUN(__glewXSelectEvent) + +#define GLXEW_VERSION_1_3 GLXEW_GET_VAR(__GLXEW_VERSION_1_3) + +#endif /* GLX_VERSION_1_3 */ + +/* ---------------------------- GLX_VERSION_1_4 ---------------------------- */ + +#ifndef GLX_VERSION_1_4 +#define GLX_VERSION_1_4 1 + +#define GLX_SAMPLE_BUFFERS 100000 +#define GLX_SAMPLES 100001 + +extern void ( * glXGetProcAddress (const GLubyte *procName)) (void); + +#define GLXEW_VERSION_1_4 GLXEW_GET_VAR(__GLXEW_VERSION_1_4) + +#endif /* GLX_VERSION_1_4 */ + +/* -------------------------- GLX_3DFX_multisample ------------------------- */ + +#ifndef GLX_3DFX_multisample +#define GLX_3DFX_multisample 1 + +#define GLX_SAMPLE_BUFFERS_3DFX 0x8050 +#define GLX_SAMPLES_3DFX 0x8051 + +#define GLXEW_3DFX_multisample GLXEW_GET_VAR(__GLXEW_3DFX_multisample) + +#endif /* GLX_3DFX_multisample */ + +/* ------------------------- GLX_ARB_fbconfig_float ------------------------ */ + +#ifndef GLX_ARB_fbconfig_float +#define GLX_ARB_fbconfig_float 1 + +#define GLX_RGBA_FLOAT_BIT 0x00000004 +#define GLX_RGBA_FLOAT_TYPE 0x20B9 + +#define GLXEW_ARB_fbconfig_float GLXEW_GET_VAR(__GLXEW_ARB_fbconfig_float) + +#endif /* GLX_ARB_fbconfig_float */ + +/* ------------------------ GLX_ARB_get_proc_address ----------------------- */ + +#ifndef GLX_ARB_get_proc_address +#define GLX_ARB_get_proc_address 1 + +extern void ( * glXGetProcAddressARB (const GLubyte *procName)) (void); + +#define GLXEW_ARB_get_proc_address GLXEW_GET_VAR(__GLXEW_ARB_get_proc_address) + +#endif /* GLX_ARB_get_proc_address */ + +/* -------------------------- GLX_ARB_multisample -------------------------- */ + +#ifndef GLX_ARB_multisample +#define GLX_ARB_multisample 1 + +#define GLX_SAMPLE_BUFFERS_ARB 100000 +#define GLX_SAMPLES_ARB 100001 + +#define GLXEW_ARB_multisample GLXEW_GET_VAR(__GLXEW_ARB_multisample) + +#endif /* GLX_ARB_multisample */ + +/* ----------------------- GLX_ATI_pixel_format_float ---------------------- */ + +#ifndef GLX_ATI_pixel_format_float +#define GLX_ATI_pixel_format_float 1 + +#define GLX_RGBA_FLOAT_ATI_BIT 0x00000100 + +#define GLXEW_ATI_pixel_format_float GLXEW_GET_VAR(__GLXEW_ATI_pixel_format_float) + +#endif /* GLX_ATI_pixel_format_float */ + +/* ------------------------- GLX_ATI_render_texture ------------------------ */ + +#ifndef GLX_ATI_render_texture +#define GLX_ATI_render_texture 1 + +#define GLX_BIND_TO_TEXTURE_RGB_ATI 0x9800 +#define GLX_BIND_TO_TEXTURE_RGBA_ATI 0x9801 +#define GLX_TEXTURE_FORMAT_ATI 0x9802 +#define GLX_TEXTURE_TARGET_ATI 0x9803 +#define GLX_MIPMAP_TEXTURE_ATI 0x9804 +#define GLX_TEXTURE_RGB_ATI 0x9805 +#define GLX_TEXTURE_RGBA_ATI 0x9806 +#define GLX_NO_TEXTURE_ATI 0x9807 +#define GLX_TEXTURE_CUBE_MAP_ATI 0x9808 +#define GLX_TEXTURE_1D_ATI 0x9809 +#define GLX_TEXTURE_2D_ATI 0x980A +#define GLX_MIPMAP_LEVEL_ATI 0x980B +#define GLX_CUBE_MAP_FACE_ATI 0x980C +#define GLX_TEXTURE_CUBE_MAP_POSITIVE_X_ATI 0x980D +#define GLX_TEXTURE_CUBE_MAP_NEGATIVE_X_ATI 0x980E +#define GLX_TEXTURE_CUBE_MAP_POSITIVE_Y_ATI 0x980F +#define GLX_TEXTURE_CUBE_MAP_NEGATIVE_Y_ATI 0x9810 +#define GLX_TEXTURE_CUBE_MAP_POSITIVE_Z_ATI 0x9811 +#define GLX_TEXTURE_CUBE_MAP_NEGATIVE_Z_ATI 0x9812 +#define GLX_FRONT_LEFT_ATI 0x9813 +#define GLX_FRONT_RIGHT_ATI 0x9814 +#define GLX_BACK_LEFT_ATI 0x9815 +#define GLX_BACK_RIGHT_ATI 0x9816 +#define GLX_AUX0_ATI 0x9817 +#define GLX_AUX1_ATI 0x9818 +#define GLX_AUX2_ATI 0x9819 +#define GLX_AUX3_ATI 0x981A +#define GLX_AUX4_ATI 0x981B +#define GLX_AUX5_ATI 0x981C +#define GLX_AUX6_ATI 0x981D +#define GLX_AUX7_ATI 0x981E +#define GLX_AUX8_ATI 0x981F +#define GLX_AUX9_ATI 0x9820 +#define GLX_BIND_TO_TEXTURE_LUMINANCE_ATI 0x9821 +#define GLX_BIND_TO_TEXTURE_INTENSITY_ATI 0x9822 + +typedef void ( * PFNGLXBINDTEXIMAGEATIPROC) (Display *dpy, GLXPbuffer pbuf, int buffer); +typedef void ( * PFNGLXDRAWABLEATTRIBATIPROC) (Display *dpy, GLXDrawable draw, const int *attrib_list); +typedef void ( * PFNGLXRELEASETEXIMAGEATIPROC) (Display *dpy, GLXPbuffer pbuf, int buffer); + +#define glXBindTexImageATI GLXEW_GET_FUN(__glewXBindTexImageATI) +#define glXDrawableAttribATI GLXEW_GET_FUN(__glewXDrawableAttribATI) +#define glXReleaseTexImageATI GLXEW_GET_FUN(__glewXReleaseTexImageATI) + +#define GLXEW_ATI_render_texture GLXEW_GET_VAR(__GLXEW_ATI_render_texture) + +#endif /* GLX_ATI_render_texture */ + +/* --------------------- GLX_EXT_fbconfig_packed_float --------------------- */ + +#ifndef GLX_EXT_fbconfig_packed_float +#define GLX_EXT_fbconfig_packed_float 1 + +#define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008 +#define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1 + +#define GLXEW_EXT_fbconfig_packed_float GLXEW_GET_VAR(__GLXEW_EXT_fbconfig_packed_float) + +#endif /* GLX_EXT_fbconfig_packed_float */ + +/* ------------------------ GLX_EXT_framebuffer_sRGB ----------------------- */ + +#ifndef GLX_EXT_framebuffer_sRGB +#define GLX_EXT_framebuffer_sRGB 1 + +#define GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2 + +#define GLXEW_EXT_framebuffer_sRGB GLXEW_GET_VAR(__GLXEW_EXT_framebuffer_sRGB) + +#endif /* GLX_EXT_framebuffer_sRGB */ + +/* ------------------------- GLX_EXT_import_context ------------------------ */ + +#ifndef GLX_EXT_import_context +#define GLX_EXT_import_context 1 + +#define GLX_SHARE_CONTEXT_EXT 0x800A +#define GLX_VISUAL_ID_EXT 0x800B +#define GLX_SCREEN_EXT 0x800C + +typedef XID GLXContextID; + +typedef void ( * PFNGLXFREECONTEXTEXTPROC) (Display* dpy, GLXContext context); +typedef GLXContextID ( * PFNGLXGETCONTEXTIDEXTPROC) (const GLXContext context); +typedef GLXContext ( * PFNGLXIMPORTCONTEXTEXTPROC) (Display* dpy, GLXContextID contextID); +typedef int ( * PFNGLXQUERYCONTEXTINFOEXTPROC) (Display* dpy, GLXContext context, int attribute,int *value); + +#define glXFreeContextEXT GLXEW_GET_FUN(__glewXFreeContextEXT) +#define glXGetContextIDEXT GLXEW_GET_FUN(__glewXGetContextIDEXT) +#define glXImportContextEXT GLXEW_GET_FUN(__glewXImportContextEXT) +#define glXQueryContextInfoEXT GLXEW_GET_FUN(__glewXQueryContextInfoEXT) + +#define GLXEW_EXT_import_context GLXEW_GET_VAR(__GLXEW_EXT_import_context) + +#endif /* GLX_EXT_import_context */ + +/* -------------------------- GLX_EXT_scene_marker ------------------------- */ + +#ifndef GLX_EXT_scene_marker +#define GLX_EXT_scene_marker 1 + +#define GLXEW_EXT_scene_marker GLXEW_GET_VAR(__GLXEW_EXT_scene_marker) + +#endif /* GLX_EXT_scene_marker */ + +/* ---------------------- GLX_EXT_texture_from_pixmap ---------------------- */ + +#ifndef GLX_EXT_texture_from_pixmap +#define GLX_EXT_texture_from_pixmap 1 + +#define GLX_TEXTURE_1D_BIT_EXT 0x00000001 +#define GLX_TEXTURE_2D_BIT_EXT 0x00000002 +#define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004 +#define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0 +#define GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1 +#define GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2 +#define GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3 +#define GLX_Y_INVERTED_EXT 0x20D4 +#define GLX_TEXTURE_FORMAT_EXT 0x20D5 +#define GLX_TEXTURE_TARGET_EXT 0x20D6 +#define GLX_MIPMAP_TEXTURE_EXT 0x20D7 +#define GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8 +#define GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9 +#define GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA +#define GLX_TEXTURE_1D_EXT 0x20DB +#define GLX_TEXTURE_2D_EXT 0x20DC +#define GLX_TEXTURE_RECTANGLE_EXT 0x20DD +#define GLX_FRONT_LEFT_EXT 0x20DE +#define GLX_FRONT_RIGHT_EXT 0x20DF +#define GLX_BACK_LEFT_EXT 0x20E0 +#define GLX_BACK_RIGHT_EXT 0x20E1 +#define GLX_AUX0_EXT 0x20E2 +#define GLX_AUX1_EXT 0x20E3 +#define GLX_AUX2_EXT 0x20E4 +#define GLX_AUX3_EXT 0x20E5 +#define GLX_AUX4_EXT 0x20E6 +#define GLX_AUX5_EXT 0x20E7 +#define GLX_AUX6_EXT 0x20E8 +#define GLX_AUX7_EXT 0x20E9 +#define GLX_AUX8_EXT 0x20EA +#define GLX_AUX9_EXT 0x20EB + +typedef void ( * PFNGLXBINDTEXIMAGEEXTPROC) (Display* display, GLXDrawable drawable, int buffer, const int *attrib_list); +typedef void ( * PFNGLXRELEASETEXIMAGEEXTPROC) (Display* display, GLXDrawable drawable, int buffer); + +#define glXBindTexImageEXT GLXEW_GET_FUN(__glewXBindTexImageEXT) +#define glXReleaseTexImageEXT GLXEW_GET_FUN(__glewXReleaseTexImageEXT) + +#define GLXEW_EXT_texture_from_pixmap GLXEW_GET_VAR(__GLXEW_EXT_texture_from_pixmap) + +#endif /* GLX_EXT_texture_from_pixmap */ + +/* -------------------------- GLX_EXT_visual_info -------------------------- */ + +#ifndef GLX_EXT_visual_info +#define GLX_EXT_visual_info 1 + +#define GLX_X_VISUAL_TYPE_EXT 0x22 +#define GLX_TRANSPARENT_TYPE_EXT 0x23 +#define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24 +#define GLX_TRANSPARENT_RED_VALUE_EXT 0x25 +#define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26 +#define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27 +#define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28 +#define GLX_NONE_EXT 0x8000 +#define GLX_TRUE_COLOR_EXT 0x8002 +#define GLX_DIRECT_COLOR_EXT 0x8003 +#define GLX_PSEUDO_COLOR_EXT 0x8004 +#define GLX_STATIC_COLOR_EXT 0x8005 +#define GLX_GRAY_SCALE_EXT 0x8006 +#define GLX_STATIC_GRAY_EXT 0x8007 +#define GLX_TRANSPARENT_RGB_EXT 0x8008 +#define GLX_TRANSPARENT_INDEX_EXT 0x8009 + +#define GLXEW_EXT_visual_info GLXEW_GET_VAR(__GLXEW_EXT_visual_info) + +#endif /* GLX_EXT_visual_info */ + +/* ------------------------- GLX_EXT_visual_rating ------------------------- */ + +#ifndef GLX_EXT_visual_rating +#define GLX_EXT_visual_rating 1 + +#define GLX_VISUAL_CAVEAT_EXT 0x20 +#define GLX_SLOW_VISUAL_EXT 0x8001 +#define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D + +#define GLXEW_EXT_visual_rating GLXEW_GET_VAR(__GLXEW_EXT_visual_rating) + +#endif /* GLX_EXT_visual_rating */ + +/* -------------------------- GLX_MESA_agp_offset -------------------------- */ + +#ifndef GLX_MESA_agp_offset +#define GLX_MESA_agp_offset 1 + +typedef unsigned int ( * PFNGLXGETAGPOFFSETMESAPROC) (const void* pointer); + +#define glXGetAGPOffsetMESA GLXEW_GET_FUN(__glewXGetAGPOffsetMESA) + +#define GLXEW_MESA_agp_offset GLXEW_GET_VAR(__GLXEW_MESA_agp_offset) + +#endif /* GLX_MESA_agp_offset */ + +/* ------------------------ GLX_MESA_copy_sub_buffer ----------------------- */ + +#ifndef GLX_MESA_copy_sub_buffer +#define GLX_MESA_copy_sub_buffer 1 + +typedef void ( * PFNGLXCOPYSUBBUFFERMESAPROC) (Display* dpy, GLXDrawable drawable, int x, int y, int width, int height); + +#define glXCopySubBufferMESA GLXEW_GET_FUN(__glewXCopySubBufferMESA) + +#define GLXEW_MESA_copy_sub_buffer GLXEW_GET_VAR(__GLXEW_MESA_copy_sub_buffer) + +#endif /* GLX_MESA_copy_sub_buffer */ + +/* ------------------------ GLX_MESA_pixmap_colormap ----------------------- */ + +#ifndef GLX_MESA_pixmap_colormap +#define GLX_MESA_pixmap_colormap 1 + +typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPMESAPROC) (Display* dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap); + +#define glXCreateGLXPixmapMESA GLXEW_GET_FUN(__glewXCreateGLXPixmapMESA) + +#define GLXEW_MESA_pixmap_colormap GLXEW_GET_VAR(__GLXEW_MESA_pixmap_colormap) + +#endif /* GLX_MESA_pixmap_colormap */ + +/* ------------------------ GLX_MESA_release_buffers ----------------------- */ + +#ifndef GLX_MESA_release_buffers +#define GLX_MESA_release_buffers 1 + +typedef Bool ( * PFNGLXRELEASEBUFFERSMESAPROC) (Display* dpy, GLXDrawable d); + +#define glXReleaseBuffersMESA GLXEW_GET_FUN(__glewXReleaseBuffersMESA) + +#define GLXEW_MESA_release_buffers GLXEW_GET_VAR(__GLXEW_MESA_release_buffers) + +#endif /* GLX_MESA_release_buffers */ + +/* ------------------------- GLX_MESA_set_3dfx_mode ------------------------ */ + +#ifndef GLX_MESA_set_3dfx_mode +#define GLX_MESA_set_3dfx_mode 1 + +#define GLX_3DFX_WINDOW_MODE_MESA 0x1 +#define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2 + +typedef GLboolean ( * PFNGLXSET3DFXMODEMESAPROC) (GLint mode); + +#define glXSet3DfxModeMESA GLXEW_GET_FUN(__glewXSet3DfxModeMESA) + +#define GLXEW_MESA_set_3dfx_mode GLXEW_GET_VAR(__GLXEW_MESA_set_3dfx_mode) + +#endif /* GLX_MESA_set_3dfx_mode */ + +/* -------------------------- GLX_NV_float_buffer -------------------------- */ + +#ifndef GLX_NV_float_buffer +#define GLX_NV_float_buffer 1 + +#define GLX_FLOAT_COMPONENTS_NV 0x20B0 + +#define GLXEW_NV_float_buffer GLXEW_GET_VAR(__GLXEW_NV_float_buffer) + +#endif /* GLX_NV_float_buffer */ + +/* ----------------------- GLX_NV_vertex_array_range ----------------------- */ + +#ifndef GLX_NV_vertex_array_range +#define GLX_NV_vertex_array_range 1 + +typedef void * ( * PFNGLXALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority); +typedef void ( * PFNGLXFREEMEMORYNVPROC) (void *pointer); + +#define glXAllocateMemoryNV GLXEW_GET_FUN(__glewXAllocateMemoryNV) +#define glXFreeMemoryNV GLXEW_GET_FUN(__glewXFreeMemoryNV) + +#define GLXEW_NV_vertex_array_range GLXEW_GET_VAR(__GLXEW_NV_vertex_array_range) + +#endif /* GLX_NV_vertex_array_range */ + +/* -------------------------- GLX_OML_swap_method -------------------------- */ + +#ifndef GLX_OML_swap_method +#define GLX_OML_swap_method 1 + +#define GLX_SWAP_METHOD_OML 0x8060 +#define GLX_SWAP_EXCHANGE_OML 0x8061 +#define GLX_SWAP_COPY_OML 0x8062 +#define GLX_SWAP_UNDEFINED_OML 0x8063 + +#define GLXEW_OML_swap_method GLXEW_GET_VAR(__GLXEW_OML_swap_method) + +#endif /* GLX_OML_swap_method */ + +/* -------------------------- GLX_OML_sync_control ------------------------- */ + +#if !defined(GLX_OML_sync_control) && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +#include +#define GLX_OML_sync_control 1 + +typedef Bool ( * PFNGLXGETMSCRATEOMLPROC) (Display* dpy, GLXDrawable drawable, int32_t* numerator, int32_t* denominator); +typedef Bool ( * PFNGLXGETSYNCVALUESOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t* ust, int64_t* msc, int64_t* sbc); +typedef int64_t ( * PFNGLXSWAPBUFFERSMSCOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder); +typedef Bool ( * PFNGLXWAITFORMSCOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t* ust, int64_t* msc, int64_t* sbc); +typedef Bool ( * PFNGLXWAITFORSBCOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t target_sbc, int64_t* ust, int64_t* msc, int64_t* sbc); + +#define glXGetMscRateOML GLXEW_GET_FUN(__glewXGetMscRateOML) +#define glXGetSyncValuesOML GLXEW_GET_FUN(__glewXGetSyncValuesOML) +#define glXSwapBuffersMscOML GLXEW_GET_FUN(__glewXSwapBuffersMscOML) +#define glXWaitForMscOML GLXEW_GET_FUN(__glewXWaitForMscOML) +#define glXWaitForSbcOML GLXEW_GET_FUN(__glewXWaitForSbcOML) + +#define GLXEW_OML_sync_control GLXEW_GET_VAR(__GLXEW_OML_sync_control) + +#endif /* GLX_OML_sync_control */ + +/* ------------------------ GLX_SGIS_blended_overlay ----------------------- */ + +#ifndef GLX_SGIS_blended_overlay +#define GLX_SGIS_blended_overlay 1 + +#define GLX_BLENDED_RGBA_SGIS 0x8025 + +#define GLXEW_SGIS_blended_overlay GLXEW_GET_VAR(__GLXEW_SGIS_blended_overlay) + +#endif /* GLX_SGIS_blended_overlay */ + +/* -------------------------- GLX_SGIS_color_range ------------------------- */ + +#ifndef GLX_SGIS_color_range +#define GLX_SGIS_color_range 1 + +#define GLX_MIN_RED_SGIS 0 +#define GLX_MAX_GREEN_SGIS 0 +#define GLX_MIN_BLUE_SGIS 0 +#define GLX_MAX_ALPHA_SGIS 0 +#define GLX_MIN_GREEN_SGIS 0 +#define GLX_MIN_ALPHA_SGIS 0 +#define GLX_MAX_RED_SGIS 0 +#define GLX_EXTENDED_RANGE_SGIS 0 +#define GLX_MAX_BLUE_SGIS 0 + +#define GLXEW_SGIS_color_range GLXEW_GET_VAR(__GLXEW_SGIS_color_range) + +#endif /* GLX_SGIS_color_range */ + +/* -------------------------- GLX_SGIS_multisample ------------------------- */ + +#ifndef GLX_SGIS_multisample +#define GLX_SGIS_multisample 1 + +#define GLX_SAMPLE_BUFFERS_SGIS 100000 +#define GLX_SAMPLES_SGIS 100001 + +#define GLXEW_SGIS_multisample GLXEW_GET_VAR(__GLXEW_SGIS_multisample) + +#endif /* GLX_SGIS_multisample */ + +/* ---------------------- GLX_SGIS_shared_multisample ---------------------- */ + +#ifndef GLX_SGIS_shared_multisample +#define GLX_SGIS_shared_multisample 1 + +#define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026 +#define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027 + +#define GLXEW_SGIS_shared_multisample GLXEW_GET_VAR(__GLXEW_SGIS_shared_multisample) + +#endif /* GLX_SGIS_shared_multisample */ + +/* --------------------------- GLX_SGIX_fbconfig --------------------------- */ + +#ifndef GLX_SGIX_fbconfig +#define GLX_SGIX_fbconfig 1 + +#define GLX_WINDOW_BIT_SGIX 0x00000001 +#define GLX_RGBA_BIT_SGIX 0x00000001 +#define GLX_PIXMAP_BIT_SGIX 0x00000002 +#define GLX_COLOR_INDEX_BIT_SGIX 0x00000002 +#define GLX_SCREEN_EXT 0x800C +#define GLX_DRAWABLE_TYPE_SGIX 0x8010 +#define GLX_RENDER_TYPE_SGIX 0x8011 +#define GLX_X_RENDERABLE_SGIX 0x8012 +#define GLX_FBCONFIG_ID_SGIX 0x8013 +#define GLX_RGBA_TYPE_SGIX 0x8014 +#define GLX_COLOR_INDEX_TYPE_SGIX 0x8015 + +typedef XID GLXFBConfigIDSGIX; +typedef struct __GLXFBConfigRec *GLXFBConfigSGIX; + +typedef GLXFBConfigSGIX* ( * PFNGLXCHOOSEFBCONFIGSGIXPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements); +typedef GLXContext ( * PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display* dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); +typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC) (Display* dpy, GLXFBConfig config, Pixmap pixmap); +typedef int ( * PFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display* dpy, GLXFBConfigSGIX config, int attribute, int *value); +typedef GLXFBConfigSGIX ( * PFNGLXGETFBCONFIGFROMVISUALSGIXPROC) (Display* dpy, XVisualInfo *vis); +typedef XVisualInfo* ( * PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLXFBConfig config); + +#define glXChooseFBConfigSGIX GLXEW_GET_FUN(__glewXChooseFBConfigSGIX) +#define glXCreateContextWithConfigSGIX GLXEW_GET_FUN(__glewXCreateContextWithConfigSGIX) +#define glXCreateGLXPixmapWithConfigSGIX GLXEW_GET_FUN(__glewXCreateGLXPixmapWithConfigSGIX) +#define glXGetFBConfigAttribSGIX GLXEW_GET_FUN(__glewXGetFBConfigAttribSGIX) +#define glXGetFBConfigFromVisualSGIX GLXEW_GET_FUN(__glewXGetFBConfigFromVisualSGIX) +#define glXGetVisualFromFBConfigSGIX GLXEW_GET_FUN(__glewXGetVisualFromFBConfigSGIX) + +#define GLXEW_SGIX_fbconfig GLXEW_GET_VAR(__GLXEW_SGIX_fbconfig) + +#endif /* GLX_SGIX_fbconfig */ + +/* --------------------------- GLX_SGIX_hyperpipe -------------------------- */ + +#ifndef GLX_SGIX_hyperpipe +#define GLX_SGIX_hyperpipe 1 + +#define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001 +#define GLX_PIPE_RECT_SGIX 0x00000001 +#define GLX_PIPE_RECT_LIMITS_SGIX 0x00000002 +#define GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002 +#define GLX_HYPERPIPE_STEREO_SGIX 0x00000003 +#define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004 +#define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80 +#define GLX_BAD_HYPERPIPE_CONFIG_SGIX 91 +#define GLX_BAD_HYPERPIPE_SGIX 92 +#define GLX_HYPERPIPE_ID_SGIX 0x8030 + +typedef struct { + char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; + int networkId; +} GLXHyperpipeNetworkSGIX; +typedef struct { + char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; + int XOrigin; + int YOrigin; + int maxHeight; + int maxWidth; +} GLXPipeRectLimits; +typedef struct { + char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; + int channel; + unsigned int participationType; + int timeSlice; +} GLXHyperpipeConfigSGIX; +typedef struct { + char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; + int srcXOrigin; + int srcYOrigin; + int srcWidth; + int srcHeight; + int destXOrigin; + int destYOrigin; + int destWidth; + int destHeight; +} GLXPipeRect; + +typedef int ( * PFNGLXBINDHYPERPIPESGIXPROC) (Display *dpy, int hpId); +typedef int ( * PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId); +typedef int ( * PFNGLXHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList); +typedef int ( * PFNGLXHYPERPIPECONFIGSGIXPROC) (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId); +typedef int ( * PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList); +typedef int ( * PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList); +typedef GLXHyperpipeConfigSGIX * ( * PFNGLXQUERYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId, int *npipes); +typedef GLXHyperpipeNetworkSGIX * ( * PFNGLXQUERYHYPERPIPENETWORKSGIXPROC) (Display *dpy, int *npipes); + +#define glXBindHyperpipeSGIX GLXEW_GET_FUN(__glewXBindHyperpipeSGIX) +#define glXDestroyHyperpipeConfigSGIX GLXEW_GET_FUN(__glewXDestroyHyperpipeConfigSGIX) +#define glXHyperpipeAttribSGIX GLXEW_GET_FUN(__glewXHyperpipeAttribSGIX) +#define glXHyperpipeConfigSGIX GLXEW_GET_FUN(__glewXHyperpipeConfigSGIX) +#define glXQueryHyperpipeAttribSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeAttribSGIX) +#define glXQueryHyperpipeBestAttribSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeBestAttribSGIX) +#define glXQueryHyperpipeConfigSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeConfigSGIX) +#define glXQueryHyperpipeNetworkSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeNetworkSGIX) + +#define GLXEW_SGIX_hyperpipe GLXEW_GET_VAR(__GLXEW_SGIX_hyperpipe) + +#endif /* GLX_SGIX_hyperpipe */ + +/* ---------------------------- GLX_SGIX_pbuffer --------------------------- */ + +#ifndef GLX_SGIX_pbuffer +#define GLX_SGIX_pbuffer 1 + +#define GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001 +#define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002 +#define GLX_PBUFFER_BIT_SGIX 0x00000004 +#define GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004 +#define GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008 +#define GLX_AUX_BUFFERS_BIT_SGIX 0x00000010 +#define GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020 +#define GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040 +#define GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080 +#define GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100 +#define GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016 +#define GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017 +#define GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018 +#define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019 +#define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A +#define GLX_PRESERVED_CONTENTS_SGIX 0x801B +#define GLX_LARGEST_PBUFFER_SGIX 0x801C +#define GLX_WIDTH_SGIX 0x801D +#define GLX_HEIGHT_SGIX 0x801E +#define GLX_EVENT_MASK_SGIX 0x801F +#define GLX_DAMAGED_SGIX 0x8020 +#define GLX_SAVED_SGIX 0x8021 +#define GLX_WINDOW_SGIX 0x8022 +#define GLX_PBUFFER_SGIX 0x8023 +#define GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000 + +typedef XID GLXPbufferSGIX; +typedef struct { int type; unsigned long serial; Bool send_event; Display *display; GLXDrawable drawable; int event_type; int draw_type; unsigned int mask; int x, y; int width, height; int count; } GLXBufferClobberEventSGIX; + +typedef GLXPbuffer ( * PFNGLXCREATEGLXPBUFFERSGIXPROC) (Display* dpy, GLXFBConfig config, unsigned int width, unsigned int height, int *attrib_list); +typedef void ( * PFNGLXDESTROYGLXPBUFFERSGIXPROC) (Display* dpy, GLXPbuffer pbuf); +typedef void ( * PFNGLXGETSELECTEDEVENTSGIXPROC) (Display* dpy, GLXDrawable drawable, unsigned long *mask); +typedef void ( * PFNGLXQUERYGLXPBUFFERSGIXPROC) (Display* dpy, GLXPbuffer pbuf, int attribute, unsigned int *value); +typedef void ( * PFNGLXSELECTEVENTSGIXPROC) (Display* dpy, GLXDrawable drawable, unsigned long mask); + +#define glXCreateGLXPbufferSGIX GLXEW_GET_FUN(__glewXCreateGLXPbufferSGIX) +#define glXDestroyGLXPbufferSGIX GLXEW_GET_FUN(__glewXDestroyGLXPbufferSGIX) +#define glXGetSelectedEventSGIX GLXEW_GET_FUN(__glewXGetSelectedEventSGIX) +#define glXQueryGLXPbufferSGIX GLXEW_GET_FUN(__glewXQueryGLXPbufferSGIX) +#define glXSelectEventSGIX GLXEW_GET_FUN(__glewXSelectEventSGIX) + +#define GLXEW_SGIX_pbuffer GLXEW_GET_VAR(__GLXEW_SGIX_pbuffer) + +#endif /* GLX_SGIX_pbuffer */ + +/* ------------------------- GLX_SGIX_swap_barrier ------------------------- */ + +#ifndef GLX_SGIX_swap_barrier +#define GLX_SGIX_swap_barrier 1 + +typedef void ( * PFNGLXBINDSWAPBARRIERSGIXPROC) (Display *dpy, GLXDrawable drawable, int barrier); +typedef Bool ( * PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC) (Display *dpy, int screen, int *max); + +#define glXBindSwapBarrierSGIX GLXEW_GET_FUN(__glewXBindSwapBarrierSGIX) +#define glXQueryMaxSwapBarriersSGIX GLXEW_GET_FUN(__glewXQueryMaxSwapBarriersSGIX) + +#define GLXEW_SGIX_swap_barrier GLXEW_GET_VAR(__GLXEW_SGIX_swap_barrier) + +#endif /* GLX_SGIX_swap_barrier */ + +/* -------------------------- GLX_SGIX_swap_group -------------------------- */ + +#ifndef GLX_SGIX_swap_group +#define GLX_SGIX_swap_group 1 + +typedef void ( * PFNGLXJOINSWAPGROUPSGIXPROC) (Display *dpy, GLXDrawable drawable, GLXDrawable member); + +#define glXJoinSwapGroupSGIX GLXEW_GET_FUN(__glewXJoinSwapGroupSGIX) + +#define GLXEW_SGIX_swap_group GLXEW_GET_VAR(__GLXEW_SGIX_swap_group) + +#endif /* GLX_SGIX_swap_group */ + +/* ------------------------- GLX_SGIX_video_resize ------------------------- */ + +#ifndef GLX_SGIX_video_resize +#define GLX_SGIX_video_resize 1 + +#define GLX_SYNC_FRAME_SGIX 0x00000000 +#define GLX_SYNC_SWAP_SGIX 0x00000001 + +typedef int ( * PFNGLXBINDCHANNELTOWINDOWSGIXPROC) (Display* display, int screen, int channel, Window window); +typedef int ( * PFNGLXCHANNELRECTSGIXPROC) (Display* display, int screen, int channel, int x, int y, int w, int h); +typedef int ( * PFNGLXCHANNELRECTSYNCSGIXPROC) (Display* display, int screen, int channel, GLenum synctype); +typedef int ( * PFNGLXQUERYCHANNELDELTASSGIXPROC) (Display* display, int screen, int channel, int *x, int *y, int *w, int *h); +typedef int ( * PFNGLXQUERYCHANNELRECTSGIXPROC) (Display* display, int screen, int channel, int *dx, int *dy, int *dw, int *dh); + +#define glXBindChannelToWindowSGIX GLXEW_GET_FUN(__glewXBindChannelToWindowSGIX) +#define glXChannelRectSGIX GLXEW_GET_FUN(__glewXChannelRectSGIX) +#define glXChannelRectSyncSGIX GLXEW_GET_FUN(__glewXChannelRectSyncSGIX) +#define glXQueryChannelDeltasSGIX GLXEW_GET_FUN(__glewXQueryChannelDeltasSGIX) +#define glXQueryChannelRectSGIX GLXEW_GET_FUN(__glewXQueryChannelRectSGIX) + +#define GLXEW_SGIX_video_resize GLXEW_GET_VAR(__GLXEW_SGIX_video_resize) + +#endif /* GLX_SGIX_video_resize */ + +/* ---------------------- GLX_SGIX_visual_select_group --------------------- */ + +#ifndef GLX_SGIX_visual_select_group +#define GLX_SGIX_visual_select_group 1 + +#define GLX_VISUAL_SELECT_GROUP_SGIX 0x8028 + +#define GLXEW_SGIX_visual_select_group GLXEW_GET_VAR(__GLXEW_SGIX_visual_select_group) + +#endif /* GLX_SGIX_visual_select_group */ + +/* ---------------------------- GLX_SGI_cushion ---------------------------- */ + +#ifndef GLX_SGI_cushion +#define GLX_SGI_cushion 1 + +typedef void ( * PFNGLXCUSHIONSGIPROC) (Display* dpy, Window window, float cushion); + +#define glXCushionSGI GLXEW_GET_FUN(__glewXCushionSGI) + +#define GLXEW_SGI_cushion GLXEW_GET_VAR(__GLXEW_SGI_cushion) + +#endif /* GLX_SGI_cushion */ + +/* ----------------------- GLX_SGI_make_current_read ----------------------- */ + +#ifndef GLX_SGI_make_current_read +#define GLX_SGI_make_current_read 1 + +typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLESGIPROC) (void); +typedef Bool ( * PFNGLXMAKECURRENTREADSGIPROC) (Display* dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); + +#define glXGetCurrentReadDrawableSGI GLXEW_GET_FUN(__glewXGetCurrentReadDrawableSGI) +#define glXMakeCurrentReadSGI GLXEW_GET_FUN(__glewXMakeCurrentReadSGI) + +#define GLXEW_SGI_make_current_read GLXEW_GET_VAR(__GLXEW_SGI_make_current_read) + +#endif /* GLX_SGI_make_current_read */ + +/* -------------------------- GLX_SGI_swap_control ------------------------- */ + +#ifndef GLX_SGI_swap_control +#define GLX_SGI_swap_control 1 + +typedef int ( * PFNGLXSWAPINTERVALSGIPROC) (int interval); + +#define glXSwapIntervalSGI GLXEW_GET_FUN(__glewXSwapIntervalSGI) + +#define GLXEW_SGI_swap_control GLXEW_GET_VAR(__GLXEW_SGI_swap_control) + +#endif /* GLX_SGI_swap_control */ + +/* --------------------------- GLX_SGI_video_sync -------------------------- */ + +#ifndef GLX_SGI_video_sync +#define GLX_SGI_video_sync 1 + +typedef int ( * PFNGLXGETVIDEOSYNCSGIPROC) (uint* count); +typedef int ( * PFNGLXWAITVIDEOSYNCSGIPROC) (int divisor, int remainder, unsigned int* count); + +#define glXGetVideoSyncSGI GLXEW_GET_FUN(__glewXGetVideoSyncSGI) +#define glXWaitVideoSyncSGI GLXEW_GET_FUN(__glewXWaitVideoSyncSGI) + +#define GLXEW_SGI_video_sync GLXEW_GET_VAR(__GLXEW_SGI_video_sync) + +#endif /* GLX_SGI_video_sync */ + +/* --------------------- GLX_SUN_get_transparent_index --------------------- */ + +#ifndef GLX_SUN_get_transparent_index +#define GLX_SUN_get_transparent_index 1 + +typedef Status ( * PFNGLXGETTRANSPARENTINDEXSUNPROC) (Display* dpy, Window overlay, Window underlay, unsigned long *pTransparentIndex); + +#define glXGetTransparentIndexSUN GLXEW_GET_FUN(__glewXGetTransparentIndexSUN) + +#define GLXEW_SUN_get_transparent_index GLXEW_GET_VAR(__GLXEW_SUN_get_transparent_index) + +#endif /* GLX_SUN_get_transparent_index */ + +/* -------------------------- GLX_SUN_video_resize ------------------------- */ + +#ifndef GLX_SUN_video_resize +#define GLX_SUN_video_resize 1 + +#define GLX_VIDEO_RESIZE_SUN 0x8171 +#define GL_VIDEO_RESIZE_COMPENSATION_SUN 0x85CD + +typedef int ( * PFNGLXGETVIDEORESIZESUNPROC) (Display* display, GLXDrawable window, float* factor); +typedef int ( * PFNGLXVIDEORESIZESUNPROC) (Display* display, GLXDrawable window, float factor); + +#define glXGetVideoResizeSUN GLXEW_GET_FUN(__glewXGetVideoResizeSUN) +#define glXVideoResizeSUN GLXEW_GET_FUN(__glewXVideoResizeSUN) + +#define GLXEW_SUN_video_resize GLXEW_GET_VAR(__GLXEW_SUN_video_resize) + +#endif /* GLX_SUN_video_resize */ + +/* ------------------------------------------------------------------------- */ + +#ifdef GLEW_MX +#define GLXEW_EXPORT +#else +#define GLXEW_EXPORT extern +#endif /* GLEW_MX */ + +extern PFNGLXGETCURRENTDISPLAYPROC __glewXGetCurrentDisplay; + +extern PFNGLXCHOOSEFBCONFIGPROC __glewXChooseFBConfig; +extern PFNGLXCREATENEWCONTEXTPROC __glewXCreateNewContext; +extern PFNGLXCREATEPBUFFERPROC __glewXCreatePbuffer; +extern PFNGLXCREATEPIXMAPPROC __glewXCreatePixmap; +extern PFNGLXCREATEWINDOWPROC __glewXCreateWindow; +extern PFNGLXDESTROYPBUFFERPROC __glewXDestroyPbuffer; +extern PFNGLXDESTROYPIXMAPPROC __glewXDestroyPixmap; +extern PFNGLXDESTROYWINDOWPROC __glewXDestroyWindow; +extern PFNGLXGETCURRENTREADDRAWABLEPROC __glewXGetCurrentReadDrawable; +extern PFNGLXGETFBCONFIGATTRIBPROC __glewXGetFBConfigAttrib; +extern PFNGLXGETFBCONFIGSPROC __glewXGetFBConfigs; +extern PFNGLXGETSELECTEDEVENTPROC __glewXGetSelectedEvent; +extern PFNGLXGETVISUALFROMFBCONFIGPROC __glewXGetVisualFromFBConfig; +extern PFNGLXMAKECONTEXTCURRENTPROC __glewXMakeContextCurrent; +extern PFNGLXQUERYCONTEXTPROC __glewXQueryContext; +extern PFNGLXQUERYDRAWABLEPROC __glewXQueryDrawable; +extern PFNGLXSELECTEVENTPROC __glewXSelectEvent; + +extern PFNGLXBINDTEXIMAGEATIPROC __glewXBindTexImageATI; +extern PFNGLXDRAWABLEATTRIBATIPROC __glewXDrawableAttribATI; +extern PFNGLXRELEASETEXIMAGEATIPROC __glewXReleaseTexImageATI; + +extern PFNGLXFREECONTEXTEXTPROC __glewXFreeContextEXT; +extern PFNGLXGETCONTEXTIDEXTPROC __glewXGetContextIDEXT; +extern PFNGLXIMPORTCONTEXTEXTPROC __glewXImportContextEXT; +extern PFNGLXQUERYCONTEXTINFOEXTPROC __glewXQueryContextInfoEXT; + +extern PFNGLXBINDTEXIMAGEEXTPROC __glewXBindTexImageEXT; +extern PFNGLXRELEASETEXIMAGEEXTPROC __glewXReleaseTexImageEXT; + +extern PFNGLXGETAGPOFFSETMESAPROC __glewXGetAGPOffsetMESA; + +extern PFNGLXCOPYSUBBUFFERMESAPROC __glewXCopySubBufferMESA; + +extern PFNGLXCREATEGLXPIXMAPMESAPROC __glewXCreateGLXPixmapMESA; + +extern PFNGLXRELEASEBUFFERSMESAPROC __glewXReleaseBuffersMESA; + +extern PFNGLXSET3DFXMODEMESAPROC __glewXSet3DfxModeMESA; + +extern PFNGLXALLOCATEMEMORYNVPROC __glewXAllocateMemoryNV; +extern PFNGLXFREEMEMORYNVPROC __glewXFreeMemoryNV; + +#ifdef GLX_OML_sync_control +extern PFNGLXGETMSCRATEOMLPROC __glewXGetMscRateOML; +extern PFNGLXGETSYNCVALUESOMLPROC __glewXGetSyncValuesOML; +extern PFNGLXSWAPBUFFERSMSCOMLPROC __glewXSwapBuffersMscOML; +extern PFNGLXWAITFORMSCOMLPROC __glewXWaitForMscOML; +extern PFNGLXWAITFORSBCOMLPROC __glewXWaitForSbcOML; +#endif + +extern PFNGLXCHOOSEFBCONFIGSGIXPROC __glewXChooseFBConfigSGIX; +extern PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC __glewXCreateContextWithConfigSGIX; +extern PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC __glewXCreateGLXPixmapWithConfigSGIX; +extern PFNGLXGETFBCONFIGATTRIBSGIXPROC __glewXGetFBConfigAttribSGIX; +extern PFNGLXGETFBCONFIGFROMVISUALSGIXPROC __glewXGetFBConfigFromVisualSGIX; +extern PFNGLXGETVISUALFROMFBCONFIGSGIXPROC __glewXGetVisualFromFBConfigSGIX; + +extern PFNGLXBINDHYPERPIPESGIXPROC __glewXBindHyperpipeSGIX; +extern PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC __glewXDestroyHyperpipeConfigSGIX; +extern PFNGLXHYPERPIPEATTRIBSGIXPROC __glewXHyperpipeAttribSGIX; +extern PFNGLXHYPERPIPECONFIGSGIXPROC __glewXHyperpipeConfigSGIX; +extern PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC __glewXQueryHyperpipeAttribSGIX; +extern PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC __glewXQueryHyperpipeBestAttribSGIX; +extern PFNGLXQUERYHYPERPIPECONFIGSGIXPROC __glewXQueryHyperpipeConfigSGIX; +extern PFNGLXQUERYHYPERPIPENETWORKSGIXPROC __glewXQueryHyperpipeNetworkSGIX; + +extern PFNGLXCREATEGLXPBUFFERSGIXPROC __glewXCreateGLXPbufferSGIX; +extern PFNGLXDESTROYGLXPBUFFERSGIXPROC __glewXDestroyGLXPbufferSGIX; +extern PFNGLXGETSELECTEDEVENTSGIXPROC __glewXGetSelectedEventSGIX; +extern PFNGLXQUERYGLXPBUFFERSGIXPROC __glewXQueryGLXPbufferSGIX; +extern PFNGLXSELECTEVENTSGIXPROC __glewXSelectEventSGIX; + +extern PFNGLXBINDSWAPBARRIERSGIXPROC __glewXBindSwapBarrierSGIX; +extern PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC __glewXQueryMaxSwapBarriersSGIX; + +extern PFNGLXJOINSWAPGROUPSGIXPROC __glewXJoinSwapGroupSGIX; + +extern PFNGLXBINDCHANNELTOWINDOWSGIXPROC __glewXBindChannelToWindowSGIX; +extern PFNGLXCHANNELRECTSGIXPROC __glewXChannelRectSGIX; +extern PFNGLXCHANNELRECTSYNCSGIXPROC __glewXChannelRectSyncSGIX; +extern PFNGLXQUERYCHANNELDELTASSGIXPROC __glewXQueryChannelDeltasSGIX; +extern PFNGLXQUERYCHANNELRECTSGIXPROC __glewXQueryChannelRectSGIX; + +extern PFNGLXCUSHIONSGIPROC __glewXCushionSGI; + +extern PFNGLXGETCURRENTREADDRAWABLESGIPROC __glewXGetCurrentReadDrawableSGI; +extern PFNGLXMAKECURRENTREADSGIPROC __glewXMakeCurrentReadSGI; + +extern PFNGLXSWAPINTERVALSGIPROC __glewXSwapIntervalSGI; + +extern PFNGLXGETVIDEOSYNCSGIPROC __glewXGetVideoSyncSGI; +extern PFNGLXWAITVIDEOSYNCSGIPROC __glewXWaitVideoSyncSGI; + +extern PFNGLXGETTRANSPARENTINDEXSUNPROC __glewXGetTransparentIndexSUN; + +extern PFNGLXGETVIDEORESIZESUNPROC __glewXGetVideoResizeSUN; +extern PFNGLXVIDEORESIZESUNPROC __glewXVideoResizeSUN; + +#if defined(GLEW_MX) +struct GLXEWContextStruct +{ +#endif /* GLEW_MX */ + +GLXEW_EXPORT GLboolean __GLXEW_VERSION_1_0; +GLXEW_EXPORT GLboolean __GLXEW_VERSION_1_1; +GLXEW_EXPORT GLboolean __GLXEW_VERSION_1_2; +GLXEW_EXPORT GLboolean __GLXEW_VERSION_1_3; +GLXEW_EXPORT GLboolean __GLXEW_VERSION_1_4; +GLXEW_EXPORT GLboolean __GLXEW_3DFX_multisample; +GLXEW_EXPORT GLboolean __GLXEW_ARB_fbconfig_float; +GLXEW_EXPORT GLboolean __GLXEW_ARB_get_proc_address; +GLXEW_EXPORT GLboolean __GLXEW_ARB_multisample; +GLXEW_EXPORT GLboolean __GLXEW_ATI_pixel_format_float; +GLXEW_EXPORT GLboolean __GLXEW_ATI_render_texture; +GLXEW_EXPORT GLboolean __GLXEW_EXT_fbconfig_packed_float; +GLXEW_EXPORT GLboolean __GLXEW_EXT_framebuffer_sRGB; +GLXEW_EXPORT GLboolean __GLXEW_EXT_import_context; +GLXEW_EXPORT GLboolean __GLXEW_EXT_scene_marker; +GLXEW_EXPORT GLboolean __GLXEW_EXT_texture_from_pixmap; +GLXEW_EXPORT GLboolean __GLXEW_EXT_visual_info; +GLXEW_EXPORT GLboolean __GLXEW_EXT_visual_rating; +GLXEW_EXPORT GLboolean __GLXEW_MESA_agp_offset; +GLXEW_EXPORT GLboolean __GLXEW_MESA_copy_sub_buffer; +GLXEW_EXPORT GLboolean __GLXEW_MESA_pixmap_colormap; +GLXEW_EXPORT GLboolean __GLXEW_MESA_release_buffers; +GLXEW_EXPORT GLboolean __GLXEW_MESA_set_3dfx_mode; +GLXEW_EXPORT GLboolean __GLXEW_NV_float_buffer; +GLXEW_EXPORT GLboolean __GLXEW_NV_vertex_array_range; +GLXEW_EXPORT GLboolean __GLXEW_OML_swap_method; +GLXEW_EXPORT GLboolean __GLXEW_OML_sync_control; +GLXEW_EXPORT GLboolean __GLXEW_SGIS_blended_overlay; +GLXEW_EXPORT GLboolean __GLXEW_SGIS_color_range; +GLXEW_EXPORT GLboolean __GLXEW_SGIS_multisample; +GLXEW_EXPORT GLboolean __GLXEW_SGIS_shared_multisample; +GLXEW_EXPORT GLboolean __GLXEW_SGIX_fbconfig; +GLXEW_EXPORT GLboolean __GLXEW_SGIX_hyperpipe; +GLXEW_EXPORT GLboolean __GLXEW_SGIX_pbuffer; +GLXEW_EXPORT GLboolean __GLXEW_SGIX_swap_barrier; +GLXEW_EXPORT GLboolean __GLXEW_SGIX_swap_group; +GLXEW_EXPORT GLboolean __GLXEW_SGIX_video_resize; +GLXEW_EXPORT GLboolean __GLXEW_SGIX_visual_select_group; +GLXEW_EXPORT GLboolean __GLXEW_SGI_cushion; +GLXEW_EXPORT GLboolean __GLXEW_SGI_make_current_read; +GLXEW_EXPORT GLboolean __GLXEW_SGI_swap_control; +GLXEW_EXPORT GLboolean __GLXEW_SGI_video_sync; +GLXEW_EXPORT GLboolean __GLXEW_SUN_get_transparent_index; +GLXEW_EXPORT GLboolean __GLXEW_SUN_video_resize; + +#ifdef GLEW_MX +}; /* GLXEWContextStruct */ +#endif /* GLEW_MX */ + +/* ------------------------------------------------------------------------ */ + +#ifdef GLEW_MX + +typedef struct GLXEWContextStruct GLXEWContext; +extern GLenum glxewContextInit (GLXEWContext* ctx); +extern GLboolean glxewContextIsSupported (GLXEWContext* ctx, const char* name); + +#define glxewInit() glxewContextInit(glxewGetContext()) +#define glxewIsSupported(x) glxewContextIsSupported(glxewGetContext(), x) + +#define GLXEW_GET_VAR(x) (*(const GLboolean*)&(glxewGetContext()->x)) +#define GLXEW_GET_FUN(x) x + +#else /* GLEW_MX */ + +#define GLXEW_GET_VAR(x) (*(const GLboolean*)&x) +#define GLXEW_GET_FUN(x) x + +extern GLboolean glxewIsSupported (const char* name); + +#endif /* GLEW_MX */ + +extern GLboolean glxewGetExtension (const char* name); + +#ifdef __cplusplus +} +#endif + +#endif /* __glxew_h__ */ diff --git a/3rdparty/libprojectm/libprojectM.pc b/3rdparty/libprojectm/libprojectM.pc new file mode 100644 index 000000000..5161a2a9b --- /dev/null +++ b/3rdparty/libprojectm/libprojectM.pc @@ -0,0 +1,13 @@ +prefix=/usr/local +exec_prefix=/usr/local +libdir= +includedir=/usr/local/include +pkgdatadir=/usr/local/share/projectM +sysconfdir=/usr/local/share/projectM + +Name: libprojectM +Version: 2.0.0 +Description: projectM - OpenGL Milkdrop +Requires: +Libs: -L${libdir} -lprojectM +Cflags: -I${includedir} diff --git a/3rdparty/libprojectm/libprojectM.pc.in b/3rdparty/libprojectm/libprojectM.pc.in new file mode 100644 index 000000000..9ba34187f --- /dev/null +++ b/3rdparty/libprojectm/libprojectM.pc.in @@ -0,0 +1,13 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=@CMAKE_INSTALL_PREFIX@ +libdir=@LIB_INSTALL_DIR@ +includedir=@CMAKE_INSTALL_PREFIX@/include +pkgdatadir=@CMAKE_INSTALL_PREFIX@/@RESOURCE_PREFIX@ +sysconfdir=@CMAKE_INSTALL_PREFIX@/@RESOURCE_PREFIX@ + +Name: libprojectM +Version: 2.0.0 +Description: projectM - OpenGL Milkdrop +Requires: +Libs: -L${libdir} -lprojectM +Cflags: -I${includedir} diff --git a/3rdparty/libprojectm/libprojectM.rc b/3rdparty/libprojectm/libprojectM.rc new file mode 100644 index 000000000..11c5d52f7 --- /dev/null +++ b/3rdparty/libprojectm/libprojectM.rc @@ -0,0 +1,61 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE 9, 1 +#pragma code_page(1252) + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/3rdparty/libprojectm/lvtoprojectM.h b/3rdparty/libprojectm/lvtoprojectM.h new file mode 100755 index 000000000..4215b8abe --- /dev/null +++ b/3rdparty/libprojectm/lvtoprojectM.h @@ -0,0 +1,156 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id: sdltoprojectM.hpp,v 1.1 2004/10/08 00:35:28 cvs Exp $ + * + * Translates SDL -> projectM variables + * + * $Log: sdltoprojectM.hpp,v $ + * Revision 1.1 2004/10/08 00:35:28 cvs + * Moved and imported + * + * Revision 1.1.1.1 2004/10/04 12:56:00 cvs + * Imported + * + */ + +#include + +projectMEvent lv2pmEvent( VisEventType event ) { + + switch ( event ) { + case VISUAL_EVENT_RESIZE: + return PROJECTM_VIDEORESIZE; + case VISUAL_EVENT_KEYUP: + return PROJECTM_KEYUP; + case VISUAL_EVENT_KEYDOWN: + return PROJECTM_KEYDOWN; + default: + return PROJECTM_KEYUP; + } + } +projectMKeycode lv2pmKeycode( VisKey keysym ) +{ + switch ( keysym ) + { + case VKEY_F1: + return PROJECTM_K_F1; + case VKEY_F2: + return PROJECTM_K_F2; + case VKEY_F3: + return PROJECTM_K_F3; + case VKEY_F4: + return PROJECTM_K_F4; + case VKEY_F5: + return PROJECTM_K_F5; + case VKEY_F6: + return PROJECTM_K_F6; + case VKEY_F7: + return PROJECTM_K_F7; + case VKEY_F8: + return PROJECTM_K_F8; + case VKEY_F9: + return PROJECTM_K_F9; + case VKEY_F10: + return PROJECTM_K_F10; + case VKEY_F11: + return PROJECTM_K_F11; + case VKEY_F12: + return PROJECTM_K_F12; + case VKEY_ESCAPE: + return PROJECTM_K_ESCAPE; + case VKEY_a: + return PROJECTM_K_a; + case VKEY_b: + return PROJECTM_K_b; + case VKEY_c: + return PROJECTM_K_c; + case VKEY_d: + return PROJECTM_K_d; + case VKEY_e: + return PROJECTM_K_e; + case VKEY_f: + return PROJECTM_K_f; + case VKEY_g: + return PROJECTM_K_g; + case VKEY_h: + return PROJECTM_K_h; + case VKEY_i: + return PROJECTM_K_i; + case VKEY_j: + return PROJECTM_K_j; + case VKEY_k: + return PROJECTM_K_k; + case VKEY_l: + return PROJECTM_K_l; + case VKEY_m: + return PROJECTM_K_m; + case VKEY_n: + return PROJECTM_K_n; + case VKEY_o: + return PROJECTM_K_o; + case VKEY_p: + return PROJECTM_K_p; + case VKEY_q: + return PROJECTM_K_q; + case VKEY_r: + return PROJECTM_K_r; + case VKEY_s: + return PROJECTM_K_s; + case VKEY_t: + return PROJECTM_K_t; + case VKEY_u: + return PROJECTM_K_u; + case VKEY_v: + return PROJECTM_K_v; + case VKEY_w: + return PROJECTM_K_w; + case VKEY_x: + return PROJECTM_K_x; + case VKEY_y: + return PROJECTM_K_y; + case VKEY_z: + return PROJECTM_K_z; + case VKEY_UP: + return PROJECTM_K_UP; + case VKEY_RETURN: + return PROJECTM_K_RETURN; + case VKEY_RIGHT: + return PROJECTM_K_RIGHT; + case VKEY_LEFT: + return PROJECTM_K_LEFT; + case VKEY_DOWN: + return PROJECTM_K_DOWN; + case VKEY_PAGEUP: + return PROJECTM_K_PAGEUP; + case VKEY_PAGEDOWN: + return PROJECTM_K_PAGEDOWN; + + + default: + return PROJECTM_K_NONE; + break; + } + } + +projectMModifier lv2pmModifier( int mod ) { + return mod && VKMOD_LSHIFT; + } diff --git a/3rdparty/libprojectm/omptl/Example.cpp b/3rdparty/libprojectm/omptl/Example.cpp new file mode 100644 index 000000000..2872ac6d4 --- /dev/null +++ b/3rdparty/libprojectm/omptl/Example.cpp @@ -0,0 +1,42 @@ +#include + +#include +#include + +#include +#include +#include +#include + +const unsigned N = 100 * (1 << 20); + +template +struct Sqrt +{ + T operator()(const T &x) const { return std::sqrt(x); } +}; + +int main (int argc, char * const argv[]) +{ + // Number of threads is derived from environment + // variable "OMP_NUM_THREADS" + std::cout << "Threads: " << omp_get_max_threads() << std::endl; + + std::vector v1(N); + + omptl::generate(v1.begin(), v1.end(), std::rand); + omptl::sort(v1.begin(), v1.end()); + omptl::random_shuffle(v1.begin(), v1.end()); + + std::vector v2(N); + omptl::transform(v1.begin(), v1.end(), v2.begin(), Sqrt()); + std::cout << "Nr 3's: " << omptl::count(v2.begin(), v2.end(), 3) + << std::endl; + std::cout << "Sum: " + << omptl::accumulate(v2.begin(), v2.end(), 0) << std::endl; + + std::cout << *v1.begin() << std::endl; + + return 0; +} + diff --git a/3rdparty/libprojectm/omptl/License.txt b/3rdparty/libprojectm/omptl/License.txt new file mode 100644 index 000000000..8add30ad5 --- /dev/null +++ b/3rdparty/libprojectm/omptl/License.txt @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/3rdparty/libprojectm/omptl/omptl b/3rdparty/libprojectm/omptl/omptl new file mode 100644 index 000000000..1c845959a --- /dev/null +++ b/3rdparty/libprojectm/omptl/omptl @@ -0,0 +1,54 @@ +// Copyright (C) 2006 Fokko Beekhof +// Email contact: Fokko.Beekhof@cui.unige.ch + +// The OMPTL library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef OMPTL +#define OMPTL 1 + +#ifndef _OPENMP + #define par_generate generate +#else + +#ifdef OMPTL_NO_DEBUG + #define OMPTL_ASSERT(X) +#else + #include + #define OMPTL_ASSERT(X) assert(X) +#endif + +// For debugging +#ifndef _OMPTL_DEBUG_NO_OMP + #include +#else + #define omp_get_max_threads() (2) +#endif + +#endif /* ifndef _OPENMP */ + +struct _Pfunc +{ + static unsigned Pfunc() + { + #ifdef _OPENMP + assert(omp_get_max_threads() > 0); + return omp_get_max_threads(); + #else + return 0; + #endif + } +}; + +#endif /* OMPTL */ diff --git a/3rdparty/libprojectm/omptl/omptl_algorithm b/3rdparty/libprojectm/omptl/omptl_algorithm new file mode 100644 index 000000000..c34b4a144 --- /dev/null +++ b/3rdparty/libprojectm/omptl/omptl_algorithm @@ -0,0 +1,561 @@ +// Copyright (C) 2006 Fokko Beekhof +// Email contact: Fokko.Beekhof@cui.unige.ch + +// The OMPTL library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +#ifndef OMPTL_ALGORITHM +#define OMPTL_ALGORITHM 1 + +#include +#include "omptl" + +namespace omptl +{ + +template +ForwardIterator adjacent_find(ForwardIterator first, ForwardIterator last, + const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator adjacent_find(ForwardIterator first, ForwardIterator last, + BinaryPredicate binary_pred, + const unsigned P = _Pfunc::Pfunc()); + +template +bool binary_search(ForwardIterator first, ForwardIterator last, const T& value, + StrictWeakOrdering comp, + const unsigned P = _Pfunc::Pfunc()); + +template +bool binary_search(ForwardIterator first, ForwardIterator last, const T& value, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator copy(InputIterator first, InputIterator last, + OutputIterator result, + const unsigned P = _Pfunc::Pfunc()); + +template +BidirectionalIterator2 copy_backward(BidirectionalIterator1 first, + BidirectionalIterator1 last, + BidirectionalIterator2 result, + const unsigned P = _Pfunc::Pfunc()); + +/* + * Note: implementation assumes that + * ::std::iterator_traits::difference_type(0) will + * return a difference_type representing zero. + */ +template +typename ::std::iterator_traits::difference_type +count(InputIterator first, InputIterator last, const EqualityComparable& value, + const unsigned P = _Pfunc::Pfunc()); + +template +void count(InputIterator first, InputIterator last, + const EqualityComparable& value, + Size& n, const unsigned P = _Pfunc::Pfunc()); + +template +typename InputIterator::difference_type +count_if(InputIterator first, InputIterator last, Predicate pred, + const unsigned P = _Pfunc::Pfunc()); + +template +void count_if(InputIterator first, InputIterator last, + Predicate pred, Size& n, const unsigned P = _Pfunc::Pfunc()); + +template +bool equal(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, BinaryPredicate binary_pred, + const unsigned P = _Pfunc::Pfunc()); + +template +bool equal(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, const unsigned P = _Pfunc::Pfunc()); + +template +::std::pair +equal_range(ForwardIterator first, ForwardIterator last, const T& value, + StrictWeakOrdering comp, + const unsigned P = _Pfunc::Pfunc()); + +template +::std::pair +equal_range(ForwardIterator first, ForwardIterator last, const T& value, + const unsigned P = _Pfunc::Pfunc()); + +template +void fill(ForwardIterator first, ForwardIterator last, const T& value, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator fill_n(OutputIterator first, Size n, const T& value, + const unsigned P = _Pfunc::Pfunc()); + +/* + * find suffers from a loss of efficiency when executed in parallel! + */ +template +InputIterator find(InputIterator first, InputIterator last, + const EqualityComparable& value, + const unsigned P = _Pfunc::Pfunc()); + +/* + * find_if suffers from a loss of efficiency when executed in parallel! + */ +template +InputIterator find_if(InputIterator first, InputIterator last, + Predicate pred, const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator1 +find_end(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2, + BinaryPredicate comp, const unsigned P = _Pfunc::Pfunc() ); + +template +ForwardIterator1 find_end(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2, + const unsigned P = _Pfunc::Pfunc() ); + +/* + * find_first_of suffers from a loss of efficiency when executed in parallel! + */ +template +InputIterator find_first_of(InputIterator first1, InputIterator last1, + ForwardIterator first2, ForwardIterator last2, + BinaryPredicate comp, + const unsigned P = _Pfunc::Pfunc()); + +template +InputIterator find_first_of(InputIterator first1, InputIterator last1, + ForwardIterator first2, ForwardIterator last2, + const unsigned P = _Pfunc::Pfunc()); + +// Calls to UnaryFunction f must be completely independent +template +UnaryFunction for_each(InputIterator first, InputIterator last, UnaryFunction f, + const unsigned P = _Pfunc::Pfunc()); + +// Not parallellized, Generator is explicitly allowed and expected to return +// different results on subsequent calls. Order is therefor respected unless +// the programmer explicitly accepts responsibility and calls par_generate. +template +void generate(ForwardIterator first, ForwardIterator last, Generator gen); + +template +void par_generate(ForwardIterator first, ForwardIterator last, Generator gen, + const unsigned P = _Pfunc::Pfunc()); + +template +void push_heap(RandomAccessIterator first, RandomAccessIterator last, + StrictWeakOrdering comp, + const unsigned P = _Pfunc::Pfunc()); + +template +void push_heap(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P = _Pfunc::Pfunc()); + +template +inline void pop_heap(RandomAccessIterator first, RandomAccessIterator last, + StrictWeakOrdering comp, + const unsigned P = _Pfunc::Pfunc()); + +template +inline void pop_heap(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P = _Pfunc::Pfunc()); + +template +void make_heap(RandomAccessIterator first, RandomAccessIterator last, + StrictWeakOrdering comp, + const unsigned P = _Pfunc::Pfunc()); + +template +void make_heap(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P = _Pfunc::Pfunc()); + +template +void sort_heap(RandomAccessIterator first, RandomAccessIterator last, + StrictWeakOrdering comp, + const unsigned P = _Pfunc::Pfunc()); + +template +void sort_heap(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P = _Pfunc::Pfunc()); + +// Warning: includes loses some efficiency in parallel. +template +bool includes(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + StrictWeakOrdering comp, const unsigned P = _Pfunc::Pfunc()); + +template +bool includes(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + const unsigned P = _Pfunc::Pfunc()); + +template +bool lexicographical_compare(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + BinaryPredicate comp, + const unsigned P = _Pfunc::Pfunc()); + +template +bool lexicographical_compare(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last, + const T& value, StrictWeakOrdering comp, + const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator +lower_bound(ForwardIterator first, ForwardIterator last, + const T& value, const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator merge(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, + StrictWeakOrdering comp, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator merge(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, + const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator min_element(ForwardIterator first, ForwardIterator last, + BinaryPredicate comp, + const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator min_element(ForwardIterator first, ForwardIterator last, + const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator max_element(ForwardIterator first, ForwardIterator last, + BinaryPredicate comp, + const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator max_element(ForwardIterator first, ForwardIterator last, + const unsigned P = _Pfunc::Pfunc()); + +template +::std::pair +mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, + BinaryPredicate binary_pred, const unsigned P = _Pfunc::Pfunc()); + +template +::std::pair +mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, + const unsigned P = _Pfunc::Pfunc()); + +template +void nth_element(RandomAccessIterator first, RandomAccessIterator nth, + RandomAccessIterator last, StrictWeakOrdering comp, + const unsigned P = _Pfunc::Pfunc()); + +template +void nth_element(RandomAccessIterator first, RandomAccessIterator nth, + RandomAccessIterator last, + const unsigned P = _Pfunc::Pfunc()); + +template +void partial_sort(RandomAccessIterator first, + RandomAccessIterator middle, + RandomAccessIterator last, + StrictWeakOrdering comp, + const unsigned P = _Pfunc::Pfunc()); + +template +void partial_sort(RandomAccessIterator first, + RandomAccessIterator middle, + RandomAccessIterator last, + const unsigned P = _Pfunc::Pfunc()); + +template +RandomAccessIterator +partial_sort_copy(InputIterator first, InputIterator last, + RandomAccessIterator result_first, + RandomAccessIterator result_last, StrictWeakOrdering comp, + const unsigned P = _Pfunc::Pfunc()); + +template +RandomAccessIterator +partial_sort_copy(InputIterator first, InputIterator last, + RandomAccessIterator result_first, + RandomAccessIterator result_last, + const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator partition(ForwardIterator first, ForwardIterator last, + Predicate pred, + const unsigned P = _Pfunc::Pfunc()); + +template +bool next_permutation(BidirectionalIterator first, BidirectionalIterator last, + StrictWeakOrdering comp, + const unsigned P = _Pfunc::Pfunc()); + +template +bool next_permutation(BidirectionalIterator first, BidirectionalIterator last, + const unsigned P = _Pfunc::Pfunc()); + +template +bool prev_permutation(BidirectionalIterator first, BidirectionalIterator last, + StrictWeakOrdering comp, + const unsigned P = _Pfunc::Pfunc()); + +template +bool prev_permutation(BidirectionalIterator first, BidirectionalIterator last, + const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator +stable_partition(ForwardIterator first, ForwardIterator last, + Predicate pred, const unsigned P = _Pfunc::Pfunc()); + +template +void random_shuffle(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P = _Pfunc::Pfunc()); + +template +void random_shuffle(RandomAccessIterator first, RandomAccessIterator last, + RandomNumberGenerator &rgen, + const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator remove(ForwardIterator first, ForwardIterator last, + const T& value, const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator remove_if(ForwardIterator first, ForwardIterator last, + Predicate pred, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator remove_copy(InputIterator first, InputIterator last, + OutputIterator result, const T& value, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator remove_copy_if(InputIterator first, InputIterator last, + OutputIterator result, Predicate pred, + const unsigned P = _Pfunc::Pfunc()); + +template +void replace(ForwardIterator first, ForwardIterator last, const T& old_value, + const T& new_value, const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator replace_copy(InputIterator first, InputIterator last, + OutputIterator result, const T& old_value, + const T& new_value, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator replace_copy_if(InputIterator first, InputIterator last, + OutputIterator result, Predicate pred, + const T& new_value, + const unsigned P = _Pfunc::Pfunc()); + +template +void replace_if(ForwardIterator first, ForwardIterator last, Predicate pred, + const T& new_value, + const unsigned P = _Pfunc::Pfunc()); + +template +void reverse(BidirectionalIterator first, BidirectionalIterator last, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator reverse_copy(BidirectionalIterator first, + BidirectionalIterator last, + OutputIterator result, + const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator rotate( ForwardIterator first, ForwardIterator middle, + ForwardIterator last, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator rotate_copy(ForwardIterator first, ForwardIterator middle, + ForwardIterator last, OutputIterator result, + const unsigned P = _Pfunc::Pfunc()); + +// search suffers from a loss of efficiency when executed in parallel! +template +ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2, + BinaryPredicate binary_pred, + const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2, + const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator search_n(ForwardIterator first, ForwardIterator last, + Integer count, const T& value, + BinaryPredicate binary_pred, + const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator search_n(ForwardIterator first, ForwardIterator last, + Integer count, const T& value, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, StrictWeakOrdering comp, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator set_intersection(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, StrictWeakOrdering comp, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator set_intersection(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, + const unsigned P = _Pfunc::Pfunc()); + + +template +OutputIterator +set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, StrictWeakOrdering comp, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator +set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator set_union(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, StrictWeakOrdering comp, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator set_union(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, + const unsigned P = _Pfunc::Pfunc()); + + +template +void stable_sort(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P = _Pfunc::Pfunc()); + +template +void stable_sort(RandomAccessIterator first, RandomAccessIterator last, + StrictWeakOrdering comp, const unsigned P = _Pfunc::Pfunc()); + +template +void sort(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P = _Pfunc::Pfunc()); + +template +void sort(RandomAccessIterator first, RandomAccessIterator last, + StrictWeakOrdering comp, const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator2 swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator transform(InputIterator first, InputIterator last, + OutputIterator result, UnaryFunction op, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator transform(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, OutputIterator result, + BinaryFunction binary_op, + const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator unique(ForwardIterator first, ForwardIterator last, + BinaryPredicate binary_pred, + const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator unique(ForwardIterator first, ForwardIterator last, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator unique_copy(InputIterator first, InputIterator last, + OutputIterator result, BinaryPredicate binary_pred, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator unique_copy(InputIterator first, InputIterator last, + OutputIterator result, + const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last, + const T& value, StrictWeakOrdering comp, + const unsigned P = _Pfunc::Pfunc()); + +template +ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last, + const T& value, + const unsigned P = _Pfunc::Pfunc()); + +} // namespace omptl + +#ifdef _OPENMP + #include "omptl_algorithm_par.h" +#else + #include "omptl_algorithm_ser.h" +#endif + +#endif /* OMPTL_ALGORITHM */ diff --git a/3rdparty/libprojectm/omptl/omptl_algorithm_par.h b/3rdparty/libprojectm/omptl/omptl_algorithm_par.h new file mode 100644 index 000000000..2b33564c4 --- /dev/null +++ b/3rdparty/libprojectm/omptl/omptl_algorithm_par.h @@ -0,0 +1,2133 @@ +// Copyright (C) 2006 Fokko Beekhof +// Email contact: Fokko.Beekhof@cui.unige.ch + +// The OMPTL library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +#include +#include +#include +#include + +#include "omptl_tools.h" +#include "omptl_numeric" + +#include + +namespace omptl +{ + +/* + * Not (yet) paralellized due to data dependance. + */ +template +ForwardIterator adjacent_find(ForwardIterator first, ForwardIterator last, + const unsigned P) +{ + return ::std::adjacent_find(first, last); +} + +/* + * Not (yet) paralellized due to data dependance. + */ +template +ForwardIterator adjacent_find(ForwardIterator first, ForwardIterator last, + BinaryPredicate binary_pred, const unsigned P) +{ + return ::std::adjacent_find(first, last, binary_pred); +} + +template +bool binary_search(ForwardIterator first, ForwardIterator last, const T& value, + StrictWeakOrdering comp, const unsigned P) +{ + if (_linear_serial_is_faster(first, last, P)) + return ::std::binary_search(first, last, value, comp); + + ::std::vector< ::std::pair > + partitions(P); + ::omptl::_partition_range(first, last, partitions, P); + + bool result = 0; + #pragma omp parallel for reduction(|:result) + for (int t = 0; t < int(P); ++t) + result |= ::std::binary_search(partitions[t].first, + partitions[t].second, + value, comp); + + return result; +} + +template +bool binary_search(ForwardIterator first, ForwardIterator last, const T& value, + const unsigned P) +{ + typedef typename ::std::iterator_traits::value_type VT; + return ::omptl::binary_search(first, last, value, ::std::less()); +} + +template +struct Copy_ +{ + template + static IteratorOut _copy(IteratorIn first, IteratorIn last, + IteratorOut result, const unsigned P) + { + if (_linear_serial_is_faster(first, last, P)) + return ::std::copy(first, last, result); + + ::std::vector< ::std::pair > + source_partitions(P); + ::omptl::_partition_range(first, last, source_partitions, P); + + ::std::vector dest_partitions(P); + ::omptl::_copy_partitions(source_partitions, result, + dest_partitions, P); + + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + { + IteratorOut tmp; + *( (t == int(P-1)) ? &result : &tmp ) + = ::std::copy(source_partitions[t].first, + source_partitions[t].second, + dest_partitions[t]); + } + + return result; + } +}; + +template +struct Copy_< ::std::input_iterator_tag, IteratorOutTag > +{ + template + static OutputIterator _copy(InputIterator first, InputIterator last, + OutputIterator result, const unsigned P) + { + return ::std::copy(first, last, result); + } +}; + +template +struct Copy_ +{ + template + static OutputIterator _copy(InputIterator first, InputIterator last, + OutputIterator result, const unsigned P) + { + return ::std::copy(first, last, result); + } +}; + +template +OutputIterator copy(InputIterator first, InputIterator last, + OutputIterator result, const unsigned P) +{ + return ::omptl::Copy_< + typename ::std::iterator_traits::iterator_category, + typename ::std::iterator_traits::iterator_category> + ::_copy(first, last, result, P); +} + +template +BidirectionalIterator2 copy_backward(BidirectionalIterator1 first, + BidirectionalIterator1 last, + BidirectionalIterator2 result, + const unsigned P) +{ + if (_linear_serial_is_faster(first, last, P)) + return ::std::copy_backward(first, last, result); + + ::std::vector< ::std::pair > source_partitions(P); + ::omptl::_partition_range(first, last, source_partitions, P); + + ::std::vector dest_partitions(P); + ::omptl::_copy_partitions(source_partitions, result, + dest_partitions, P); + + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + { + BidirectionalIterator2 tmp; + *( (t == int(P-1)) ? &result : &tmp ) = + ::std::copy_backward( source_partitions[t].first, + source_partitions[t].second, + dest_partitions[t] ); + } + + return result; +} + +template +struct Count_ +{ + template + static typename ::std::iterator_traits::difference_type + count(Iterator first, Iterator last, const EqualityComparable& value, + const unsigned P) + { + if (_linear_serial_is_faster(first, last, P)) + return ::std::count(first, last, value); + + ::std::vector< ::std::pair > partitions(P); + ::omptl::_partition_range(first, last, partitions, P); + + typename ::std::iterator_traits::difference_type + result = 0; + #pragma omp parallel for reduction(+:result) + for (int t = 0; t < int(P); ++t) + result += ::std::count( partitions[t].first, + partitions[t].second, value ); + + return result; + } +}; + +template <> +struct Count_< ::std::input_iterator_tag > +{ + template + static typename ::std::iterator_traits::difference_type + count(Iterator first, Iterator last, const EqualityComparable& value, + const unsigned P) + { + return ::std::count(first, last, value); + } +}; + +template +typename ::std::iterator_traits::difference_type +count(InputIterator first, InputIterator last, + const EqualityComparable& value, const unsigned P) +{ + return ::omptl::Count_::iterator_category>:: + count(first, last, value, P); +} + +template +void count(InputIterator first, InputIterator last, + const EqualityComparable& value, Size& n, const unsigned P) +{ + n = ::omptl::count(first, last, value, P); +} + + +template +struct Count_if_ +{ + template + static typename ::std::iterator_traits::difference_type + count_if(Iterator first, Iterator last, Predicate pred, + const unsigned P) + { + if (_linear_serial_is_faster(first, last, P)) + return ::std::count_if(first, last, pred); + + ::std::vector< ::std::pair > partitions(P); + ::omptl::_partition_range(first, last, partitions, P); + + typename ::std::iterator_traits::difference_type + result = 0; + + #pragma omp parallel for reduction(+:result) + for (int t = 0; t < int(P); ++t) + result += ::std::count_if(partitions[t].first, + partitions[t].second, pred); + + return result; + } +}; + +template <> +struct Count_if_< ::std::input_iterator_tag > +{ + template + typename ::std::iterator_traits::difference_type + static count_if(InputIterator first, InputIterator last, + Predicate pred, const unsigned P) + { + return ::std::count_if(first, last, pred); + } +}; + +template +typename ::std::iterator_traits::difference_type +count_if(InputIterator first, InputIterator last, + Predicate pred, const unsigned P) +{ + return ::omptl::Count_if_::iterator_category>:: + count_if(first, last, pred, P); +} + +template +void count_if(InputIterator first, InputIterator last, + Predicate pred, Size& n, const unsigned P) +{ + n = ::omptl::count_if(first, last, pred, P); +} + +template +struct Equal_ +{ + template + static bool _equal(Iterator1 first1, Iterator1 last1, + Iterator2 first2, BinaryPredicate binary_pred, + const unsigned P) + { + if (_linear_serial_is_faster(first1, last1, P)) + return ::std::equal(first1, last1, first2, binary_pred); + + ::std::vector< ::std::pair > + source_partitions(P); + ::omptl::_partition_range(first1, last1, source_partitions, P); + + ::std::vector dest_partitions(P); + ::omptl::_copy_partitions(source_partitions, first2, + dest_partitions, P); + + bool result = true; + #pragma omp parallel for reduction(&:result) + for (int t = 0; t < int(P); ++t) + result &= ::std::equal( source_partitions[t].first, + source_partitions[t].second, + dest_partitions[t],binary_pred); + + return result; + } +}; + +template +struct Equal_ +{ + template + static bool _equal(InputIterator1 first1, InputIterator1 last1, + Iterator2 first2, BinaryPredicate binary_pred, + const unsigned P) + { + return ::std::equal(first1, last1, first2, binary_pred); + } +}; + +template +struct Equal_ +{ + template + static bool _equal(Iterator1 first1, Iterator1 last1, + InputIterator2 first2, BinaryPredicate binary_pred, + const unsigned P) + { + return ::std::equal(first1, last1, first2, binary_pred); + } +}; + +template<> +struct Equal_ +{ + template + static bool _equal(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, BinaryPredicate binary_pred, + const unsigned P) + { + return ::std::equal(first1, last1, first2, binary_pred); + } +}; + +template +bool equal(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, BinaryPredicate binary_pred, const unsigned P) +{ +// return ::std::equal(first1, last1, first2, binary_pred); + + return ::omptl::Equal_< + typename ::std::iterator_traits::iterator_category, + typename ::std::iterator_traits::iterator_category> + ::_equal(first1, last1, first2, binary_pred, P); +} + +template +bool equal(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, const unsigned P) +{ + typedef typename ::std::iterator_traits::value_type VT; + + return ::omptl::equal(first1, last1, first2, ::std::equal_to()); +} + +//TODO +template +::std::pair +equal_range(ForwardIterator first, ForwardIterator last, const T& value, + StrictWeakOrdering comp, const unsigned P) +{ + return ::std::equal_range(first, last, value, comp); +} + +template +::std::pair +equal_range(ForwardIterator first, ForwardIterator last, const T& value, + const unsigned P) +{ + typedef typename ::std::iterator_traits::value_type VT; + + return ::omptl::equal_range(first, last, value, ::std::less(), P); +} + +template +void fill(ForwardIterator first, ForwardIterator last, + const T& value, const unsigned P) +{ + assert(P > 0u); + if (_linear_serial_is_faster(first, last, P)) + { + ::std::fill(first, last, value); + return; + } + assert(std::distance(first, last) >= 0); + assert(2*(int)P <= std::distance(first, last)); + + ::std::vector< ::std::pair > + partitions(P); + ::omptl::_partition_range(first, last, partitions, P); + + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + ::std::fill(partitions[t].first, partitions[t].second, value); +} + +template +struct Fill_n_ +{ + template + static Iterator fill_n(Iterator first, Size n, const T& value, + const unsigned P) + { + assert(P > 0u); + Iterator last = first; + std::advance(last, n); + if (_linear_serial_is_faster(first, last, P)) + return ::std::fill_n(first, n, value); + + const Size range = (n / P) + ( (n % P) ? 1 : 0 ); + ::std::vector ranges(P); + ::std::fill_n(ranges.begin(), P - 1, range); + ranges[P - 1] = n - (P - 1) * range; + + ::std::vector partitions(P); + partitions[0] = first; + for (unsigned int i = 1; i < P; ++i) + { + partitions[i] = partitions[i - 1]; + ::std::advance(partitions[i], range); + } + + Iterator result; + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + { + Iterator tmp; + *( (t == int(P-1)) ? &result : &tmp ) + = ::std::fill_n(partitions[t], + ranges[t], value); + } + + return result; + } +}; + +template <> +struct Fill_n_< ::std::output_iterator_tag > +{ + template + static OutputIterator fill_n(OutputIterator first, Size n, + const T& value, const unsigned P) + { + return ::std::fill_n(first, n, value); + } +}; + +template +OutputIterator fill_n(OutputIterator first, Size n, + const T& value, const unsigned P) +{ + return ::omptl::Fill_n_::iterator_category>:: + fill_n(first, n, value, P); +} + + +template +struct Find_ +{ + template + static Iterator find(Iterator first, Iterator last, + const EqualityComparable& value, + const unsigned P) + { + if (_linear_serial_is_faster(first, last, P)) + return ::std::find(first, last, value); + + ::std::vector< ::std::pair > partitions(P); + ::omptl::_partition_range(first, last, partitions, P); + + std::vector results(P); + + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + { + results[t] = ::std::find(partitions[t].first, + partitions[t].second, value); + if (results[t] == partitions[t].second) + results[t] = last; + } + + typename std::vector::iterator result = + ::std::find_if(results.begin(),results.end(), + ::std::bind2nd(::std::not_equal_to(), last) ); + + if ( result != results.end() ) + return *result; + + return last; + } +}; + +template <> +struct Find_< ::std::input_iterator_tag > +{ + template + static InputIterator find(InputIterator first, InputIterator last, + const EqualityComparable& value, const unsigned P) + { + return std::find(first, last, value); + } +}; + +template +InputIterator find(InputIterator first, InputIterator last, + const EqualityComparable& value, const unsigned P) +{ + return ::omptl::Find_< typename + ::std::iterator_traits::iterator_category>:: + find(first, last, value, P); +} + +template +struct Find_if_ +{ + template + static Iterator find_if(Iterator first, Iterator last, Predicate pred, + const unsigned P, IteratorTag) + { + if (_linear_serial_is_faster(first, last, P)) + return ::std::find_if(first, last, pred); + + ::std::vector< ::std::pair > partitions(P); + ::omptl::_partition_range(first, last, partitions, P); + + ::std::vector results(P); + + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + { + results[t] = ::std::find_if(partitions[t].first, + partitions[t].second, pred); + + if (results[t] == partitions[t].second) + results[t] = last; + } + + const typename ::std::vector::iterator result + = ::std::find_if(results.begin(), results.end(), + ::std::bind2nd(::std::not_equal_to(), last) ); + + if ( result != results.end() ) + return *result; + + return last; + } +}; + +template <> +struct Find_if_< ::std::input_iterator_tag > +{ + template + static InputIterator _find_if(InputIterator first, InputIterator last, + Predicate pred, const unsigned P) + { + return ::std::find_if(first, last, pred); + } +}; + +template +InputIterator find_if(InputIterator first, InputIterator last, + Predicate pred, const unsigned P) +{ + return ::omptl::Find_if_::iterator_category>:: + find_if(first, last, pred, P); +} + +// TODO +template +ForwardIterator1 find_end(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2, + BinaryPredicate comp, const unsigned P) +{ + return ::std::find_end(first1, last1, first2, last2, comp); +} + +template +ForwardIterator1 find_end(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2, + const unsigned P) +{ +// typedef typename ::std::iterator_traits::value_type VT; +// return ::omptl::find_end(first1, last1, first2, last2, ::std::less()); + return ::std::find_end(first1, last1, first2, last2); +} + +// find_first_of suffers from a loss of efficiency, and potentially a loss of +// performance when executed in parallel! +template +struct Find_first_of_ +{ + template + static Iterator + find_first_of(Iterator first1, Iterator last1, + ForwardIterator first2, ForwardIterator last2, + BinaryPredicate comp, const unsigned P) + { + if (_linear_serial_is_faster(first1, last1, P)) + return ::std::find_first_of(first1, last1, + first2, last2, comp); + + ::std::vector< ::std::pair > partitions(P); + ::omptl::_partition_range(first1, last1, partitions, P); + + ::std::vector results(P); + + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + { + results[t] = ::std::find_first_of(partitions[t].first, + partitions[t].second, + first2, last2, comp); + if (results[t] == partitions[t].second) + results[t] = last1; + } + + const typename ::std::vector::iterator result + = ::std::find_if(results.begin(),results.end(), + ::std::bind2nd(::std::not_equal_to(), last1)); + + if ( result != results.end() ) + return *result; + + return last1; + } +}; + +template <> +struct Find_first_of_< ::std::input_iterator_tag > +{ + template + static InputIterator + find_first_of(InputIterator first1, InputIterator last1, + ForwardIterator first2, ForwardIterator last2, + BinaryPredicate comp, const unsigned P) + { + return ::std::find_first_of(first1, last1, first2, last2, comp); + } +}; + +template +InputIterator find_first_of(InputIterator first1, InputIterator last1, + ForwardIterator first2, ForwardIterator last2, + BinaryPredicate comp, const unsigned P) +{ + return ::omptl::Find_first_of_::iterator_category>:: + find_first_of(first1, last1, first2, last2, comp, P); +} + +template +InputIterator find_first_of(InputIterator first1, InputIterator last1, + ForwardIterator first2, ForwardIterator last2, + const unsigned P) +{ + typedef typename ::std::iterator_traits::value_type VT; + return ::omptl::find_first_of(first1, last1, first2, last2, + ::std::equal_to()); +} + +template +struct For_each_ +{ + template + static UnaryFunction for_each(Iterator first, Iterator last, + UnaryFunction f, const unsigned P) + { + if (_linear_serial_is_faster(first, last, P)) + return ::std::for_each(first, last, f); + + ::std::vector< ::std::pair > partitions(P); + ::omptl::_partition_range(first, last, partitions, P); + + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + ::std::for_each(partitions[t].first, + partitions[t].second, f); + + return f; + } +}; + +template <> +struct For_each_< ::std::input_iterator_tag > +{ + template + static UnaryFunction for_each(InputIterator first, InputIterator last, + UnaryFunction f, const unsigned P) + { + return ::std::for_each(first, last, f); + } +}; + +template +UnaryFunction for_each(InputIterator first, InputIterator last, + UnaryFunction f, const unsigned P) +{ + return ::omptl::For_each_::iterator_category>:: + for_each(first, last, f, P); +} + +template +void generate(ForwardIterator first, ForwardIterator last, Generator gen) +{ + ::std::generate(first, last, gen); +} + +template +void par_generate(ForwardIterator first, ForwardIterator last, + Generator gen, const unsigned P) +{ + if (_linear_serial_is_faster(first, last, P)) + { + ::std::generate(first, last, gen); + return; + } + + ::std::vector< ::std::pair > + partitions(P); + ::omptl::_partition_range(first, last, partitions, P); + + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + ::std::generate(partitions[t].first, partitions[t].second, gen); +} + +template +void push_heap(RandomAccessIterator first, RandomAccessIterator last, + StrictWeakOrdering comp, const unsigned P) +{ + return ::std::push_heap(first, last, comp); +} + +template +void push_heap(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P) +{ +// ::std::less::value_type>(), + return ::std::push_heap(first, last); +} + +template +inline void pop_heap(RandomAccessIterator first, RandomAccessIterator last, + StrictWeakOrdering comp, const unsigned P) +{ + return ::std::pop_heap(first, last, comp); +} + +template +inline void pop_heap(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P) +{ +// ::std::less::value_type> + return ::std::pop_heap(first, last); +} + +template +void make_heap(RandomAccessIterator first, RandomAccessIterator last, + StrictWeakOrdering comp, const unsigned P) +{ + return ::std::make_heap(first, last, comp); +} + +template +void make_heap(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P) +{ +// ::std::less::value_type>(), + return ::std::make_heap(first, last); +} + +template +void sort_heap(RandomAccessIterator first, RandomAccessIterator last, + StrictWeakOrdering comp, const unsigned P) +{ + return ::std::sort_heap(first, last, comp); +} + +template +void sort_heap(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P) +{ +// ::std::less::value_type> + return ::std::sort_heap(first, last); +} + +template +struct Includes_ +{ + template + static bool includes(Iterator1 first1, Iterator1 last1, + Iterator2 first2, Iterator2 last2, + StrictWeakOrdering comp, const unsigned P) + { + if (_linear_serial_is_faster(first2, last2, P)) + return ::std::includes(first1, last1, + first2, last2, comp); + + /* + * Includes is parallelized by splitting the second range + * (needles), rather than the first (the haystack). + */ + ::std::vector< ::std::pair >partitions(P); + ::omptl::_partition_range(first2, last2, partitions, P); + + bool result = true; + + // Hence, all needles should be found in the haystack + #pragma omp parallel for reduction(&:result) + for (int t = 0; t < int(P); ++t) + result &= ::std::includes(first1, last1, + partitions[t].first, + partitions[t].second, comp); + + return result; + } +}; + +template +struct Includes_< ::std::input_iterator_tag, Iterator2Tag > +{ + template + static bool includes(InputIterator1 first1, InputIterator1 last1, + Iterator2 first2, Iterator2 last2, + StrictWeakOrdering comp, const unsigned P) + { + return ::std::includes(first1, last1, first2, last2, comp); + } +}; + +template +struct Includes_ +{ + template + static bool includes(Iterator1 first1, Iterator1 last1, + InputIterator2 first2, InputIterator2 last2, + StrictWeakOrdering comp, const unsigned P) + { + return ::std::includes(first1, last1, first2, last2, comp); + } +}; + +template <> +struct Includes_< ::std::input_iterator_tag, ::std::input_iterator_tag > +{ + template + static bool includes(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + StrictWeakOrdering comp, const unsigned P) + { + return ::std::includes(first1, last1, first2, last2, comp); + } +}; + +template +bool includes(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + StrictWeakOrdering comp, const unsigned P) +{ + typedef typename + ::std::iterator_traits::iterator_category IC1; + typedef typename + ::std::iterator_traits::iterator_category IC2; + + return ::omptl::Includes_ + ::includes(first1, last1, first2, last2, comp, P); +} + +template +bool includes(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + const unsigned P) +{ + typedef typename ::std::iterator_traits::value_type VT; + return ::omptl::includes(first1, last1, first2, last2, + ::std::less()); +} + +template +bool lexicographical_compare(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + BinaryPredicate comp, const unsigned P) +{ + return ::std::lexicographical_compare(first1, last1, + first2, last2, comp); +} + +template +bool lexicographical_compare(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + const unsigned P) +{ +// ::std::less::value_type> + return ::std::lexicographical_compare(first1, last1, first2, last2); +} + +template +ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last, + const T& value, StrictWeakOrdering comp, + const unsigned P) +{ + if (_logn_serial_is_faster(first, last, P)) + return ::std::lower_bound(first, last, value, comp); + + ::std::vector< ::std::pair > + partitions(P); + ::omptl::_partition_range(first, last, partitions, P); + + ::std::vector results(P); + + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + results[t] = ::std::lower_bound(partitions[t].first, + partitions[t].second, + value, comp); + + const typename ::std::vector::iterator result = + ::std::find_if(results.begin(), results.end(), + ::std::bind2nd(::std::not_equal_to(), last) ); + + if (result != results.end()) + return *result; + + return last; +} + +template +ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last, + const T& value, const unsigned P) +{ + return ::omptl::lower_bound(first, last, value, ::std::less(), P); +} + +// Not parallelized, dependencies between data. +template +OutputIterator merge(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, + StrictWeakOrdering comp, const unsigned P) +{ + return ::std::merge(first1, last1, first2, last2, result, comp); +} + +template +OutputIterator merge(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, const unsigned P) +{ +// ::std::less::value_type> + return ::std::merge(first1, last1, first2, last2, result); +} + +template +ForwardIterator min_element(ForwardIterator first, ForwardIterator last, + BinaryPredicate comp, const unsigned P) +{ + if (_linear_serial_is_faster(first, last, P)) + return ::std::min_element(first, last, comp); + + ::std::vector< ::std::pair > + partitions(P); + ::omptl::_partition_range(first, last, partitions, P); + + ::std::vector results(P); + + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + results[t] = ::std::min_element(partitions[t].first, + partitions[t].second, comp); + + ForwardIterator result = results[0]; + for (unsigned int i = 1; i < P; ++i) + if ( (result != last) && (results[i] != last) && + comp(*results[i], *result) ) + result = results[i]; + + return result; +} + +template +ForwardIterator min_element(ForwardIterator first, ForwardIterator last, + const unsigned P) +{ + typedef typename + ::std::iterator_traits::value_type value_type; + return ::omptl::min_element(first, last, ::std::less(), P); +} + +template +ForwardIterator max_element(ForwardIterator first, ForwardIterator last, + BinaryPredicate comp, const unsigned P) +{ + if (_linear_serial_is_faster(first, last, P)) + return ::std::max_element(first, last, comp); + + ::std::vector< ::std::pair > + partitions(P); + ::omptl::_partition_range(first, last, partitions, P); + + ::std::vector results(P); + + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + results[t] = ::std::max_element(partitions[t].first, + partitions[t].second, comp); + + ForwardIterator result = results[0]; + for (unsigned int i = 1; i < P; ++i) + { + if ( (result != last) && (results[i] != last) && + comp(*result, *results[i]) ) + result = results[i]; + } + + return result; +} + +template +ForwardIterator max_element(ForwardIterator first, ForwardIterator last, + const unsigned P) +{ + typedef typename + ::std::iterator_traits::value_type value_type; + return ::omptl::max_element(first, last, ::std::less(), P); +} + +template +struct Mismatch_ +{ + template + static ::std::pair + mismatch(Iterator1 first1, Iterator1 last1, Iterator2 first2, + BinaryPredicate binary_pred, const unsigned P) + { + if (_linear_serial_is_faster(first1, last1, P)) + return ::std::mismatch(first1, last1, + first2, binary_pred); + + ::std::vector< ::std::pair > + source_partitions(P); + ::omptl::_partition_range(first1, last1, source_partitions, P); + + ::std::vector dest_partitions(P); + ::omptl::_copy_partitions(source_partitions, first2, + dest_partitions, P); + + ::std::vector< ::std::pair > results(P); + + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + results[t] = ::std::mismatch(source_partitions[t].first, + source_partitions[t].second, + dest_partitions[t], + binary_pred); + + // This could have been done more elegantly with select1st + for (unsigned int i = 0; i < P - 1; ++i) + if (results[i].first != source_partitions[i].second) + return results[i]; + + return results[P - 1]; + } +}; + + +template +struct Mismatch_ +{ + template + static ::std::pair + mismatch(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, BinaryPredicate binary_pred, + const unsigned P) + { + return ::std::mismatch(first1, last1, first2, binary_pred); + } +}; + +template +struct Mismatch_< ::std::input_iterator_tag, Iterator2Tag > +{ + template + static ::std::pair + mismatch(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, BinaryPredicate binary_pred, + const unsigned P) + { + return ::std::mismatch(first1, last1, first2, binary_pred); + } +}; + +template <> +struct Mismatch_< ::std::input_iterator_tag, ::std::input_iterator_tag > +{ + template + static ::std::pair + mismatch(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, BinaryPredicate binary_pred, + const unsigned P) + { + return ::std::mismatch(first1, last1, first2, binary_pred); + } +}; + +template +::std::pair +mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, + BinaryPredicate binary_pred, const unsigned P) +{ + return ::omptl::Mismatch_< + typename ::std::iterator_traits::iterator_category, + typename ::std::iterator_traits::iterator_category>:: + mismatch(first1, last1, first2, binary_pred, P); +} + +template +::std::pair +mismatch(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, const unsigned P) +{ + typedef typename ::std::iterator_traits::value_type VT; + return ::omptl::mismatch(first1, last1, first2,::std::equal_to(),P); +} + +// TODO How can this be parallelized ? +template +void nth_element(RandomAccessIterator first, RandomAccessIterator nth, + RandomAccessIterator last, + StrictWeakOrdering comp, const unsigned P) +{ + ::std::nth_element(first, nth, last, comp); +} + +template +void nth_element(RandomAccessIterator first, RandomAccessIterator nth, + RandomAccessIterator last, const unsigned P) +{ +// typedef typename +// ::std::iterator_traits::value_type +// ::std::less + + ::std::nth_element(first, nth, last); +} + +template +void partial_sort(RandomAccessIterator first, + RandomAccessIterator middle, + RandomAccessIterator last, + StrictWeakOrdering comp, const unsigned P) +{ + const typename + ::std::iterator_traits::difference_type + N = ::std::distance(first, last); + assert(N >= 0); + + if (2*(int)P < N) + { + ::omptl::_pivot_range(first, last, *middle); + ::omptl::sort(first, middle, comp, P); + } + else + ::std::partial_sort(first, last, middle); +} + +template +void partial_sort(RandomAccessIterator first, RandomAccessIterator middle, + RandomAccessIterator last, const unsigned P) +{ + + typedef typename + ::std::iterator_traits::value_type VT; + ::omptl::partial_sort(first, middle, last, ::std::less(), P); +} + + +// Not parallelized due to dependencies. +template +RandomAccessIterator +partial_sort_copy(InputIterator first, InputIterator last, + RandomAccessIterator result_first, + RandomAccessIterator result_last, StrictWeakOrdering comp, + const unsigned P) +{ + return ::std::partial_sort_copy(first, last, + result_first, result_last, comp); +} + +// Not parallelized due to dependencies. +template +RandomAccessIterator +partial_sort_copy(InputIterator first, InputIterator last, + RandomAccessIterator result_first, + RandomAccessIterator result_last, const unsigned P) +{ +// ::std::less::value_type>(), + + return ::std::partial_sort_copy(first, last, + result_first, result_last); +} + +// Not (yet) parallelized, not straightforward due to possible dependencies +// between subtasks. +template +ForwardIterator partition(ForwardIterator first, ForwardIterator last, + Predicate pred, const unsigned P) +{ + return ::std::partition(first, last, pred); +} + +// Not (yet) parallelized, not straightforward due to possible dependencies +// between subtasks. +template +ForwardIterator stable_partition(ForwardIterator first, ForwardIterator last, + Predicate pred, const unsigned P) +{ + return ::std::stable_partition(first, last, pred); +} + +template +bool next_permutation(BidirectionalIterator first, BidirectionalIterator last, + StrictWeakOrdering comp, const unsigned P) +{ + return ::std::next_permutation(first, last, comp); +} + +template +bool next_permutation(BidirectionalIterator first, BidirectionalIterator last, + const unsigned P) +{ +// ::std::less::value_type> + return ::std::next_permutation(first, last); +} + +template +bool prev_permutation(BidirectionalIterator first, BidirectionalIterator last, + StrictWeakOrdering comp, const unsigned P) +{ + return ::std::prev_permutation(first, last, comp); +} + +template +bool prev_permutation(BidirectionalIterator first, BidirectionalIterator last, + const unsigned P) +{ +// ::std::less::value_type>(), + return ::std::prev_permutation(first, last); +} + + +template +void random_shuffle(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P) +{ + ::std::random_shuffle(first, last); +} + +template +void random_shuffle(RandomAccessIterator first, RandomAccessIterator last, + RandomNumberGenerator& rgen, const unsigned P) +{ + ::std::random_shuffle(first, last, rgen); +} + +// Not (yet) parallelized, not straightforward due to possible dependencies +// between subtasks. +template +ForwardIterator remove( ForwardIterator first, ForwardIterator last, + const T& value, const unsigned P) +{ + return ::std::remove(first, last, value); +} + +// Not (yet) parallelized, not straightforward due to possible dependencies +// between subtasks. +template +ForwardIterator remove_if(ForwardIterator first, ForwardIterator last, + Predicate pred, const unsigned P) +{ + return ::std::remove_if(first, last, pred); +} + +// Not parallelized due to possible complications with OutputIterators. +// No par_remove_copy exists due to possible dependencies between subtasks. +template +OutputIterator remove_copy(InputIterator first, InputIterator last, + OutputIterator result, const T& value, + const unsigned P) +{ + return ::std::remove_copy(first, last, result, value); +} + +// Not parallelized due to possible complications with OutputIterators. +// No par_remove_copy_if exists due to possible dependencies between subtasks. +template +OutputIterator remove_copy_if(InputIterator first, InputIterator last, + OutputIterator result, Predicate pred, + const unsigned P) +{ + return ::std::remove_copy(first, last, result, pred); +} + +template +void replace(ForwardIterator first, ForwardIterator last, const T& old_value, + const T& new_value, const unsigned P) +{ + if (_linear_serial_is_faster(first, last, P)) + { + ::std::replace(first, last, old_value, new_value); + return; + } + + ::std::vector< ::std::pair > + partitions(P); + ::omptl::_partition_range(first, last, partitions, P); + + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + ::std::replace(partitions[t].first, partitions[t].second, + old_value, new_value); +} + +template +struct Replace_copy_if_ +{ + template + static Iterator2 + replace_copy_if(Iterator1 first, Iterator1 last, + Iterator2 result, Predicate pred, + const T& new_value, const unsigned P) + { + if (_linear_serial_is_faster(first, last, P)) + return ::std::replace_copy_if(first, last, result, + pred, new_value); + + ::std::vector< ::std::pair > + source_partitions(P); + ::omptl::_partition_range(first, last, source_partitions, P); + ::std::vector dest_partitions(P); + ::omptl::_copy_partitions(source_partitions, result, + dest_partitions, P); + + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + { + Iterator2 tmp; + *( (t == int(P-1)) ? &result : &tmp ) + = ::std::replace_copy_if( + source_partitions[t].first, + source_partitions[t].second, + dest_partitions[t], + pred, new_value); + } + + return result; + } + +}; + +template +struct Replace_copy_if_< ::std::input_iterator_tag, Iterator2Tag> +{ + template + static Iterator2 + replace_copy_if(Iterator1 first, Iterator1 last, + Iterator2 result, Predicate pred, + const T& new_value, const unsigned P) + { + return ::std::replace_copy_if(first, last, result, + pred, new_value); + } +}; + +template +struct Replace_copy_if_< Iterator1Tag, ::std::output_iterator_tag> +{ + template + static OutputIterator + replace_copy_if(Iterator1 first, Iterator1 last, + OutputIterator result, Predicate pred, + const T& new_value, const unsigned P) + { + return ::std::replace_copy_if(first, last, result, + pred, new_value); + } +}; + +template <> +struct Replace_copy_if_< ::std::input_iterator_tag, ::std::output_iterator_tag> +{ + template + static OutputIterator + replace_copy_if(InputIterator first, InputIterator last, + OutputIterator result, Predicate pred, + const T& new_value, const unsigned P) + { + return ::std::replace_copy_if(first, last, result, + pred, new_value); + } +}; + +template +OutputIterator replace_copy_if(InputIterator first, InputIterator last, + OutputIterator result, Predicate pred, + const T& new_value, const unsigned P) +{ + return ::omptl::Replace_copy_if_< + typename ::std::iterator_traits< InputIterator>::iterator_category, + typename ::std::iterator_traits::iterator_category> + ::replace_copy_if(first, last, result, pred, new_value, P); +} + +template +OutputIterator replace_copy(InputIterator first, InputIterator last, + OutputIterator result, const T& old_value, + const T& new_value, const unsigned P) +{ + return ::omptl::replace_copy_if(first, last, result, + ::std::bind2nd(::std::equal_to(), old_value), + new_value, P); +} + +template +void replace_if(ForwardIterator first, ForwardIterator last, Predicate pred, + const T& new_value, const unsigned P) +{ + if (_linear_serial_is_faster(first, last, P)) + return ::std::replace_if(first, last, pred, new_value); + + ::std::vector< ::std::pair > + partitions(P); + ::omptl::_partition_range(first, last, partitions, P); + + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + ::std::replace_if(partitions[t].first, partitions[t].second, + pred, new_value); +} + +// TODO +template +void reverse(BidirectionalIterator first, BidirectionalIterator last, + const unsigned P) +{ + ::std::reverse(first, last); +} + +// TODO +template +OutputIterator reverse_copy(BidirectionalIterator first, + BidirectionalIterator last, + OutputIterator result, + const unsigned P) +{ + return ::std::reverse_copy(first, last, result); +} + +// TODO +template +ForwardIterator rotate( ForwardIterator first, ForwardIterator middle, + ForwardIterator last, + const unsigned P) +{ + return ::std::rotate(first, middle, last); +} + +// TODO +template +OutputIterator rotate_copy(ForwardIterator first, ForwardIterator middle, + ForwardIterator last, OutputIterator result, + const unsigned P) +{ + return ::std::rotate(first, middle, last, result); +} +/* +This can't be right - partitioning the range might cut valid subsequences +in [first1-last1] +template +ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2, + BinaryPredicate binary_pred, const unsigned P) +{ + if (_linear_serial_is_faster(first1, last1, P)) + return ::std::search(first1, last1, first2, last2, + binary_pred); + + ::std::vector< ::std::pair > + partitions(P); + ::omptl::_partition_range(first1, last1, partitions, P); + + ::std::vector results(P); + + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + { + results[t] = ::std::search(partitions[t].first, + partitions[t].second, + first2, last2, binary_pred); + + + } + + const typename ::std::vector::iterator + result = ::std::find_if(results.begin(), results.end(), + ::std::bind2nd(::std::not_equal_to(), + last1)); + + if (result != results.end()) + return *result; + + return last1; +} +*/ + +template +ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2, + BinaryPredicate binary_pred, const unsigned P) +{ + return ::std::search(first1, last1, first2, last2, binary_pred); +} + +template +ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2, + const unsigned P) +{ +// typedef typename +// ::std::iterator_traits::value_type VT; +// return ::omptl::search(first1, last1, first2, last2, +// ::std::equal_to(), P); + + return ::std::search(first1, last1, first2, last2); +} + +// TODO +template +ForwardIterator search_n(ForwardIterator first, ForwardIterator last, + Integer count, const T& value, + BinaryPredicate binary_pred, const unsigned P) +{ + return ::std::search_n(first, last, count, value, binary_pred); +} + +template +ForwardIterator search_n(ForwardIterator first, ForwardIterator last, + Integer count, const T& value, const unsigned P) +{ +// ::std::equal_to::value_type> + return ::std::search_n(first, last, count, value); +} + +template +OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, StrictWeakOrdering comp, + const unsigned P) +{ + return ::std::set_difference(first1, last1, + first2, last2, result, comp); +} + +template +OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, const unsigned P) +{ + return ::std::set_difference(first1, last1, first2, last2, result); +} + +template +OutputIterator set_intersection(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, StrictWeakOrdering comp, + const unsigned P) +{ + return ::std::set_intersection( first1, last1, + first2, last2, result, comp); +} + +template +OutputIterator set_intersection(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, const unsigned P) +{ + return ::std::set_intersection( first1, last1, first2, last2, result); +} + +template +OutputIterator +set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, StrictWeakOrdering comp, + const unsigned P) +{ + return ::std::set_symmetric_difference( first1, last1, + first2, last2, result, comp); +} + +template +OutputIterator +set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, const unsigned P) +{ + return ::std::set_symmetric_difference( first1, last1, + first2, last2, result); +} + +template +OutputIterator set_union(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, StrictWeakOrdering comp, + const unsigned P) +{ + return ::std::set_union(first1, last1, first2, last2, result, comp); +} + +template +OutputIterator set_union(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, const unsigned P) +{ + return ::std::set_union(first1, last1, first2, last2, result); +} + +template +void sort(RandomAccessIterator first, RandomAccessIterator last, + StrictWeakOrdering comp, const unsigned P) +{ + if ( ::omptl::_nlogn_serial_is_faster(first, last, P) ) + { + ::std::sort(first, last, comp); + return; + } + + // Generate pivots + typedef typename + ::std::iterator_traits::value_type value_type; + + ::std::vector pivots; + _find_pivots(first, last, pivots, P); + + // Sort sufficiently to respect pivot order + ::std::vector< ::std::pair > + partitions(P); + ::omptl::_partition_range_by_pivots(first, last, pivots, + partitions, comp, P); + + // Sort + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + ::std::sort(partitions[t].first, partitions[t].second, comp); +} + +template +void sort(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P) +{ + typedef typename + ::std::iterator_traits::value_type VT; + ::omptl::sort(first, last, std::less(), P); +} + +/* +template +void _par_stable_sort(RandomAccessIterator first, RandomAccessIterator last, + StrictWeakOrdering comp, const unsigned P) +{ + if ( ::omptl::_nlogn_serial_is_faster(first, last, P) ) + { + ::std::stable_sort(first, last, comp); + return; + } + + // Generate pivots + ::std::vector::value_type> + pivots; + _find_pivots(first, last, pivots, P); + + // Sort sufficiently to respect pivot order + ::std::vector< ::std::pair > + partitions(P); + ::omptl::_partition_range_stable_by_pivots(first, last, pivots, + partitions, comp, P); + + // Sort + #pragma omp parallel for // default(none) shared(partitions) + for (int t = 0; t < int(P); ++t) + ::std::stable_sort(partitions[t].first, + partitions[t].second, comp); +} + +template +void _stable_sort(RandomAccessIterator first, RandomAccessIterator last, + StrictWeakOrdering comp, const unsigned P) +{ + ::std::stable_sort(first, last, comp); +} + +template +void _stable_sort(RandomAccessIterator first, RandomAccessIterator last, + std::less::value_type> + comp, const unsigned P) +{ + ::omptl::_par_stable_sort(first, last, comp, P); +} + +// template +// void _stable_sort(RandomAccessIterator first, RandomAccessIterator last, +// std::greater< +// typename ::std::iterator_traits::value_type> comp, +// const unsigned P) +// { +// ::omptl::_par_stable_sort(first, last, comp, P); +// } +*/ + +template +void stable_sort(RandomAccessIterator first, RandomAccessIterator last, + StrictWeakOrdering comp, const unsigned P) +{ + ::std::stable_sort(first, last, comp); +} + +template +void stable_sort(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P) +{ + typedef typename + ::std::iterator_traits::value_type VT; + ::omptl::stable_sort(first, last, std::less(), P); +} + +template +ForwardIterator2 swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, const unsigned P) +{ + if (_linear_serial_is_faster(first1, last1, P)) + return ::std::swap_ranges(first1, last1, first2); + + ::std::vector< ::std::pair > + source_partitions(P); + ::omptl::_partition_range(first1, last1, source_partitions, P); + + ::std::vector dest_partitions(P); + ::omptl::_copy_partitions(source_partitions, first2, + dest_partitions, P); + + ForwardIterator2 result; + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + { + ForwardIterator2 tmp; + *( (t == int(P-1)) ? &result : &tmp ) + = ::std::swap_ranges(source_partitions[t].first, + source_partitions[t].second, + dest_partitions[t]); + } + + return result; +} + +template +struct Transform_ +{ + template + static IteratorOut transform(IteratorIn first, IteratorIn last, + IteratorOut result, UnaryFunction op, + const unsigned P) + { + if (_linear_serial_is_faster(first, last, P)) + return ::std::transform(first, last, result, op); + + ::std::vector< ::std::pair > + source_partitions(P); + ::omptl::_partition_range(first, last, source_partitions, P); + + ::std::vector dest_partitions(P); + ::omptl::_copy_partitions(source_partitions, result, + dest_partitions, P); + + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + { + IteratorOut tmp; + *( (t == int(P-1)) ? &result : &tmp ) + = ::std::transform(source_partitions[t].first, + source_partitions[t].second, + dest_partitions[t], op); + } + + return result; + } +}; + +template +struct Transform_ +{ + template + static OutputIterator transform(InputIterator first, InputIterator last, + OutputIterator result, UnaryFunction op, + const unsigned P) + { + return ::std::transform(first, last, result, op); + } +}; + +template +struct Transform_< ::std::input_iterator_tag, IteratorOutTag > +{ + template + OutputIterator transform(InputIterator first, InputIterator last, + OutputIterator result, UnaryFunction op, + const unsigned P) + { + return ::std::transform(first, last, result, op); + } +}; + +template <> +struct Transform_< ::std::input_iterator_tag, ::std::output_iterator_tag > +{ + template + OutputIterator transform(InputIterator first, InputIterator last, + OutputIterator result, UnaryFunction op, + const unsigned P) + { + return ::std::transform(first, last, result, op); + } +}; + +template +OutputIterator transform(InputIterator first, InputIterator last, + OutputIterator result, UnaryFunction op, + const unsigned P) +{ + return ::omptl::Transform_< + typename ::std::iterator_traits< InputIterator>::iterator_category, + typename ::std::iterator_traits::iterator_category>:: + transform(first, last, result, op, P); +} + +template +struct Transform2_ +{ + template + static IteratorOut transform(Iterator1 first1, Iterator1 last1, + Iterator2 first2, IteratorOut result, + BinaryFunction binary_op, const unsigned P) + { + if (_linear_serial_is_faster(first1, last1, P)) + return ::std::transform(first1, last1, first2, + result, binary_op); + + ::std::vector< ::std::pair > + source_partitions1(P); + ::omptl::_partition_range(first1, last1, source_partitions1, P); + + ::std::vector source_partitions2(P); + ::omptl::_copy_partitions(source_partitions1, first2, + source_partitions2 , P); + + ::std::vector dest_partitions(P); + ::omptl::_copy_partitions(source_partitions1, result, + dest_partitions, P); + + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + { + IteratorOut tmp; + *( (t == int(P-1)) ? &result : &tmp ) = + ::std::transform(source_partitions1[t].first, + source_partitions1[t].second, + source_partitions2[t], + dest_partitions[t], binary_op); + } + + return result; + } +}; + +template +struct Transform2_< ::std::input_iterator_tag, Iterator2Tag, IteratorOutTag > +{ + template + static OutputIterator + transform(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, OutputIterator result, + BinaryFunction binary_op, const unsigned P) + { + return ::std::transform(first1, last1, first2, + result, binary_op); + } +}; + +template +struct Transform2_< Iterator1Tag, ::std::input_iterator_tag, IteratorOutTag > +{ + template + static OutputIterator + transform(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, OutputIterator result, + BinaryFunction binary_op, const unsigned P) + { + return ::std::transform(first1, last1, first2, + result, binary_op); + } +}; + +template +struct Transform2_< Iterator1Tag, Iterator2Tag, ::std::output_iterator_tag> +{ + template + static OutputIterator + transform(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, OutputIterator result, + BinaryFunction binary_op, const unsigned P) + { + return ::std::transform(first1, last1, first2, + result, binary_op); + } +}; + +template +struct Transform2_< ::std::input_iterator_tag, + ::std::input_iterator_tag, IteratorOutTag > +{ + template + static OutputIterator + transform(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, OutputIterator result, + BinaryFunction binary_op, const unsigned P) + { + return ::std::transform(first1, last1, first2, + result, binary_op); + } +}; + +template +struct Transform2_< Iterator1Tag, ::std:: input_iterator_tag, + ::std::output_iterator_tag > +{ + template + static OutputIterator + transform(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, OutputIterator result, + BinaryFunction binary_op, const unsigned P) + { + return ::std::transform(first1, last1, first2, + result, binary_op); + } +}; + +template +struct Transform2_< ::std:: input_iterator_tag, Iterator2Tag, + ::std::output_iterator_tag > +{ + template + static OutputIterator + transform(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, OutputIterator result, + BinaryFunction binary_op, const unsigned P) + { + return ::std::transform(first1, last1, first2, + result, binary_op); + } +}; + +template <> +struct Transform2_< ::std:: input_iterator_tag, ::std:: input_iterator_tag, + ::std::output_iterator_tag > +{ + template + static OutputIterator + transform(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, OutputIterator result, + BinaryFunction binary_op, const unsigned P) + { + return ::std::transform(first1, last1, first2, + result, binary_op); + } +}; + +template +OutputIterator transform(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, OutputIterator result, + BinaryFunction binary_op, const unsigned P) +{ + return ::omptl::Transform2_< + typename ::std::iterator_traits::iterator_category, + typename ::std::iterator_traits::iterator_category, + typename ::std::iterator_traits::iterator_category>:: + transform(first1, last1, first2, result, binary_op, P); +} + +template +ForwardIterator unique(ForwardIterator first, ForwardIterator last, + BinaryPredicate binary_pred, const unsigned P) +{ + return ::std::unique(first, last, binary_pred); +} + +template +ForwardIterator unique(ForwardIterator first, ForwardIterator last, + const unsigned P) +{ +// ::std::equal_to::value_type>(), + return ::std::unique(first, last); +} + +template +OutputIterator unique_copy(InputIterator first, InputIterator last, + OutputIterator result, BinaryPredicate binary_pred, + const unsigned P) +{ + return ::std::unique_copy(first, last, result, binary_pred); +} + +template +OutputIterator unique_copy(InputIterator first, InputIterator last, + OutputIterator result, const unsigned P) +{ +// ::std::equal_to::value_type>(), + return ::std::unique_copy(first, last, result); +} + +template +ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last, + const T& value, StrictWeakOrdering comp, + const unsigned P) +{ + if (_logn_serial_is_faster(first, last, P)) + return ::std::upper_bound(first, last, value, comp); + + ::std::vector< ::std::pair > + partitions(P); + ::omptl::_partition_range(first, last, partitions, P); + + ::std::vector results(P); + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + results[t] = ::std::upper_bound(partitions[t].first, + partitions[t].second, + value, comp); + + // There has to be a better way... + for (unsigned int i = P - 1; i > 0; --i) + if (results[i] != partitions[i].second) + return results[i]; + + return results[0]; +} + +template +ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last, + const T& value, const unsigned P) +{ + typedef typename ::std::iterator_traits::value_type VT; + return ::omptl::upper_bound(first, last, value, ::std::less(), P); +} + +} /* namespace omptl */ + diff --git a/3rdparty/libprojectm/omptl/omptl_algorithm_ser.h b/3rdparty/libprojectm/omptl/omptl_algorithm_ser.h new file mode 100644 index 000000000..61c596690 --- /dev/null +++ b/3rdparty/libprojectm/omptl/omptl_algorithm_ser.h @@ -0,0 +1,771 @@ +// Copyright (C) 2006 Fokko Beekhof +// Email contact: Fokko.Beekhof@cui.unige.ch + +// The OMPTL library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +namespace omptl +{ + +template +ForwardIterator adjacent_find(ForwardIterator first, ForwardIterator last, + const unsigned P) +{ + return ::std::adjacent_find(first, last); +} + +template +ForwardIterator adjacent_find(ForwardIterator first, ForwardIterator last, + BinaryPredicate binary_pred, const unsigned P) +{ + return ::std::adjacent_find(first, last, binary_pred); +} + +template +bool binary_search(ForwardIterator first, ForwardIterator last, const T& value, + StrictWeakOrdering comp, const unsigned P) +{ + return ::std::binary_search(first, last, value, comp); +} + +template +bool binary_search(ForwardIterator first, ForwardIterator last, const T& value, + const unsigned P) +{ + return ::std::binary_search(first, last, value); +} + +template +OutputIterator copy(InputIterator first, InputIterator last, + OutputIterator result, const unsigned P) +{ + return ::std::copy(first, last, result); +} + +template +BidirectionalIterator2 copy_backward(BidirectionalIterator1 first, + BidirectionalIterator1 last, + BidirectionalIterator2 result, + const unsigned P) +{ + return ::std::copy_backward(first, last, result); +} + +template +typename ::std::iterator_traits::difference_type +count(InputIterator first, InputIterator last, const EqualityComparable& value, + const unsigned P) +{ + return ::std::count(first, last, value); +} + +template +void count(InputIterator first, InputIterator last, + const EqualityComparable& value, Size& n, const unsigned P) +{ + return ::std::count_if(first, last, value, n); +} + +template +typename InputIterator::difference_type +count_if(InputIterator first, InputIterator last, Predicate pred, + const unsigned P) +{ + return ::std::count_if(first, last, pred); +} + +template +void count_if(InputIterator first, InputIterator last, + Predicate pred, Size& n, const unsigned P) +{ + return ::std::count_if(first, last, pred, n); +} + +template +bool equal(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, BinaryPredicate binary_pred, + const unsigned P) +{ + return ::std::equal(first1, last1, first2, binary_pred); +} + +template +bool equal(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, const unsigned P) +{ + return ::std::equal(first1, last1, first2); +} + +template +::std::pair +equal_range(ForwardIterator first, ForwardIterator last, const T& value, + StrictWeakOrdering comp, const unsigned P) +{ + return ::std::equal_range(first, last, value, comp); +} + +template +::std::pair +equal_range(ForwardIterator first, ForwardIterator last, const T& value, + const unsigned P) +{ + return ::std::equal_range(first, last, value); +} + +template +void fill(ForwardIterator first, ForwardIterator last, const T& value, + const unsigned P) +{ + ::std::fill(first, last, value); +} + +template +OutputIterator fill_n(OutputIterator first, Size n, const T& value, + const unsigned P) +{ + return ::std::fill_n(first, n, value); +} + +template +InputIterator find(InputIterator first, InputIterator last, + const EqualityComparable& value, const unsigned P) +{ + return ::std::find(first, last, value); +} + +template +InputIterator find_if(InputIterator first, InputIterator last, + Predicate pred, const unsigned P) +{ + return ::std::find_if(first, last, pred); +} + +template +ForwardIterator1 find_end(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2, + BinaryPredicate comp, const unsigned P) +{ + return ::std::find_end(first1, last1, first2, last2, comp); +} + +template +ForwardIterator1 find_end(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2, + const unsigned P) +{ + return ::std::find_end(first1, last1, first2, last2); +} + +template +InputIterator find_first_of(InputIterator first1, InputIterator last1, + ForwardIterator first2, ForwardIterator last2, + BinaryPredicate comp, const unsigned P) +{ + return ::std::find_first_of(first1, last1, first2, last2, comp); +} + +template +InputIterator find_first_of(InputIterator first1, InputIterator last1, + ForwardIterator first2, ForwardIterator last2, + const unsigned P) +{ + return ::std::find_first_of(first1, last1, first2, last2); +} + +template +UnaryFunction for_each(InputIterator first, InputIterator last, UnaryFunction f, + const unsigned P) +{ + return ::std::for_each(first, last, f); +} + +template +void generate(ForwardIterator first, ForwardIterator last, Generator gen) +{ + ::std::generate(first, last, gen); +} + +template +void par_generate(ForwardIterator first, ForwardIterator last, Generator gen, + const unsigned P) +{ + ::std::generate(first, last, gen); +} + +template +void push_heap(RandomAccessIterator first, RandomAccessIterator last, + StrictWeakOrdering comp, const unsigned P) +{ + ::std::push_heap(first, last, comp); +} + +template +void push_heap(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P) +{ + ::std::push_heap(first, last); +} + +template +void pop_heap(RandomAccessIterator first, RandomAccessIterator last, + StrictWeakOrdering comp, const unsigned P) +{ + ::std::pop_heap(first, last, comp); +} + +template +void pop_heap(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P) +{ + ::std::pop_heap(first, last); +} + +template +void make_heap(RandomAccessIterator first, RandomAccessIterator last, + StrictWeakOrdering comp, const unsigned P) +{ + ::std::make_heap(first, last, comp); +} + +template +void make_heap(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P) +{ + ::std::make_heap(first, last); +} + +template +void sort_heap(RandomAccessIterator first, RandomAccessIterator last, + StrictWeakOrdering comp, const unsigned P) +{ + ::std::sort_heap(first, last, comp); +} + +template +void sort_heap(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P) +{ + ::std::sort_heap(first, last); +} + +template +bool includes(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + StrictWeakOrdering comp, const unsigned P) +{ + return ::std::includes(first1, last1, first2, last2, comp); +} + +template +bool includes(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, const unsigned P) +{ + return ::std::includes(first1, last1, first2, last2); +} + +template +bool lexicographical_compare(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + BinaryPredicate comp, const unsigned P) +{ + return ::std::lexicographical_compare(first1, last1, first2, last2, comp); +} + +template +bool lexicographical_compare(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + const unsigned P) +{ + return ::std::lexicographical_compare(first1, last1, first2, last2); +} + +template +ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last, + const T& value, StrictWeakOrdering comp, const unsigned P) +{ + return ::std::lower_bound(first, last, value, comp); +} + +template +ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last, + const T& value, const unsigned P) +{ + return ::std::lower_bound(first, last, value); +} + +template +OutputIterator merge(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, StrictWeakOrdering comp, + const unsigned P) +{ + return ::std::mismatch(first1, last1, first2, last2, result, comp); +} + +template +OutputIterator merge(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, const unsigned P) +{ + return ::std::mismatch(first1, last1, first2, last2, result); +} + +template +ForwardIterator min_element(ForwardIterator first, ForwardIterator last, + BinaryPredicate comp, const unsigned P) +{ + return ::std::min_element(first, last, comp); +} + +template +ForwardIterator min_element(ForwardIterator first, ForwardIterator last, + const unsigned P) +{ + return ::std::min_element(first, last); +} + +template +ForwardIterator max_element(ForwardIterator first, ForwardIterator last, + BinaryPredicate comp, const unsigned P) +{ + return ::std::max_element(first, last, comp); +} + +template +ForwardIterator max_element(ForwardIterator first, ForwardIterator last, + const unsigned P) +{ + return ::std::max_element(first, last); +} + +template +::std::pair +mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, + BinaryPredicate binary_pred, const unsigned P) +{ + return ::std::mismatch(first1, last1, first2, binary_pred); +} + +template +::std::pair +mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, + const unsigned P) +{ + return ::std::mismatch(first1, last1, first2); +} + +template +void nth_element(RandomAccessIterator first, RandomAccessIterator nth, + RandomAccessIterator last, StrictWeakOrdering comp, + const unsigned P) +{ + return ::std::nth_element(first, nth, last, comp); +} + +template +void nth_element(RandomAccessIterator first, RandomAccessIterator nth, + RandomAccessIterator last, const unsigned P) +{ + return ::std::nth_element(first, nth, last); +} + +template +void partial_sort(RandomAccessIterator first, RandomAccessIterator middle, + RandomAccessIterator last, StrictWeakOrdering comp, + const unsigned P) +{ + return ::std::partial_sort(first, middle, last, comp); +} + +template +void partial_sort(RandomAccessIterator first, RandomAccessIterator middle, + RandomAccessIterator last, const unsigned P) +{ + return ::std::partial_sort(first, middle, last); +} + +template +RandomAccessIterator partial_sort_copy(InputIterator first, InputIterator last, + RandomAccessIterator result_first, RandomAccessIterator result_last, + StrictWeakOrdering comp, const unsigned P) +{ + return ::std::partial_sort_copy(first, last, + result_first, result_last, comp); +} + +template +RandomAccessIterator partial_sort_copy(InputIterator first, InputIterator last, + RandomAccessIterator result_first, + RandomAccessIterator result_last, const unsigned P) +{ + return ::std::partial_sort_copy(first, last, result_first, result_last); +} + +template +ForwardIterator partition(ForwardIterator first, ForwardIterator last, + Predicate pred, const unsigned P) +{ + return ::std::partition(first, last, pred); +} + +template +bool next_permutation(BidirectionalIterator first, BidirectionalIterator last, + StrictWeakOrdering comp, const unsigned P) +{ + return ::std::next_permutation(first, last, comp); +} + +template +bool next_permutation(BidirectionalIterator first, BidirectionalIterator last, + const unsigned P) +{ + return ::std::next_permutation(first, last); +} + +template +bool prev_permutation(BidirectionalIterator first, BidirectionalIterator last, + StrictWeakOrdering comp, const unsigned P) +{ + return ::std::prev_permutation(first, last, comp); +} + +template +bool prev_permutation(BidirectionalIterator first, BidirectionalIterator last, + const unsigned P) +{ + return ::std::prev_permutation(first, last); +} + +template +ForwardIterator stable_partition(ForwardIterator first, ForwardIterator last, + Predicate pred, const unsigned P) +{ + return ::std::stable_partition(first, last, pred); +} + +template +void random_shuffle(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P) +{ + return ::std::random_shuffle(first, last); +} + +template +void random_shuffle(RandomAccessIterator first, RandomAccessIterator last, + RandomNumberGenerator &rgen, const unsigned P) +{ + return ::std::random_shuffle(first, last, rgen); +} + +template +ForwardIterator remove(ForwardIterator first, ForwardIterator last, + const T& value, const unsigned P) +{ + return ::std::remove(first, last, value); +} + +template +ForwardIterator remove_if(ForwardIterator first, ForwardIterator last, + Predicate pred, const unsigned P) +{ + return ::std::remove_if(first, last, pred); +} + +template +OutputIterator remove_copy(InputIterator first, InputIterator last, + OutputIterator result, const T& value, + const unsigned P) +{ + return ::std::remove_copy(first, last, result, value); +} + +template +OutputIterator remove_copy_if(InputIterator first, InputIterator last, + OutputIterator result, Predicate pred, + const unsigned P) +{ + return ::std::remove_copy_if(first, last, result, pred); +} + +template +void replace(ForwardIterator first, ForwardIterator last, const T& old_value, + const T& new_value, const unsigned P) +{ + return ::std::replace(first, last, old_value, new_value); +} + +template +OutputIterator replace_copy(InputIterator first, InputIterator last, + OutputIterator result, const T& old_value, + const T& new_value, const unsigned P) +{ + return ::std::replace_copy(first, last, result, old_value, new_value); +} + +template +OutputIterator replace_copy_if(InputIterator first, InputIterator last, + OutputIterator result, Predicate pred, + const T& new_value, const unsigned P) +{ + return ::std::replace_copy_if(first, last, result, pred, new_value); +} + +template +void replace_if(ForwardIterator first, ForwardIterator last, Predicate pred, + const T& new_value, const unsigned P) +{ + return ::std::replace_if(first, last, pred, new_value); +} + +template +void reverse(BidirectionalIterator first, BidirectionalIterator last, + const unsigned P) +{ + return ::std::reverse(first, last); +} + +template +OutputIterator reverse_copy(BidirectionalIterator first, + BidirectionalIterator last, + OutputIterator result, const unsigned P) +{ + return ::std::reverse_copy(first, last, result); +} + +template +ForwardIterator rotate( ForwardIterator first, ForwardIterator middle, + ForwardIterator last, const unsigned P) +{ + return ::std::rotate(first, middle, last); +} + +template +OutputIterator rotate_copy(ForwardIterator first, ForwardIterator middle, + ForwardIterator last, OutputIterator result, + const unsigned P) +{ + return ::std::rotate_copy(first, middle, last, result); +} + +template +ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2, + BinaryPredicate binary_pred, const unsigned P) +{ + return ::std::search(first1, last1, first2, last2, binary_pred); +} + +template +ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2, + const unsigned P) +{ + return ::std::search(first1, last1, first2, last2); +} + +template +ForwardIterator search_n(ForwardIterator first, ForwardIterator last, + Integer count, const T& value, + BinaryPredicate binary_pred, const unsigned P) +{ + return ::std::search_n(first, last, count, value, binary_pred); +} + +template +ForwardIterator search_n(ForwardIterator first, ForwardIterator last, + Integer count, const T& value, const unsigned P) +{ + return ::std::search_n(first, last, count, value); +} + +template +OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, StrictWeakOrdering comp, + const unsigned P) +{ + return ::std::set_difference(first1, last1, first2, last2, result,comp); +} + +template +OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, const unsigned P) +{ + return ::std::set_difference(first1, last1, first2, last2, result); +} + +template +OutputIterator set_intersection(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, StrictWeakOrdering comp, + const unsigned P) +{ + return ::std::set_intersection(first1, last1, + first2, last2, result, comp); +} + +template +OutputIterator set_intersection(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, const unsigned P) +{ + return ::std::set_intersection(first1, last1, first2, last2, result); +} + +template +OutputIterator +set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, StrictWeakOrdering comp, + const unsigned P) +{ + return ::std::set_symmetric_difference(first1, last1, + first2, last2, result, comp); +} + +template +OutputIterator +set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, const unsigned P) +{ + return ::std::set_symmetric_difference(first1, last1, + first2, last2, result); +} + +template +OutputIterator set_union(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, StrictWeakOrdering comp, + const unsigned P) +{ + return ::std::set_union(first1, last1, first2, last2, result, comp); +} + +template +OutputIterator set_union(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + OutputIterator result, const unsigned P) +{ + return ::std::set_union(first1, last1, first2, last2, result); +} + +template +void stable_sort(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P) +{ + return ::std::stable_sort(first, last); +} + +template +void stable_sort(RandomAccessIterator first, RandomAccessIterator last, + StrictWeakOrdering comp, const unsigned P) +{ + return ::std::stable_sort(first, last, comp); +} + +template +void sort(RandomAccessIterator first, RandomAccessIterator last, + const unsigned P) +{ + return ::std::sort(first, last); +} + +template +void sort(RandomAccessIterator first, RandomAccessIterator last, + StrictWeakOrdering comp, const unsigned P) +{ + return ::std::sort(first, last, comp); +} + +template +ForwardIterator2 swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, const unsigned P) +{ + return ::std::swap_ranges(first1, last1, first2); +} + +template +OutputIterator transform(InputIterator first, InputIterator last, + OutputIterator result, UnaryFunction op, + const unsigned P) +{ + return ::std::transform(first, last, result, op); +} + +template +OutputIterator transform(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, OutputIterator result, + BinaryFunction binary_op, const unsigned P) +{ + return ::std::transform(first1, last1, first2, result, binary_op); +} + +template +ForwardIterator unique(ForwardIterator first, ForwardIterator last, + BinaryPredicate binary_pred, const unsigned P) +{ + return ::std::unique(first, last, binary_pred); +} + +template +ForwardIterator unique(ForwardIterator first, ForwardIterator last, + const unsigned P) +{ + return ::std::unique(first, last); +} + +template +OutputIterator unique_copy(InputIterator first, InputIterator last, + OutputIterator result, BinaryPredicate binary_pred, + const unsigned P) +{ + return ::std::unique_copy(first, last, result, binary_pred); +} + +template +OutputIterator unique_copy(InputIterator first, InputIterator last, + OutputIterator result, const unsigned P) +{ + return ::std::unique_copy(first, last, result); +} + +template +ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last, + const T& value, StrictWeakOrdering comp, + const unsigned P) +{ + return ::std::upper_bound(first, last, value, comp); +} + +template +ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last, + const T& value, const unsigned P) +{ + return ::std::upper_bound(first, last, value); +} + +} // namespace omptl diff --git a/3rdparty/libprojectm/omptl/omptl_numeric b/3rdparty/libprojectm/omptl/omptl_numeric new file mode 100644 index 000000000..ee27c9c9f --- /dev/null +++ b/3rdparty/libprojectm/omptl/omptl_numeric @@ -0,0 +1,83 @@ +// Copyright (C) 2006 Fokko Beekhof +// Email contact: Fokko.Beekhof@cui.unige.ch + +// The OMPTL library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef OMPTL_NUMERIC +#define OMPTL_NUMERIC 1 + +#include +#include "omptl" + +namespace omptl +{ + +template +T accumulate(InputIterator first, InputIterator last, T init, + const unsigned P = _Pfunc::Pfunc()); + +template +T accumulate(InputIterator first, InputIterator last, T init, + BinaryFunction binary_op, + const unsigned P = _Pfunc::Pfunc()); + +/* + * Not (yet) paralellized due to data dependance. + */ +template +OutputIterator +adjacent_difference(InputIterator first, InputIterator last, + OutputIterator result, BinaryFunction binary_op, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator adjacent_difference(InputIterator first, InputIterator last, + OutputIterator result, + const unsigned P = _Pfunc::Pfunc()); + +template +T inner_product(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, T init, + BinaryFunction1 binary_op1, BinaryFunction2 binary_op2, + const unsigned P = _Pfunc::Pfunc()); + +template +T inner_product(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, T init, + const unsigned P = _Pfunc::Pfunc()); + +// Not paralellized due to dependencies and complications with OutputIterators. +template +OutputIterator partial_sum(InputIterator first, InputIterator last, + OutputIterator result, BinaryOperation binary_op, + const unsigned P = _Pfunc::Pfunc()); + +template +OutputIterator partial_sum(InputIterator first, InputIterator last, + OutputIterator result, const unsigned P = _Pfunc::Pfunc()); + +} // namespace omptl + +#ifdef _OPENMP + #include "omptl_numeric_par.h" +#else + #include "omptl_numeric_ser.h" +#endif + +#include "omptl_numeric_extentions.h" + +#endif /* OMPTL_NUMERIC */ diff --git a/3rdparty/libprojectm/omptl/omptl_numeric_extentions.h b/3rdparty/libprojectm/omptl/omptl_numeric_extentions.h new file mode 100644 index 000000000..8ad771999 --- /dev/null +++ b/3rdparty/libprojectm/omptl/omptl_numeric_extentions.h @@ -0,0 +1,113 @@ +// Copyright (C) 2007 Fokko Beekhof +// Email contact: Fokko.Beekhof@cui.unige.ch + +// The OMPTL library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#include + +namespace omptl +{ + +// Extentions + +template +T transform_accumulate(Iterator first, Iterator last, T init, + UnaryFunction unary_op, BinaryFunction binary_op, + const unsigned P = _Pfunc::Pfunc()); + +template +T transform_accumulate(Iterator first, Iterator last, T init, + UnaryFunction unary_op, const unsigned P = _Pfunc::Pfunc()); + +// "Manhattan" distance +template +typename ::std::iterator_traits::value_type +L1(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, const unsigned P = _Pfunc::Pfunc()); + +// "Euclidean" distance +template +typename ::std::iterator_traits::value_type +L2(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, const unsigned P = _Pfunc::Pfunc()); + +// "Euclidean" length +template +typename ::std::iterator_traits::value_type +L2(InputIterator first, InputIterator last, const unsigned P = _Pfunc::Pfunc()); + +} // namespace + +#ifdef _OPENMP + #include "omptl_numeric_extentions_par.h" +#else + #include "omptl_numeric_extentions_ser.h" +#endif + +namespace omptl +{ + +// "Manhattan" distance +template +typename ::std::iterator_traits::value_type +L1(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, const unsigned P) +{ + typedef typename ::std::iterator_traits::value_type VT; + return ::omptl::inner_product(first1, last1, first2, VT(0), + std::plus(), std::minus(), P); +} + +template +struct _MinusSq +{ + T operator()(const T &lhs, const T &rhs) const + { + const T d = lhs - rhs; + return d*d; + } +}; + +// "Euclidean" distance +template +typename ::std::iterator_traits::value_type +L2(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, const unsigned P) +{ + typedef typename ::std::iterator_traits::value_type VT; + return ::std::sqrt(::omptl::inner_product(first1, last1, first2, VT(0), + std::plus(), _MinusSq(), P)); +} + +template +struct _Sq +{ + T operator()(const T &d) const + { + return d*d; + } +}; + +// "Euclidean" length +template +typename ::std::iterator_traits::value_type +L2(InputIterator first, InputIterator last, const unsigned P) +{ + typedef typename ::std::iterator_traits::value_type VT; + return ::std::sqrt(::omptl::transform_accumulate(first, last, VT(0), + _Sq(), std::plus(), P)); +} + +} /* namespace _OMPTL_EXTENTION_NAMESPACE */ diff --git a/3rdparty/libprojectm/omptl/omptl_numeric_extentions_par.h b/3rdparty/libprojectm/omptl/omptl_numeric_extentions_par.h new file mode 100644 index 000000000..5d152470d --- /dev/null +++ b/3rdparty/libprojectm/omptl/omptl_numeric_extentions_par.h @@ -0,0 +1,144 @@ +// Copyright (C) 2007 Fokko Beekhof +// Email contact: Fokko.Beekhof@cui.unige.ch + +// The OMPTL library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +namespace omptl +{ + +// transform_accumulate +template +T _ser_transform_accumulate(Iterator first, Iterator last, T init, + UnaryFunction unary_op, BinaryFunction binary_op) +{ + // serial version + while (first != last) + { + init = binary_op(unary_op(*first), init); + ++first; + } + + return init; +} + +template +T _par_transform_accumulate(Iterator first, Iterator last, + const T init, const T par_init, + UnaryFunction unary_op, BinaryFunction binary_op, + const unsigned P = omp_get_max_threads()) +{ + assert(P > 0u); + if (_linear_serial_is_faster(first, last, P)) + return _ser_transform_accumulate(first, last, init, + unary_op, binary_op); + assert(2*(int)P <= std::distance(first, last)); + + ::std::vector< ::std::pair > partitions(P); + ::omptl::_partition_range(first, last, partitions, P); + + ::std::vector results(P); + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + results[t] = _ser_transform_accumulate(partitions[t].first, + partitions[t].second, par_init, + unary_op, binary_op); + + return ::std::accumulate(results.begin(), results.end(), + init, binary_op); +} + +template +T _transform_accumulate(Iterator first, Iterator last, + const T init, UnaryFunction unary_op, + ::std::plus binary_op, + const unsigned P = omp_get_max_threads()) +{ + return ::omptl::_par_transform_accumulate(first, last, init, + typename UnaryFunction::result_type(0), + unary_op, binary_op, P); +} + +template +T _transform_accumulate(Iterator first, Iterator last, const T init, + UnaryFunction unary_op, + ::std::multipliesbinary_op, + const unsigned P = omp_get_max_threads()) +{ + return ::omptl::_par_transform_accumulate(first, last, init, + typename UnaryFunction::result_type(1), + unary_op, binary_op, P); +} + +template +T _transform_accumulate(Iterator first, Iterator last, const T init, + UnaryFunction unary_op, BinaryFunction binary_op, + const unsigned P = omp_get_max_threads()) +{ + return ::omptl::_ser_transform_accumulate(first, last, init, + unary_op,binary_op); +} + +template +struct _TransformAccumulate +{ + template + static typename BinaryFunction::result_type + transform_accumulate(Iterator first, Iterator last, const T init, + UnaryFunction unary_op, BinaryFunction binary_op, + const unsigned P = omp_get_max_threads()) + { + return ::omptl::_transform_accumulate(first, last, init, + unary_op, binary_op, P); + } +}; + +template <> +struct _TransformAccumulate< ::std::input_iterator_tag > +{ + template + static typename BinaryFunction::result_type + transform_accumulate(Iterator first, Iterator last, const T init, + UnaryFunction unary_op, BinaryFunction binary_op, + const unsigned P = omp_get_max_threads()) + { + return ::omptl::_ser_transform_accumulate(first, last, init, + unary_op, binary_op); + } +}; + +template +T transform_accumulate(Iterator first, Iterator last, const T init, + UnaryFunction unary_op, BinaryFunction binary_op, + const unsigned P = omp_get_max_threads()) +{ + return ::omptl::_TransformAccumulate + ::iterator_category> + ::transform_accumulate(first, last, init, + unary_op, binary_op, P); +} + +template +T transform_accumulate(Iterator first, Iterator last, + const T init, UnaryFunction unary_op, + const unsigned P=omp_get_max_threads()) +{ + typedef typename UnaryFunction::result_type RT; + return ::omptl::transform_accumulate(first, last, init, unary_op, + ::std::plus(), P); +} + +} /* namespace omptl */ diff --git a/3rdparty/libprojectm/omptl/omptl_numeric_extentions_ser.h b/3rdparty/libprojectm/omptl/omptl_numeric_extentions_ser.h new file mode 100644 index 000000000..b71479e08 --- /dev/null +++ b/3rdparty/libprojectm/omptl/omptl_numeric_extentions_ser.h @@ -0,0 +1,46 @@ +// Copyright (C) 2007 Fokko Beekhof +// Email contact: Fokko.Beekhof@cui.unige.ch + +// The OMPTL library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +namespace omptl +{ + +// transform_accumulate +template +T transform_accumulate(Iterator first, Iterator last, T init, + UnaryFunction unary_op, BinaryFunction binary_op, + const unsigned P) +{ + // serial version + while (first != last) + { + init = binary_op(unary_op(*first), init); + ++first; + } + + return init; +} + +template +T transform_accumulate(Iterator first, Iterator last, + T init, UnaryFunction unary_op, + const unsigned P) +{ + return omptl::transform_accumulate(first, last, init, unary_op, + std::plus()); +} + +} /* namespace std */ diff --git a/3rdparty/libprojectm/omptl/omptl_numeric_par.h b/3rdparty/libprojectm/omptl/omptl_numeric_par.h new file mode 100644 index 000000000..9552691ed --- /dev/null +++ b/3rdparty/libprojectm/omptl/omptl_numeric_par.h @@ -0,0 +1,286 @@ +// Copyright (C) 2006 Fokko Beekhof +// Email contact: Fokko.Beekhof@cui.unige.ch + +// The OMPTL library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef OMPTL_NUMERIC_H +#define OMPTL_NUMERIC_H 1 + +#include +#include +#include + +#include "omptl_algorithm" +#include "omptl_tools.h" + +namespace omptl +{ + +template +struct _Accumulate +{ + template + static T accumulate(InputIterator first, InputIterator last, T init, + T par_init, BinaryFunction binary_op, const unsigned P) + { + assert(P > 0u); + if (_linear_serial_is_faster(first, last, P)) + return ::std::accumulate(first, last, init, binary_op); + assert(2*(int)P <= std::distance(first, last)); + + ::std::vector< ::std::pair > + partitions(P); + ::omptl::_partition_range(first, last, partitions, P); + + ::std::vector results(P); + #pragma omp parallel for + for (int t = 0; t < int(P); ++t) + results[t] = ::std::accumulate( partitions[t].first, + partitions[t].second, + par_init, binary_op); + + return ::std::accumulate(results.begin(), results.end(), + init, binary_op); + } +}; + +template <> +struct _Accumulate< ::std::input_iterator_tag > +{ + template + static T accumulate(InputIterator first, InputIterator last, T init, + T par_init, BinaryFunction binary_op, const unsigned P) + { + return ::std::accumulate(first, last, init, binary_op); + } +}; + +template +struct _AccumulateOp +{ + template + static T accumulate(InputIterator first, InputIterator last, T init, + BinaryFunction binary_op, const unsigned P) + { + assert(P > 0u); + return ::std::accumulate(first, last, init, binary_op); + } +}; + +template +struct _AccumulateOp::value_type> > +{ + typedef ::std::plus::value_type> + BinaryFunction; + + template + static T accumulate(InputIterator first, InputIterator last, T init, + BinaryFunction binary_op, const unsigned P) + { + assert(P > 0u); + return ::omptl::_Accumulate< typename + ::std::iterator_traits::iterator_category>:: + accumulate(first, last, init, T(0), binary_op, P); + } +}; + +template +struct _AccumulateOp::value_type> > +{ + typedef ::std::multiplies::value_type> + BinaryFunction; + + template + static T accumulate(InputIterator first, InputIterator last, T init, + BinaryFunction binary_op, const unsigned P) + { + assert(P > 0u); + return ::omptl::_Accumulate::iterator_category>:: + accumulate(first, last, init, T(1), binary_op, P); + } +}; + +template +T accumulate(InputIterator first, InputIterator last, T init, + BinaryFunction binary_op, const unsigned P) +{ + assert(P > 0u); + return ::omptl::_AccumulateOp:: + accumulate(first, last, init, binary_op, P); +} + +template +T accumulate(InputIterator first, InputIterator last, T init, const unsigned P) +{ + assert(P > 0u); + typedef typename std::iterator_traits::value_type VT; + + return ::omptl::accumulate(first, last, init, std::plus(), P); +} + +template +OutputIterator adjacent_difference(InputIterator first, InputIterator last, + OutputIterator result, + BinaryFunction binary_op, const unsigned P) +{ + return ::std::adjacent_difference(first, last, result, binary_op); +} + +template +OutputIterator adjacent_difference(InputIterator first, InputIterator last, + OutputIterator result, const unsigned P) +{ +// ::std::minus::value_type>() + return ::std::adjacent_difference(first, last, result); +} + +template +struct _InnerProduct +{ + template + static T inner_product( InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, T init, + BinaryFunction1 binary_op1, + BinaryFunction2 binary_op2, const unsigned P) + { + return ::std::inner_product(first1, last1, first2, init, + binary_op1, binary_op2); + } + + template + static T inner_product(Iterator1 first1, Iterator1 last1, + Iterator2 first2, T init, + ::std::plus binary_op1, + BinaryFunction2 binary_op2, const unsigned P) + { + assert(P > 0u); + if (_linear_serial_is_faster(first1, last1, P)) + return ::std::inner_product(first1, last1, first2, + init, binary_op1, binary_op2); + + assert(2*(int)P <= std::distance(first1, last1)); + + ::std::vector< ::std::pair > + partitions1(P); + ::omptl::_partition_range(first1, last1, partitions1, P); + ::std::vector partitions2(P); + ::omptl::_copy_partitions(partitions1, first2, partitions2, P); + + #pragma omp parallel for reduction(+:init) + for (int t = 0; t < int(P); ++t) + init += ::std::inner_product( partitions1[t].first, + partitions1[t].second, + partitions2[t], T(0.0), + binary_op1, binary_op2); + + return init; + } +}; + +template +struct _InnerProduct< ::std::input_iterator_tag, Iterator2Tag> +{ + template + static T inner_product(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, T init, + BinaryFunction1 binary_op1, BinaryFunction2 binary_op2, + const unsigned P) + { + return ::std::inner_product(first1, last1, first2, init, + binary_op1, binary_op2); + } +}; + +template +struct _InnerProduct +{ + template + static T inner_product(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, T init, + BinaryFunction1 binary_op1, BinaryFunction2 binary_op2, + const unsigned P) + { + return ::std::inner_product(first1, last1, first2, init, + binary_op1, binary_op2); + } +}; + +template <> +struct _InnerProduct< ::std::input_iterator_tag, ::std::input_iterator_tag > +{ + template + static T inner_product(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, T init, + BinaryFunction1 binary_op1, BinaryFunction2 binary_op2, + const unsigned P) + { + return ::std::inner_product(first1, last1, first2, init, + binary_op1, binary_op2); + } +}; + + +template +T inner_product(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, T init, + BinaryFunction1 binary_op1, BinaryFunction2 binary_op2, + const unsigned P) +{ + return _InnerProduct< + typename ::std::iterator_traits::iterator_category, + typename ::std::iterator_traits::iterator_category> + ::inner_product(first1, last1, first2, init, + binary_op1, binary_op2, P); +} + +template +T inner_product(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, T init, const unsigned P) +{ + return ::omptl::inner_product(first1, last1, first2, init, + ::std::plus(), ::std::multiplies(), P); +} + +template +OutputIterator partial_sum(InputIterator first, InputIterator last, + OutputIterator result, BinaryOperation binary_op, + const unsigned P) +{ + return ::std::partial_sum(first, last, result, binary_op); +} + +template +OutputIterator partial_sum(InputIterator first, InputIterator last, + OutputIterator result, const unsigned P) +{ +// ::std::plus::value_type>(), + return ::std::partial_sum(first, last, result); +} + +} // namespace omptl + +#endif /* OMPTL_NUMERIC_H */ diff --git a/3rdparty/libprojectm/omptl/omptl_numeric_ser.h b/3rdparty/libprojectm/omptl/omptl_numeric_ser.h new file mode 100644 index 000000000..393bc4695 --- /dev/null +++ b/3rdparty/libprojectm/omptl/omptl_numeric_ser.h @@ -0,0 +1,87 @@ +// Copyright (C) 2006 Fokko Beekhof +// Email contact: Fokko.Beekhof@cui.unige.ch + +// The OMPTL library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +namespace omptl +{ + +template +T accumulate(InputIterator first, InputIterator last, T init, + const unsigned P) +{ + return ::std::accumulate(first, last, init); +} + +template +T accumulate(InputIterator first, InputIterator last, T init, + BinaryFunction binary_op, const unsigned P) +{ + return ::std::accumulate(first, last, init, binary_op); +} + +/* + * Not (yet) paralellized due to data dependance. + */ +template +OutputIterator adjacent_difference(InputIterator first, InputIterator last, + OutputIterator result, BinaryFunction binary_op, + const unsigned P) +{ + return ::std::adjacent_difference(first, last, result, binary_op); +} + +template +OutputIterator adjacent_difference(InputIterator first, InputIterator last, + OutputIterator result, const unsigned P) +{ + return ::std::adjacent_difference(first, last, result); +} + +template +T inner_product(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, T init, + BinaryFunction1 binary_op1, BinaryFunction2 binary_op2, + const unsigned P) +{ + return ::std::inner_product(first1, last1, first2, init, + binary_op1, binary_op2); +} + +template +T inner_product(InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, T init, const unsigned P) +{ + return ::std::inner_product(first1, last1, first2, init); +} + +// Not paralellized due to dependencies and complications with OutputIterators. +template +OutputIterator partial_sum(InputIterator first, InputIterator last, + OutputIterator result, BinaryOperation binary_op, + const unsigned P) +{ + return ::std::partial_sum(first, last, result, binary_op); +} + +template +OutputIterator partial_sum(InputIterator first, InputIterator last, + OutputIterator result, const unsigned P) +{ + return ::std::partial_sum(first, last, result); +} + +} // namespace omptl diff --git a/3rdparty/libprojectm/omptl/omptl_tools.h b/3rdparty/libprojectm/omptl/omptl_tools.h new file mode 100644 index 000000000..a27c4d477 --- /dev/null +++ b/3rdparty/libprojectm/omptl/omptl_tools.h @@ -0,0 +1,399 @@ +// Copyright (C) 2006 Fokko Beekhof +// Email contact: Fokko.Beekhof@cui.unige.ch + +// The OMPTL library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifndef OMPTL_TOOLS_H +#define OMPTL_TOOLS_H 1 + +#include +#include +#include +#include +#include + +namespace omptl +{ + +// Log of the number of operations that is expected to run faster in a single +// thread. +const unsigned C = 12; + +template +T log2N_(T n) +{ + if (n == 0) + return 0; + + const unsigned b[] = +#if (WORD_BIT == 32) + {0x2u, 0xCu, 0xF0u, 0xFF00u, 0xFFFF0000u}; +#else // 64-bit + {0x2u, 0xCu, 0xF0u, 0xFF00u, 0xFFFF0000u, 0xFFFFFFFF00000000u}; + assert(WORD_BIT == 64); +#endif + const T S[] = {1u, 2u, 4u, 8u, 16u, 32u, 64u, 128u}; + + T result = 0u; // result of log2(v) will go here + for (int i = static_cast(sizeof(T)); i >= 0; --i) + { + if (n & b[i]) + { + n >>= S[i]; + result |= S[i]; + } + } + + return result; +} + +template +bool _linear_serial_is_faster(Iterator first, Iterator last, + const unsigned P) +{ + assert(P > 0u); + assert(::std::distance(first, last) >= 0); + const unsigned N = ::std::distance(first, last); + + return (N < 2u*P) || (log2N_(N) < C); +} + +template +bool _logn_serial_is_faster(Iterator first, Iterator last, + const unsigned P) +{ + assert(P > 0u); + assert(::std::distance(first, last) >= 0); + const unsigned N = ::std::distance(first, last); + + return (N < 2u*P) || (log2N_(N) < (1 << C)); +} + +template +bool _nlogn_serial_is_faster(Iterator first, Iterator last, + const unsigned P) +{ + assert(P > 0u); + assert(::std::distance(first, last) >= 0); + const unsigned N = ::std::distance(first, last); + + return (N < 2u*P) || (N*log2N_(N) < (1 << C)); +} + +template +void _copy_partitions(const ::std::vector< ::std::pair > + &source_partitions, Iterator2 first, + ::std::vector &dest_partitions, const unsigned P) +{ + assert(source_partitions.size() == P); + assert(dest_partitions.size() == P); + for (unsigned i = 0; i < P; ++i) + { + dest_partitions[i] = first; + + // The last "advance" is very important, it may create space + // if it is an InsertIterator or something like that. + ::std::advance(first, ::std::distance( + source_partitions[i].first, + source_partitions[i].second) ); + } +} + +// Divide a given range into P partitions +template +void _partition_range(Iterator first, Iterator last, + ::std::vector< ::std::pair > &partitions, + const unsigned P) +{ + assert(partitions.size() == P); + + typedef ::std::pair Partition; + + const unsigned N = ::std::distance(first, last); + const unsigned range = N / P + ((N%P)? 1 : 0); + assert(2u*P <= N); + assert(range <= N); + + // All but last partition have same range + Iterator currentLast = first; + ::std::advance(currentLast, range); + for (unsigned i = 0; i < P - 1; ++i) + { + partitions[i] = Partition(first, currentLast); + first = currentLast; + ::std::advance(currentLast, range); + } + + // Last range may be shorter + assert(::std::distance(first, last) <= range); + partitions[P - 1] = Partition(first, last); +} + +// Given a range, re-arrange the items such that all elements smaller than +// the pivot precede all other values. Returns an Iterator to the first +// element not smaller than the pivot. +template +Iterator _stable_pivot_range(Iterator first, Iterator last, + const typename ::std::iterator_traits::value_type pivot, + StrictWeakOrdering comp = std::less< + typename ::std::iterator_traits::value_type>()) +{ + Iterator pivotIt = last; + while (first < last) + { + if (comp(*first, pivot)) + ++first; + else + { + Iterator high = first; + while ( (++high < last) && !comp(*high, pivot) ) + /* nop */; + if (high < last) + ::std::iter_swap(first, last); + first = pivotIt = ++high; + } + } + + return pivotIt; +} + +template +Iterator _pivot_range(Iterator first, Iterator last, + const typename ::std::iterator_traits::value_type pivot, + StrictWeakOrdering comp) +{ + while (first < last) + { + if (comp(*first, pivot)) + ++first; + else + { + while ( (first < --last) && !comp(*last, pivot) ) + /* nop */; + ::std::iter_swap(first, last); + } + } + + return last; +} + +template +void _partition_range_by_pivots(Iterator first, Iterator last, + const ::std::vector::value_type> &pivots, + ::std::vector< ::std::pair > &partitions, + StrictWeakOrdering comp, const unsigned P) +{ + assert(partitions.size() == P); + typedef ::std::pair Partition; + ::std::vector ptable(P); + ::std::vector::value_type> + pvts(pivots.size()); + + ::std::vector borders; + + ::std::vector used(pivots.size()); + ::std::fill(used.begin(), used.end(), false); + + borders.push_back(first); + borders.push_back(last); + partitions[0].first = first; + partitions[0].second = last; + for (unsigned p = 1; (1 << p) <= (int)P; ++p) + { + const int PROC = (1 << p); + const int PIVOTS = (1 << (p-1)); + assert(PIVOTS <= (int)pivots.size()); + + #pragma omp parallel for //default(none) shared(used, pvts) + for (int t = 0; t < PIVOTS; ++t) + { + const int index = int(P / PROC) + + 2 * t * int(P / PROC) - 1; + assert(index < (int)pivots.size()); + assert(!used[index]); + used[index] = true; + pvts[t] = pivots[index]; +/*::std::cout << "pvts T: " << t << " --> " << index << + " " << pvts[t] << ::std::endl;*/ + } + + #pragma omp parallel for //default(none) private(comp) +// shared(ptable, pvts, partitions) + for (int t = 0; t < PIVOTS; ++t) + ptable[t] = _pivot_range(partitions[t].first, + partitions[t].second, + pvts[t], comp); + + for (int i = 0; i < PIVOTS; ++i) + { +// ::std::cout << "ADD: " << ::std::distance(first, ptable[t]) << ::std::endl; + borders.push_back(ptable[i]); + } + + ::std::sort(borders.begin(), borders.end()); + + for (unsigned i = 0; i < borders.size() - 1; ++i) + { + partitions[i].first = borders[i]; + partitions[i].second = borders[i + 1]; + } + +/*::std::cout << "PASS: " << p << ::std::endl; + for (t = 0; t < (1 << p); ++t) +::std::cout << t << ": " << ::std::distance(first, partitions[t].first) + << " - " << ::std::distance(first, partitions[t].second) + << ::std::endl;*/ + } + + for (unsigned i = 0; i < pivots.size(); ++i) + if(!used[i]) + pvts[i] = pivots[i]; + + #pragma omp parallel for // default(none) private(t, comp) +// shared(used, ptable, pvts, partitions) + for (int t = 0; t < int(pivots.size()); ++t) + if (!used[t]) + ptable[t] = _pivot_range(partitions[t].first, + partitions[t].second, + pvts[t], comp); + + + for (unsigned i = 0; i < pivots.size(); ++i) + { + if (!used[i]) + { +// ::std::cout << "LAST ADD: " << ::std::distance(first, ptable[i]) +// << ::std::endl; + borders.push_back(ptable[i]); + } + } + + ::std::sort(borders.begin(), borders.end()); + + assert(borders.size() - 1 == P); + for (unsigned i = 0; i < P; ++i) + { + partitions[i].first = borders[i]; + partitions[i].second = borders[i + 1]; + } + +// ::std::cout << "LAST: " << p << ::std::endl; +// for (t = 0; t < P; ++t) +// ::std::cout << t << ": " << ::std::distance(first, partitions[t].first) +// << " - " << ::std::distance(first, partitions[t].second) +// << ::std::endl; + +} + +template +void _partition_range_stable_by_pivots(Iterator first, Iterator last, + const ::std::vector::value_type> &pivots, + ::std::vector< ::std::pair > &partitions, + std::less::value_type> comp, + const unsigned P) +{ + typedef ::std::pair Partition; + + Iterator start = first; + for (unsigned i = 0; i < P - 1; ++i) + { + Iterator low = start; + + while (low < last) + { + // Find a value not lower than the pivot. + while( (*low < pivots[i]) && (low < last) ) + ::std::advance(low, 1); + + // Entire range scanned ? + if (low == last) break; + + // Find a value lower than the pivot, starting from + // low, working our way up. + Iterator high = low; + ::std::advance(high, 1); + while( !(*high < pivots[i]) && (high < last) ) + ::std::advance(high, 1); + + // Entire range scanned ? + if (high == last) break; + + // Swap values + assert( !(*low +void _find_pivots(RandomAccessIterator first, RandomAccessIterator last, + ::std::vector::value_type> &pivots, + const unsigned P, unsigned SAMPLE_RATIO = 10) +{ + assert(SAMPLE_RATIO > 0); + const unsigned N = ::std::distance(first, last); + assert(N >= 2u*P); + + // Adjust the constant. Erm. + while (SAMPLE_RATIO * (P + 1) > N) + SAMPLE_RATIO /= 2; + + pivots.clear(); + pivots.reserve(P - 1); + + typedef typename + ::std::iterator_traits::value_type value_type; + + ::std::vector samples; + const unsigned NSAMPLES = SAMPLE_RATIO * P + SAMPLE_RATIO; + samples.reserve(NSAMPLES); + + for (unsigned i = 0; i < NSAMPLES; ++i) + { + const unsigned offset = i * (N-1) / (NSAMPLES - 1); + assert(offset < N); + samples.push_back(*(first + offset)); +// std::cout << "offset: " << offset << " sample: " << samples[i] << std::endl; + } + assert(samples.size() == NSAMPLES); + + // Sort samples to create relative ordering in data + ::std::sort(samples.begin(), samples.end()); + + // Take pivots from sampled data + for (unsigned i = 1; i < P; ++i) + { + pivots.push_back(samples[i * samples.size() / P]); +/*std::cout << "pivot: " << i << " idx: " << (i * samples.size() / P) + << " " << pivots[i-1] << std::endl;*/ + } + assert(pivots.size() == P - 1); +} + +} // namespace omptl + +#endif /* OMPTL_TOOLS_H */ diff --git a/3rdparty/libprojectm/projectM.cpp b/3rdparty/libprojectm/projectM.cpp new file mode 100755 index 000000000..209a028f2 --- /dev/null +++ b/3rdparty/libprojectm/projectM.cpp @@ -0,0 +1,909 @@ +/** +* projectM -- Milkdrop-esque visualisation SDK +* Copyright (C)2003-2004 projectM Team +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; either +* version 2.1 of the License, or (at your option) any later version. +* +* This library 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* See 'LICENSE.txt' included within this release +* +*/ + +#include "RenderItemMatcher.hpp" +#include "RenderItemMergeFunction.hpp" +#include "fatal.h" +#include "Common.hpp" + +#ifdef WIN32 +#include "win32-dirent.h" +#endif + +#include "timer.h" +#include +#ifdef LINUX +#include "time.h" +#endif + +#ifdef WIN32 +#include +#endif +#include "PipelineContext.hpp" +#include +#include "projectM.hpp" +#include "BeatDetect.hpp" +#include "Preset.hpp" +#include "PipelineMerger.hpp" +#include "PCM.hpp" //Sound data handler (buffering, FFT, etc.) + +#include + +#include "Renderer.hpp" +#include "PresetChooser.hpp" +#include "ConfigFile.h" +#include "TextureManager.hpp" +#include "TimeKeeper.hpp" +#include "RenderItemMergeFunction.hpp" + +#ifdef USE_THREADS +#include "pthread.h" + +pthread_mutex_t mutex; +pthread_cond_t condition; +pthread_t thread; + +#ifdef SYNC_PRESET_SWITCHES +pthread_mutex_t preset_mutex; +#endif +#endif + +projectM::~projectM() +{ + + #ifdef USE_THREADS + std::cout << "[projectM] thread "; + printf("c"); + running = false; + printf("l"); + pthread_cond_signal(&condition); + printf("e"); + pthread_mutex_unlock( &mutex ); + printf("a"); + pthread_detach(thread); + printf("n"); + pthread_cond_destroy(&condition); + printf("u"); + pthread_mutex_destroy( &mutex ); + #ifdef SYNC_PRESET_SWITCHES + pthread_mutex_destroy( &preset_mutex ); + #endif + + printf("p"); + std::cout << std::endl; + #endif + destroyPresetTools(); + + if ( renderer ) + delete ( renderer ); + if ( beatDetect ) + delete ( beatDetect ); + if ( _pcm ) { + delete ( _pcm ); + _pcm = 0; + } + + delete(_pipelineContext); + delete(_pipelineContext2); +} + +unsigned projectM::initRenderToTexture() +{ + return renderer->initRenderToTexture(); +} + +void projectM::projectM_resetTextures() +{ + renderer->ResetTextures(); +} + + +projectM::projectM ( std::string config_file, int flags) : +beatDetect ( 0 ), renderer ( 0 ), _pcm(0), m_presetPos(0), m_flags(flags), _pipelineContext(new PipelineContext()), _pipelineContext2(new PipelineContext()) +{ + readConfig(config_file); + projectM_reset(); + projectM_resetGL(_settings.windowWidth, _settings.windowHeight); + +} + +projectM::projectM(Settings settings, int flags): +beatDetect ( 0 ), renderer ( 0 ), _pcm(0), m_presetPos(0), m_flags(flags), _pipelineContext(new PipelineContext()), _pipelineContext2(new PipelineContext()) +{ + readSettings(settings); + projectM_reset(); + projectM_resetGL(_settings.windowWidth, _settings.windowHeight); +} + + +bool projectM::writeConfig(const std::string & configFile, const Settings & settings) { + + ConfigFile config ( configFile ); + + config.add("Mesh X", settings.meshX); + config.add("Mesh Y", settings.meshY); + config.add("Texture Size", settings.textureSize); + config.add("FPS", settings.fps); + config.add("Window Width", settings.windowWidth); + config.add("Window Height", settings.windowHeight); + config.add("Smooth Preset Duration", settings.smoothPresetDuration); + config.add("Preset Duration", settings.presetDuration); + config.add("Preset Path", settings.presetURL); + config.add("Title Font", settings.titleFontURL); + config.add("Menu Font", settings.menuFontURL); + config.add("Hard Cut Sensitivity", settings.beatSensitivity); + config.add("Aspect Correction", settings.aspectCorrection); + config.add("Easter Egg Parameter", settings.easterEgg); + config.add("Shuffle Enabled", settings.shuffleEnabled); + config.add("Soft Cut Ratings Enabled", settings.softCutRatingsEnabled); + std::fstream file(configFile.c_str()); + if (file) { + file << config; + return true; + } else + return false; +} + + + +void projectM::readConfig (const std::string & configFile ) +{ + std::cout << "[projectM] config file: " << configFile << std::endl; + + ConfigFile config ( configFile ); + _settings.meshX = config.read ( "Mesh X", 32 ); + _settings.meshY = config.read ( "Mesh Y", 24 ); + _settings.textureSize = config.read ( "Texture Size", 512 ); + _settings.fps = config.read ( "FPS", 35 ); + _settings.windowWidth = config.read ( "Window Width", 512 ); + _settings.windowHeight = config.read ( "Window Height", 512 ); + _settings.smoothPresetDuration = config.read + ( "Smooth Preset Duration", config.read("Smooth Transition Duration", 10)); + _settings.presetDuration = config.read ( "Preset Duration", 15 ); + + #ifdef LINUX + _settings.presetURL = config.read ( "Preset Path", CMAKE_INSTALL_PREFIX "/share/projectM/presets" ); + #endif + + #ifdef __APPLE__ + /// @bug awful hardcoded hack- need to add intelligence to cmake wrt bundling - carm + _settings.presetURL = config.read ( "Preset Path", "../Resources/presets" ); + #endif + + #ifdef WIN32 + _settings.presetURL = config.read ( "Preset Path", CMAKE_INSTALL_PREFIX "/share/projectM/presets" ); + #endif + + #ifdef __APPLE__ + _settings.titleFontURL = config.read + ( "Title Font", "../Resources/fonts/Vera.tff"); + _settings.menuFontURL = config.read + ( "Menu Font", "../Resources/fonts/VeraMono.ttf"); + #endif + + #ifdef LINUX + _settings.titleFontURL = config.read + ( "Title Font", CMAKE_INSTALL_PREFIX "/share/projectM/fonts/Vera.ttf" ); + _settings.menuFontURL = config.read + ( "Menu Font", CMAKE_INSTALL_PREFIX "/share/projectM/fonts/VeraMono.ttf" ); + #endif + + #ifdef WIN32 + _settings.titleFontURL = config.read + ( "Title Font", CMAKE_INSTALL_PREFIX "/share/projectM/fonts/Vera.ttf" ); + _settings.menuFontURL = config.read + ( "Menu Font", CMAKE_INSTALL_PREFIX "/share/projectM/fonts/VeraMono.ttf" ); + #endif + + + _settings.shuffleEnabled = config.read ( "Shuffle Enabled", true); + + _settings.easterEgg = config.read ( "Easter Egg Parameter", 0.0); + _settings.softCutRatingsEnabled = + config.read ( "Soft Cut Ratings Enabled", false); + + projectM_init ( _settings.meshX, _settings.meshY, _settings.fps, + _settings.textureSize, _settings.windowWidth,_settings.windowHeight); + + + _settings.beatSensitivity = beatDetect->beat_sensitivity = config.read ( "Hard Cut Sensitivity", 10.0 ); + + + if ( config.read ( "Aspect Correction", true ) ) + { + _settings.aspectCorrection = true; + renderer->correction = true; + } + else + { + _settings.aspectCorrection = false; + renderer->correction = false; + } + + +} + + +void projectM::readSettings (const Settings & settings ) +{ + _settings.meshX = settings.meshX; + _settings.meshY = settings.meshY; + _settings.textureSize = settings.textureSize; + _settings.fps = settings.fps; + _settings.windowWidth = settings.windowWidth; + _settings.windowHeight = settings.windowHeight; + _settings.smoothPresetDuration = settings.smoothPresetDuration; + _settings.presetDuration = settings.presetDuration; + _settings.softCutRatingsEnabled = settings.softCutRatingsEnabled; + + _settings.presetURL = settings.presetURL; + _settings.titleFontURL = settings.titleFontURL; + _settings.menuFontURL = settings.menuFontURL; + _settings.shuffleEnabled = settings.shuffleEnabled; + + _settings.easterEgg = settings.easterEgg; + + projectM_init ( _settings.meshX, _settings.meshY, _settings.fps, + _settings.textureSize, _settings.windowWidth,_settings.windowHeight); + + + _settings.beatSensitivity = settings.beatSensitivity; + _settings.aspectCorrection = settings.aspectCorrection; + +} + +#ifdef USE_THREADS +static void *thread_callback(void *prjm) { + projectM *p = (projectM *)prjm; + + p->thread_func(prjm); + return NULL;} + + + void *projectM::thread_func(void *vptr_args) + { + pthread_mutex_lock( &mutex ); + // printf("in thread: %f\n", timeKeeper->PresetProgressB()); + while (true) + { + pthread_cond_wait( &condition, &mutex ); + if(!running) + { + pthread_mutex_unlock( &mutex ); + return NULL; + } + evaluateSecondPreset(); + } + } + #endif + + void projectM::evaluateSecondPreset() + { + pipelineContext2().time = timeKeeper->GetRunningTime(); + pipelineContext2().frame = timeKeeper->PresetFrameB(); + pipelineContext2().progress = timeKeeper->PresetProgressB(); + + m_activePreset2->Render(*beatDetect, pipelineContext2()); + } + + void projectM::renderFrame() + { + #ifdef SYNC_PRESET_SWITCHES + pthread_mutex_lock(&preset_mutex); + #endif + + #ifdef DEBUG + char fname[1024]; + FILE *f = NULL; + int index = 0; + int x, y; + #endif + + timeKeeper->UpdateTimers(); +/* + if (timeKeeper->IsSmoothing()) + { + printf("Smoothing A:%f, B:%f, S:%f\n", timeKeeper->PresetProgressA(), timeKeeper->PresetProgressB(), timeKeeper->SmoothRatio()); + } + else + { + printf(" A:%f\n", timeKeeper->PresetProgressA()); + }*/ + + mspf= ( int ) ( 1000.0/ ( float ) settings().fps ); //milliseconds per frame + + /// @bug who is responsible for updating this now?" + pipelineContext().time = timeKeeper->GetRunningTime(); + pipelineContext().frame = timeKeeper->PresetFrameA(); + pipelineContext().progress = timeKeeper->PresetProgressA(); + + //m_activePreset->Render(*beatDetect, pipelineContext()); + + beatDetect->detectFromSamples(); + + //m_activePreset->evaluateFrame(); + + //if the preset isn't locked and there are more presets + if ( renderer->noSwitch==false && !m_presetChooser->empty() ) + { + //if preset is done and we're not already switching + if ( timeKeeper->PresetProgressA()>=1.0 && !timeKeeper->IsSmoothing()) + { + + if (settings().shuffleEnabled) + selectRandom(false); + else + selectNext(false); + + } + + else if ((beatDetect->vol-beatDetect->vol_old>beatDetect->beat_sensitivity ) && + timeKeeper->CanHardCut()) + { + // printf("Hard Cut\n"); + if (settings().shuffleEnabled) + selectRandom(true); + else + selectNext(true); + } + } + + + if ( timeKeeper->IsSmoothing() && timeKeeper->SmoothRatio() <= 1.0 && !m_presetChooser->empty() ) + { + + + // printf("start thread\n"); + assert ( m_activePreset2.get() ); + + #ifdef USE_THREADS + + pthread_cond_signal(&condition); + pthread_mutex_unlock( &mutex ); + #endif + m_activePreset->Render(*beatDetect, pipelineContext()); + + #ifdef USE_THREADS + pthread_mutex_lock( &mutex ); + #else + evaluateSecondPreset(); + #endif + + Pipeline pipeline; + + pipeline.setStaticPerPixel(settings().meshX, settings().meshY); + + assert(_matcher); + PipelineMerger::mergePipelines( m_activePreset->pipeline(), + m_activePreset2->pipeline(), pipeline, + _matcher->matchResults(), + *_merger, timeKeeper->SmoothRatio()); + + renderer->RenderFrame(pipeline, pipelineContext()); + + pipeline.drawables.clear(); + + /* + while (!pipeline.drawables.empty()) { + delete(pipeline.drawables.back()); + pipeline.drawables.pop_back(); + } */ + + } + else + { + + + if ( timeKeeper->IsSmoothing() && timeKeeper->SmoothRatio() > 1.0 ) + { + //printf("End Smooth\n"); + m_activePreset = m_activePreset2; + timeKeeper->EndSmoothing(); + } + //printf("Normal\n"); + + m_activePreset->Render(*beatDetect, pipelineContext()); + renderer->RenderFrame (m_activePreset->pipeline(), pipelineContext()); + + + } + + // std::cout<< m_activePreset->absoluteFilePath()<presetName = m_activePreset->absoluteFilePath(); + + + + count++; + #ifndef WIN32 + /** Frame-rate limiter */ + /** Compute once per preset */ + if ( this->count%100==0 ) + { + this->renderer->realfps=100.0/ ( ( getTicks ( &timeKeeper->startTime )-this->fpsstart ) /1000 ); + this->fpsstart=getTicks ( &timeKeeper->startTime ); + } + + int timediff = getTicks ( &timeKeeper->startTime )-this->timestart; + + if ( timediff < this->mspf ) + { + // printf("%s:",this->mspf-timediff); + int sleepTime = ( unsigned int ) ( this->mspf-timediff ) * 1000; + // DWRITE ( "usleep: %d\n", sleepTime ); + if ( sleepTime > 0 && sleepTime < 100000 ) + { + if ( usleep ( sleepTime ) != 0 ) {}} + } + this->timestart=getTicks ( &timeKeeper->startTime ); + #endif /** !WIN32 */ + + #ifdef SYNC_PRESET_SWITCHES + pthread_mutex_unlock(&preset_mutex); + #endif + + } + + void projectM::projectM_reset() + { + this->mspf = 0; + this->timed = 0; + this->timestart = 0; + this->count = 0; + + this->fpsstart = 0; + + projectM_resetengine(); + } + + void projectM::projectM_init ( int gx, int gy, int fps, int texsize, int width, int height ) + { + + /** Initialise start time */ + timeKeeper = new TimeKeeper(_settings.presetDuration,_settings.smoothPresetDuration, _settings.easterEgg); + + /** Nullify frame stash */ + + /** Initialise per-pixel matrix calculations */ + /** We need to initialise this before the builtin param db otherwise bass/mid etc won't bind correctly */ + assert ( !beatDetect ); + + if (!_pcm) + _pcm = new PCM(); + assert(pcm()); + beatDetect = new BeatDetect ( _pcm ); + + if ( _settings.fps > 0 ) + mspf= ( int ) ( 1000.0/ ( float ) _settings.fps ); + else mspf = 0; + + this->renderer = new Renderer ( width, height, gx, gy, texsize, beatDetect, settings().presetURL, settings().titleFontURL, settings().menuFontURL ); + + running = true; + + initPresetTools(gx, gy); + + + #ifdef USE_THREADS + pthread_mutex_init(&mutex, NULL); + + #ifdef SYNC_PRESET_SWITCHES + pthread_mutex_init(&preset_mutex, NULL); + #endif + + pthread_cond_init(&condition, NULL); + if (pthread_create(&thread, NULL, thread_callback, this) != 0) + { + + std::cerr << "[projectM] failed to allocate a thread! try building with option USE_THREADS turned off" << std::endl;; + exit(EXIT_FAILURE); + } + pthread_mutex_lock( &mutex ); + #endif + + /// @bug order of operatoins here is busted + //renderer->setPresetName ( m_activePreset->name() ); + timeKeeper->StartPreset(); + assert(pcm()); + + } + + /* Reinitializes the engine variables to a default (conservative and sane) value */ + void projectM::projectM_resetengine() + { + + if ( beatDetect != NULL ) + { + beatDetect->reset(); + } + + } + + /** Resets OpenGL state */ + void projectM::projectM_resetGL ( int w, int h ) + { + + /** Stash the new dimensions */ + + renderer->reset ( w,h ); + } + + /** Sets the title to display */ + void projectM::projectM_setTitle ( std::string title ) { + + if ( title != renderer->title ) + { + renderer->title=title; + renderer->drawtitle=1; + } + } + + + int projectM::initPresetTools(int gx, int gy) + { + + /* Set the seed to the current time in seconds */ + srand ( time ( NULL ) ); + + std::string url = (m_flags & FLAG_DISABLE_PLAYLIST_LOAD) ? std::string() : settings().presetURL; + + if ( ( m_presetLoader = new PresetLoader ( gx, gy, url) ) == 0 ) + { + m_presetLoader = 0; + std::cerr << "[projectM] error allocating preset loader" << std::endl; + return PROJECTM_FAILURE; + } + + if ( ( m_presetChooser = new PresetChooser ( *m_presetLoader, settings().softCutRatingsEnabled ) ) == 0 ) + { + delete ( m_presetLoader ); + + m_presetChooser = 0; + m_presetLoader = 0; + + std::cerr << "[projectM] error allocating preset chooser" << std::endl; + return PROJECTM_FAILURE; + } + + // Start the iterator + if (!m_presetPos) + m_presetPos = new PresetIterator(); + + // Initialize a preset queue position as well + // m_presetQueuePos = new PresetIterator(); + + // Start at end ptr- this allows next/previous to easily be done from this position. + *m_presetPos = m_presetChooser->end(); + + // Load idle preset + std::cerr << "[projectM] Allocating idle preset..." << std::endl; + m_activePreset = m_presetLoader->loadPreset + ("idle://Geiss & Sperl - Feedback (projectM idle HDR mix).milk"); + + renderer->SetPipeline(m_activePreset->pipeline()); + + // Case where no valid presets exist in directory. Could also mean + // playlist initialization was deferred + if (m_presetChooser->empty()) + { + //std::cerr << "[projectM] warning: no valid files found in preset directory \"" + //<< m_presetLoader->directoryName() << "\"" << std::endl; + } + + _matcher = new RenderItemMatcher(); + _merger = new MasterRenderItemMerge(); + //_merger->add(new WaveFormMergeFunction()); + _merger->add(new ShapeMerge()); + _merger->add(new BorderMerge()); + //_merger->add(new BorderMergeFunction()); + + /// @bug These should be requested by the preset factories. + _matcher->distanceFunction().addMetric(new ShapeXYDistance()); + + //std::cerr << "[projectM] Idle preset allocated." << std::endl; + + projectM_resetengine(); + + //std::cerr << "[projectM] engine has been reset." << std::endl; + return PROJECTM_SUCCESS; + } + + void projectM::destroyPresetTools() + { + + if ( m_presetPos ) + delete ( m_presetPos ); + + m_presetPos = 0; + + if ( m_presetChooser ) + delete ( m_presetChooser ); + + m_presetChooser = 0; + + if ( m_presetLoader ) + delete ( m_presetLoader ); + + m_presetLoader = 0; + + } + + /// @bug queuePreset case isn't handled + void projectM::removePreset(unsigned int index) { + + unsigned int chooserIndex = **m_presetPos; + + m_presetLoader->removePreset(index); + + + // Case: no more presets, set iterator to end + if (m_presetChooser->empty()) + *m_presetPos = m_presetChooser->end(); + + // Case: chooser index has become one less due to removal of an index below it + else if (chooserIndex > index) { + chooserIndex--; + *m_presetPos = m_presetChooser->begin(chooserIndex); + } + + // Case: we have deleted the active preset position + // Set iterator to end of chooser + else if (chooserIndex == index) { + *m_presetPos = m_presetChooser->end(); + } + + + + } + + unsigned int projectM::addPresetURL ( const std::string & presetURL, const std::string & presetName, const RatingList & ratings) + { + bool restorePosition = false; + + if (*m_presetPos == m_presetChooser->end()) + restorePosition = true; + + int index = m_presetLoader->addPresetURL ( presetURL, presetName, ratings); + + if (restorePosition) + *m_presetPos = m_presetChooser->end(); + + return index; + } + + void projectM::selectPreset ( unsigned int index, bool hardCut) + { + + if (m_presetChooser->empty()) + return; + + if (!hardCut) { + timeKeeper->StartSmoothing(); + } + + *m_presetPos = m_presetChooser->begin(index); + + if (!hardCut) { + switchPreset(m_activePreset2); + } else { + switchPreset(m_activePreset); + timeKeeper->StartPreset(); + } + + presetSwitchedEvent(hardCut, **m_presetPos); + +} + + +void projectM::selectRandom(const bool hardCut) { + + if (m_presetChooser->empty()) + return; + + if (!hardCut) { + timeKeeper->StartSmoothing(); + } + + *m_presetPos = m_presetChooser->weightedRandom(hardCut); + + if (!hardCut) { + switchPreset(m_activePreset2); + } else { + switchPreset(m_activePreset); + timeKeeper->StartPreset(); + } + + presetSwitchedEvent(hardCut, **m_presetPos); + +} + +void projectM::selectPrevious(const bool hardCut) { + + if (m_presetChooser->empty()) + return; + + if (!hardCut) { + timeKeeper->StartSmoothing(); + } + + m_presetChooser->previousPreset(*m_presetPos); + + if (!hardCut) { + switchPreset(m_activePreset2); + } else { + switchPreset(m_activePreset); + timeKeeper->StartPreset(); + } + + presetSwitchedEvent(hardCut, **m_presetPos); + +// m_activePreset = m_presetPos->allocate(); +// renderer->SetPipeline(m_activePreset->pipeline()); +// renderer->setPresetName(m_activePreset->name()); + + //timeKeeper->StartPreset(); + +} + +void projectM::selectNext(const bool hardCut) { + + if (m_presetChooser->empty()) + return; + + if (!hardCut) { + timeKeeper->StartSmoothing(); + std::cout << "start smoothing" << std::endl; + } + + m_presetChooser->nextPreset(*m_presetPos); + + if (!hardCut) { + switchPreset(m_activePreset2); + } else { + switchPreset(m_activePreset); + timeKeeper->StartPreset(); + } + presetSwitchedEvent(hardCut, **m_presetPos); + + +} + +/** + * + * @param targetPreset + */ +void projectM::switchPreset(std::auto_ptr & targetPreset) { + + #ifdef SYNC_PRESET_SWITCHES + pthread_mutex_lock(&preset_mutex); + #endif + + targetPreset = m_presetPos->allocate(); + + // Set preset name here- event is not done because at the moment this function is oblivious to smooth/hard switches + renderer->setPresetName(targetPreset->name()); + renderer->SetPipeline(targetPreset->pipeline()); + + #ifdef SYNC_PRESET_SWITCHES + pthread_mutex_unlock(&preset_mutex); + #endif + } + + void projectM::setPresetLock ( bool isLocked ) + { + renderer->noSwitch = isLocked; + } + + bool projectM::isPresetLocked() const + { + return renderer->noSwitch; + } + + std::string projectM::getPresetURL ( unsigned int index ) const + { + return m_presetLoader->getPresetURL(index); + } + + int projectM::getPresetRating ( unsigned int index, const PresetRatingType ratingType) const + { + return m_presetLoader->getPresetRating(index, ratingType); + } + + std::string projectM::getPresetName ( unsigned int index ) const + { + return m_presetLoader->getPresetName(index); + } + + void projectM::clearPlaylist ( ) + { + m_presetLoader->clear(); + *m_presetPos = m_presetChooser->end(); + } + + void projectM::selectPresetPosition(unsigned int index) { + *m_presetPos = m_presetChooser->begin(index); + } + + bool projectM::selectedPresetIndex(unsigned int & index) const { + + if (*m_presetPos == m_presetChooser->end()) + return false; + + index = **m_presetPos; + return true; + } + + + bool projectM::presetPositionValid() const { + + return (*m_presetPos != m_presetChooser->end()); + } + + unsigned int projectM::getPlaylistSize() const + { + return m_presetLoader->size(); + } + + void projectM:: changePresetRating (unsigned int index, int rating, const PresetRatingType ratingType) { + m_presetLoader->setRating(index, rating, ratingType); + } + + void projectM::insertPresetURL(unsigned int index, const std::string & presetURL, const std::string & presetName, const RatingList & ratings) + { + bool atEndPosition = false; + + int newSelectedIndex; + + + if (*m_presetPos == m_presetChooser->end()) // Case: preset not selected + { + atEndPosition = true; + } + + else if (**m_presetPos < index) // Case: inserting before selected preset + { + newSelectedIndex = **m_presetPos; + } + + else if (**m_presetPos > index) // Case: inserting after selected preset + { + newSelectedIndex++; + } + + else // Case: inserting at selected preset + { + newSelectedIndex++; + } + + m_presetLoader->insertPresetURL (index, presetURL, presetName, ratings); + + if (atEndPosition) + *m_presetPos = m_presetChooser->end(); + else + *m_presetPos = m_presetChooser->begin(newSelectedIndex); + + + } + +void projectM::changePresetName ( unsigned int index, std::string name ) { + m_presetLoader->setPresetName(index, name); +} + + diff --git a/3rdparty/libprojectm/projectM.dsp b/3rdparty/libprojectm/projectM.dsp new file mode 100755 index 000000000..06efa3d37 --- /dev/null +++ b/3rdparty/libprojectm/projectM.dsp @@ -0,0 +1,381 @@ +# Microsoft Developer Studio Project File - Name="projectM" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=projectM - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "projectM.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "projectM.mak" CFG="projectM - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "projectM - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "projectM - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "projectM - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "projectM - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "DEBUG" /FD /GZ /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ENDIF + +# Begin Target + +# Name "projectM - Win32 Release" +# Name "projectM - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\beat_detect.c +# End Source File +# Begin Source File + +SOURCE=.\browser.c +# End Source File +# Begin Source File + +SOURCE=.\builtin_funcs.c +# End Source File +# Begin Source File + +SOURCE=.\console_interface.c +# End Source File +# Begin Source File + +SOURCE=.\custom_shape.c +# End Source File +# Begin Source File + +SOURCE=.\custom_wave.c +# End Source File +# Begin Source File + +SOURCE=.\editor.c +# End Source File +# Begin Source File + +SOURCE=.\eval.c +# End Source File +# Begin Source File + +SOURCE=.\fftsg.c +# End Source File +# Begin Source File + +SOURCE=.\func.c +# End Source File +# Begin Source File + +SOURCE=.\glConsole.c +# End Source File +# Begin Source File + +SOURCE=.\glf.c +# End Source File +# Begin Source File + +SOURCE=.\init_cond.c +# End Source File +# Begin Source File + +SOURCE=.\menu.c +# End Source File +# Begin Source File + +SOURCE=.\param.c +# End Source File +# Begin Source File + +SOURCE=.\parser.c +# End Source File +# Begin Source File + +SOURCE=.\PCM.c +# End Source File +# Begin Source File + +SOURCE=.\per_frame_eqn.c +# End Source File +# Begin Source File + +SOURCE=.\per_pixel_eqn.c +# End Source File +# Begin Source File + +SOURCE=.\preset.c +# End Source File +# Begin Source File + +SOURCE=.\projectm.c +# End Source File +# Begin Source File + +SOURCE=.\pbuffer.c +# End Source File +# Begin Source File + +SOURCE=.\splaytree.c +# End Source File +# Begin Source File + +SOURCE=.\timer.c +# End Source File +# Begin Source File + +SOURCE=.\tree_types.c +# End Source File +# Begin Source File + +SOURCE=".\win32-dirent.c" +# End Source File +# Begin Source File + +SOURCE=.\wipemalloc.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\beat_detect.h +# End Source File +# Begin Source File + +SOURCE=.\browser.h +# End Source File +# Begin Source File + +SOURCE=.\builtin_funcs.h +# End Source File +# Begin Source File + +SOURCE=.\common.h +# End Source File +# Begin Source File + +SOURCE=.\compare.h +# End Source File +# Begin Source File + +SOURCE=.\config.h +# End Source File +# Begin Source File + +SOURCE=.\console_interface.h +# End Source File +# Begin Source File + +SOURCE=.\custom_shape.h +# End Source File +# Begin Source File + +SOURCE=.\custom_shape_types.h +# End Source File +# Begin Source File + +SOURCE=.\custom_wave.h +# End Source File +# Begin Source File + +SOURCE=.\custom_wave_types.h +# End Source File +# Begin Source File + +SOURCE=.\editor.h +# End Source File +# Begin Source File + +SOURCE=.\eval.h +# End Source File +# Begin Source File + +SOURCE=.\event.h +# End Source File +# Begin Source File + +SOURCE=.\expr_types.h +# End Source File +# Begin Source File + +SOURCE=.\fatal.h +# End Source File +# Begin Source File + +SOURCE=.\fftsg.h +# End Source File +# Begin Source File + +SOURCE=.\func.h +# End Source File +# Begin Source File + +SOURCE=.\func_types.h +# End Source File +# Begin Source File + +SOURCE=.\glConsole.h +# End Source File +# Begin Source File + +SOURCE=.\glf.h +# End Source File +# Begin Source File + +SOURCE=.\idle_preset.h +# End Source File +# Begin Source File + +SOURCE=.\init_cond.h +# End Source File +# Begin Source File + +SOURCE=.\init_cond_types.h +# End Source File +# Begin Source File + +SOURCE=.\interface_types.h +# End Source File +# Begin Source File + +SOURCE=.\menu.h +# End Source File +# Begin Source File + +SOURCE=.\param.h +# End Source File +# Begin Source File + +SOURCE=.\param_types.h +# End Source File +# Begin Source File + +SOURCE=.\parser.h +# End Source File +# Begin Source File + +SOURCE=.\PCM.h +# End Source File +# Begin Source File + +SOURCE=.\per_frame_eqn.h +# End Source File +# Begin Source File + +SOURCE=.\per_frame_eqn_types.h +# End Source File +# Begin Source File + +SOURCE=.\per_pixel_eqn.h +# End Source File +# Begin Source File + +SOURCE=.\per_pixel_eqn_types.h +# End Source File +# Begin Source File + +SOURCE=.\per_point_types.h +# End Source File +# Begin Source File + +SOURCE=.\preset.h +# End Source File +# Begin Source File + +SOURCE=.\preset_types.h +# End Source File +# Begin Source File + +SOURCE=.\projectM.h +# End Source File +# Begin Source File + +SOURCE=.\pbuffer.h +# End Source File +# Begin Source File + +SOURCE=.\splaytree.h +# End Source File +# Begin Source File + +SOURCE=.\splaytree_types.h +# End Source File +# Begin Source File + +SOURCE=.\timer.h +# End Source File +# Begin Source File + +SOURCE=.\tree_types.h +# End Source File +# Begin Source File + +SOURCE=".\win32-dirent.h" +# End Source File +# Begin Source File + +SOURCE=.\wipemalloc.h +# End Source File +# End Group +# End Target +# End Project diff --git a/3rdparty/libprojectm/projectM.hpp b/3rdparty/libprojectm/projectM.hpp new file mode 100755 index 000000000..9834bf4a9 --- /dev/null +++ b/3rdparty/libprojectm/projectM.hpp @@ -0,0 +1,324 @@ +/* + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id: projectM.hpp,v 1.1.1.1 2005/12/23 18:05:11 psperl Exp $ + * + * Encapsulation of ProjectM engine + * + * $Log$ + */ + +#ifndef _PROJECTM_HPP +#define _PROJECTM_HPP + +#ifdef WIN32 +#include "win32-dirent.h" +#else +#include +#endif /** WIN32 */ +#include +#include +#include +#include +#ifndef WIN32 +#include +#endif +#include + +#ifdef MACOS +//#include +//#include +//#include +#else +#ifdef WIN32 +#include +#endif /** WIN32 */ + +#endif /** MACOS */ +#ifdef WIN322 +#define inline +#endif /** WIN32 */ + +#include "dlldefs.h" +#include "event.h" +#include "fatal.h" + +class PipelineContext; +#include "PCM.hpp" +class BeatDetect; +class PCM; +class Func; +class Renderer; +class Preset; +class PresetIterator; +class PresetChooser; +class PresetLoader; +class TimeKeeper; +class Pipeline; +class RenderItemMatcher; +class MasterRenderItemMerge; + +#include "Common.hpp" + +#include +#ifdef WIN32 +#pragma warning (disable:4244) +#pragma warning (disable:4305) +#endif /** WIN32 */ + +#ifdef MACOS2 +#define inline +#endif + +/** KEEP THIS UP TO DATE! */ +#define PROJECTM_VERSION "2.0.00" +#define PROJECTM_TITLE "projectM 2.0.00" + +/** Interface types */ +typedef enum { + MENU_INTERFACE, + SHELL_INTERFACE, + EDITOR_INTERFACE, + DEFAULT_INTERFACE, + BROWSER_INTERFACE + } interface_t; + +/// A functor class that allows users of this library to specify random preset behavior +class RandomizerFunctor { + + public: + RandomizerFunctor(PresetChooser & chooser) ; + virtual ~RandomizerFunctor(); + virtual double operator() (int index); + private: + const PresetChooser & m_chooser; +}; + +class DLLEXPORT projectM +{ +public: + static const int FLAG_NONE = 0; + static const int FLAG_DISABLE_PLAYLIST_LOAD = 1 << 0; + + struct Settings { + int meshX; + int meshY; + int fps; + int textureSize; + int windowWidth; + int windowHeight; + std::string presetURL; + std::string titleFontURL; + std::string menuFontURL; + int smoothPresetDuration; + int presetDuration; + float beatSensitivity; + bool aspectCorrection; + float easterEgg; + bool shuffleEnabled; + bool softCutRatingsEnabled; + }; + + projectM(std::string config_file, int flags = FLAG_NONE); + projectM(Settings settings, int flags = FLAG_NONE); + + //DLLEXPORT projectM(int gx, int gy, int fps, int texsize, int width, int height,std::string preset_url,std::string title_fonturl, std::string title_menuurl); + + void projectM_resetGL( int width, int height ); + void projectM_resetTextures(); + void projectM_setTitle( std::string title ); + void renderFrame(); + unsigned initRenderToTexture(); + void key_handler( projectMEvent event, + projectMKeycode keycode, projectMModifier modifier ); + + virtual ~projectM(); + + + + + + const Settings & settings() const { + return _settings; + } + + /// Writes a settings configuration to the specified file + static bool writeConfig(const std::string & configFile, const Settings & settings); + + + /// Sets preset iterator position to the passed in index + void selectPresetPosition(unsigned int index); + + /// Plays a preset immediately + void selectPreset(unsigned int index, bool hardCut = true); + + /// Removes a preset from the play list. If it is playing then it will continue as normal until next switch + void removePreset(unsigned int index); + + /// Sets the randomization functor. If set to null, the traversal will move in order according to the playlist + void setRandomizer(RandomizerFunctor * functor); + + /// Tell projectM to play a particular preset when it chooses to switch + /// If the preset is locked the queued item will be not switched to until the lock is released + /// Subsequent calls to this function effectively nullifies previous calls. + void queuePreset(unsigned int index); + + /// Returns true if a preset is queued up to play next + bool isPresetQueued() const; + + /// Removes entire playlist, The currently loaded preset will end up sticking until new presets are added + void clearPlaylist(); + + /// Turn on or off a lock that prevents projectM from switching to another preset + void setPresetLock(bool isLocked); + + /// Returns true if the active preset is locked + bool isPresetLocked() const; + + /// Returns index of currently active preset. In the case where the active + /// preset was removed from the playlist, this function will return the element + /// before active preset (thus the next in order preset is invariant with respect + /// to the removal) + bool selectedPresetIndex(unsigned int & index) const; + + /// Add a preset url to the play list. Appended to bottom. Returns index of preset + unsigned int addPresetURL(const std::string & presetURL, const std::string & presetName, const RatingList & ratingList); + + /// Insert a preset url to the play list at the suggested index. + void insertPresetURL(unsigned int index, + const std::string & presetURL, const std::string & presetName, const RatingList & ratingList); + + /// Returns true if the selected preset position points to an actual preset in the + /// currently loaded playlist + bool presetPositionValid() const; + + /// Returns the url associated with a preset index + std::string getPresetURL(unsigned int index) const; + + /// Returns the preset name associated with a preset index + std::string getPresetName ( unsigned int index ) const; + + void changePresetName ( unsigned int index, std::string name ); + + /// Returns the rating associated with a preset index + int getPresetRating (unsigned int index, const PresetRatingType ratingType) const; + + void changePresetRating (unsigned int index, int rating, const PresetRatingType ratingType); + + /// Returns the size of the play list + unsigned int getPlaylistSize() const; + + void evaluateSecondPreset(); + + inline void setShuffleEnabled(bool value) + { + _settings.shuffleEnabled = value; + + /// idea@ call a virtualfunction shuffleChanged() + } + + + inline bool isShuffleEnabled() const + { + return _settings.shuffleEnabled; + } + + /// Occurs when active preset has switched. Switched to index is returned + virtual void presetSwitchedEvent(bool isHardCut, unsigned int index) const {}; + virtual void shuffleEnabledValueChanged(bool isEnabled) const {}; + + + inline PCM * pcm() { + return _pcm; + } + void *thread_func(void *vptr_args); + PipelineContext & pipelineContext() { return *_pipelineContext; } + PipelineContext & pipelineContext2() { return *_pipelineContext2; } + +private: + PCM * _pcm; + double sampledPresetDuration(); + BeatDetect * beatDetect; + Renderer *renderer; + PipelineContext * _pipelineContext; + PipelineContext * _pipelineContext2; + Settings _settings; + + + int wvw; //windowed dimensions + int wvh; + + /** Timing information */ + int mspf; + int timed; + int timestart; + int count; + float fpsstart; + + void readConfig(const std::string &configFile); + void readSettings(const Settings &settings); + void projectM_init(int gx, int gy, int fps, int texsize, int width, int height); + void projectM_reset(); + void selectPrevious(const bool); + void selectNext(const bool); + void selectRandom(const bool); + + void projectM_initengine(); + void projectM_resetengine(); + + /// Initializes preset loading / management libraries + int initPresetTools(int gx, int gy); + + /// Deinitialize all preset related tools. Usually done before projectM cleanup + void destroyPresetTools(); + + void default_key_handler( projectMEvent event, projectMKeycode keycode ); + /// The current position of the directory iterator + PresetIterator * m_presetPos; + + /// Required by the preset chooser. Manages a loaded preset directory + PresetLoader * m_presetLoader; + + /// Provides accessor functions to choose presets + PresetChooser * m_presetChooser; + + /// Currently loaded preset + std::auto_ptr m_activePreset; + + /// Destination preset when smooth preset switching + std::auto_ptr m_activePreset2; + + TimeKeeper *timeKeeper; + + int m_flags; + + RenderItemMatcher * _matcher; + MasterRenderItemMerge * _merger; + + bool running; + + Pipeline* currentPipe; + +void switchPreset(std::auto_ptr & targetPreset); + + +}; +#endif diff --git a/3rdparty/libprojectm/resource.h b/3rdparty/libprojectm/resource.h new file mode 100644 index 000000000..a0b6e9601 --- /dev/null +++ b/3rdparty/libprojectm/resource.h @@ -0,0 +1,14 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by libprojectM.rc + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/3rdparty/libprojectm/sdltoprojectM.h b/3rdparty/libprojectm/sdltoprojectM.h new file mode 100755 index 000000000..d2a974db0 --- /dev/null +++ b/3rdparty/libprojectm/sdltoprojectM.h @@ -0,0 +1,165 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id: sdltoprojectM.hpp,v 1.1 2004/10/08 00:35:28 cvs Exp $ + * + * Translates SDL -> projectM variables + * + * $Log: sdltoprojectM.hpp,v $ + * Revision 1.1 2004/10/08 00:35:28 cvs + * Moved and imported + * + * Revision 1.1.1.1 2004/10/04 12:56:00 cvs + * Imported + * + */ + +#ifndef _SDLTOPROJECTM_H +#define _SDLTOPROJECTM_H + +#include "event.h" + + //#include "projectM/projectM.hpp" +#ifdef WIN32 +#include +#else +#include +#endif + +inline projectMEvent sdl2pmEvent( SDL_Event event ) { \ + + switch ( event.type ) { \ + case SDL_VIDEORESIZE: + return PROJECTM_VIDEORESIZE; \ + case SDL_KEYUP: \ + return PROJECTM_KEYUP; \ + case SDL_KEYDOWN: \ + return PROJECTM_KEYDOWN; \ + default: + return PROJECTM_KEYUP; \ + } \ + } \ + +inline projectMKeycode sdl2pmKeycode( SDLKey keysym ) { \ + switch ( keysym ) { \ + case SDLK_F1: \ + return PROJECTM_K_F1; \ + case SDLK_F2: \ + return PROJECTM_K_F2; \ + case SDLK_F3: \ + return PROJECTM_K_F3; \ + case SDLK_F4: \ + return PROJECTM_K_F4; \ + case SDLK_F5: \ + return PROJECTM_K_F5; \ + case SDLK_F6: \ + return PROJECTM_K_F6; \ + case SDLK_F7: \ + return PROJECTM_K_F7; \ + case SDLK_F8: \ + return PROJECTM_K_F8; \ + case SDLK_F9: \ + return PROJECTM_K_F9; \ + case SDLK_F10: \ + return PROJECTM_K_F10; \ + case SDLK_F11: \ + return PROJECTM_K_F11; \ + case SDLK_F12: \ + return PROJECTM_K_F12; \ + case SDLK_ESCAPE: \ + return PROJECTM_K_ESCAPE; + case SDLK_a: + return PROJECTM_K_a; + case SDLK_b: + return PROJECTM_K_b; + case SDLK_c: + return PROJECTM_K_c; + case SDLK_d: + return PROJECTM_K_d; + case SDLK_e: + return PROJECTM_K_e; + case SDLK_f: + return PROJECTM_K_f; + case SDLK_g: + return PROJECTM_K_g; + case SDLK_h: + return PROJECTM_K_h; + case SDLK_i: + return PROJECTM_K_i; + case SDLK_j: + return PROJECTM_K_j; + case SDLK_k: + return PROJECTM_K_k; + case SDLK_l: + return PROJECTM_K_l; + case SDLK_m: + return PROJECTM_K_m; + case SDLK_n: + return PROJECTM_K_n; + case SDLK_o: + return PROJECTM_K_o; + case SDLK_p: + return PROJECTM_K_p; + case SDLK_q: + return PROJECTM_K_q; + case SDLK_r: + return PROJECTM_K_r; + case SDLK_s: + return PROJECTM_K_s; + case SDLK_t: + return PROJECTM_K_t; + case SDLK_u: + return PROJECTM_K_u; + case SDLK_v: + return PROJECTM_K_v; + case SDLK_w: + return PROJECTM_K_w; + case SDLK_x: + return PROJECTM_K_x; + case SDLK_y: + return PROJECTM_K_y; + case SDLK_z: + return PROJECTM_K_z; + case SDLK_UP: + return PROJECTM_K_UP; + case SDLK_RETURN: + return PROJECTM_K_RETURN; + case SDLK_RIGHT: + return PROJECTM_K_RIGHT; + case SDLK_LEFT: + return PROJECTM_K_LEFT; + case SDLK_DOWN: + return PROJECTM_K_DOWN; + case SDLK_PAGEUP: + return PROJECTM_K_PAGEUP; + case SDLK_PAGEDOWN: + return PROJECTM_K_PAGEDOWN; + + default: \ + return PROJECTM_K_NONE; \ + } \ + } \ + +inline projectMModifier sdl2pmModifier( SDLMod mod ) { \ + return PROJECTM_KMOD_LSHIFT; \ + } \ + +#endif /** _SDLTOPROJECTM_H */ diff --git a/3rdparty/libprojectm/timer.cpp b/3rdparty/libprojectm/timer.cpp new file mode 100755 index 000000000..c347e1ea1 --- /dev/null +++ b/3rdparty/libprojectm/timer.cpp @@ -0,0 +1,49 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2004 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id: timer.c,v 1.1.1.1 2005/12/23 18:05:05 psperl Exp $ + * + * Platform-independent timer + */ + +#include "timer.h" +#include + +#ifndef WIN32 +/** Get number of ticks since the given timestamp */ +unsigned int getTicks( struct timeval *start ) { + struct timeval now; + unsigned int ticks; + + gettimeofday(&now, NULL); + ticks=(now.tv_sec-start->tv_sec)*1000+(now.tv_usec-start->tv_usec)/1000; + return(ticks); + } + +#else +unsigned int getTicks( long start ) { + return GetTickCount() - start; + } + +#endif /** !WIN32 */ + + + diff --git a/3rdparty/libprojectm/timer.h b/3rdparty/libprojectm/timer.h new file mode 100755 index 000000000..2cc4ae49a --- /dev/null +++ b/3rdparty/libprojectm/timer.h @@ -0,0 +1,51 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id: timer.h,v 1.1.1.1 2005/12/23 18:05:00 psperl Exp $ + * + * Platform-independent timer + * + * $Log: timer.h,v $ + * Revision 1.1.1.1 2005/12/23 18:05:00 psperl + * Imported + * + * Revision 1.2 2004/10/05 09:19:40 cvs + * Fixed header include defines + * + * Revision 1.1.1.1 2004/10/04 12:56:00 cvs + * Imported + * + */ + +#ifndef _TIMER_H +#define _TIMER_H + +#ifndef WIN32 +#include +unsigned int getTicks( struct timeval *start ); +struct timeval GetCurrentTime(); +#else +#include +unsigned int getTicks( long start ); + +#endif /** !WIN32 */ + +#endif /** _TIMER_H */ diff --git a/3rdparty/libprojectm/win32-dirent.cpp b/3rdparty/libprojectm/win32-dirent.cpp new file mode 100755 index 000000000..a5397603e --- /dev/null +++ b/3rdparty/libprojectm/win32-dirent.cpp @@ -0,0 +1,231 @@ +/* + + Implementation of POSIX directory browsing functions and types for Win32. + + Author: Kevlin Henney (kevlin@acm.org, kevlin@curbralan.com) + History: Created March 1997. Updated June 2003. + Rights: See end of file. + +*/ + +#include "win32-dirent.h" +#include +#include /* _findfirst and _findnext set errno iff they return -1 */ +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +struct DIR +{ + long handle; /* -1 for failed rewind */ + struct _finddata_t info; + struct dirent result; /* d_name null iff first time */ + char *name; /* null-terminated char string */ +}; + +DIR *opendir(const char *name) +{ + DIR *dir = 0; + + if(name && name[0]) + { + size_t base_length = strlen(name); + const char *all = /* search pattern must end with suitable wildcard */ + strchr("/\\", name[base_length - 1]) ? "*" : "/*"; + + if((dir = (DIR *) malloc(sizeof *dir)) != 0 && + (dir->name = (char *) malloc(base_length + strlen(all) + 1)) != 0) + { + strcat(strcpy(dir->name, name), all); + + if((dir->handle = (long) _findfirst(dir->name, &dir->info)) != -1) + { + dir->result.d_name = 0; + } + else /* rollback */ + { + free(dir->name); + free(dir); + dir = 0; + } + } + else /* rollback */ + { + free(dir); + dir = 0; + errno = ENOMEM; + } + } + else + { + errno = EINVAL; + } + + return dir; +} + +int closedir(DIR *dir) +{ + int result = -1; + + if(dir) + { + if(dir->handle != -1) + { + result = _findclose(dir->handle); + } + + free(dir->name); + free(dir); + } + + if(result == -1) /* map all errors to EBADF */ + { + errno = EBADF; + } + + return result; +} + +struct dirent *readdir(DIR *dir) +{ + struct dirent *result = 0; + + if(dir && dir->handle != -1) + { + if(!dir->result.d_name || _findnext(dir->handle, &dir->info) != -1) + { + result = &dir->result; + result->d_name = dir->info.name; + } + } + else + { + errno = EBADF; + } + + return result; +} + +void rewinddir(DIR *dir) +{ + if(dir && dir->handle != -1) + { + _findclose(dir->handle); + dir->handle = (long) _findfirst(dir->name, &dir->info); + dir->result.d_name = 0; + } + else + { + errno = EBADF; + } +} + +// helper for scandir below +static void scandir_free_dir_entries(struct dirent*** namelist, int entries) { + int i; + if (!*namelist) return; + for (i = 0; i < entries; ++i) { + free((*namelist)[i]); + } + free(*namelist); + *namelist = 0; +} + +// returns the number of directory entries select or -1 if an error occurs +int scandir( + const char* dir, + struct dirent*** namelist, + int(*filter)(const struct dirent*), + int(*compar)(const void*, const void*) +) { + int entries = 0; + int max_entries = 512; // assume 2*512 = 1024 entries (used for allocation) + DIR* d; + + *namelist = 0; + + // open directory + d = opendir(dir); + if (!d) return -1; + + // iterate + while (1) { + struct dirent* ent = readdir(d); + if (!ent) break; + + // add if no filter or filter returns non-zero + if (filter && (0 == filter(ent))) continue; + + // resize our buffer if there is not enough room + if (!*namelist || entries >= max_entries) { + struct dirent** new_entries; + + max_entries *= 2; + new_entries = (struct dirent **)realloc(*namelist, max_entries); + if (!new_entries) { + scandir_free_dir_entries(namelist, entries); + closedir(d); + errno = ENOMEM; + return -1; + } + + *namelist = new_entries; + } + + // allocate new entry + (*namelist)[entries] = (struct dirent *)malloc(sizeof(struct dirent) + strlen(ent->d_name) + 1); + if (!(*namelist)[entries]) { + scandir_free_dir_entries(namelist, entries); + closedir(d); + errno = ENOMEM; + return -1; + } + + // copy entry info + *(*namelist)[entries] = *ent; + + // and then we tack the string onto the end + { + char* dest = (char*)((*namelist)[entries]) + sizeof(struct dirent); + strcpy(dest, ent->d_name); + (*namelist)[entries]->d_name = dest; + } + + ++entries; + } + + // sort + if (*namelist && compar) qsort(*namelist, entries, sizeof((*namelist)[0]), compar); + + return entries; +} + +int alphasort(const void* lhs, const void* rhs) { + const struct dirent* lhs_ent = *(struct dirent**)lhs; + const struct dirent* rhs_ent = *(struct dirent**)rhs; + return _strcmpi(lhs_ent->d_name, rhs_ent->d_name); +} + +#ifdef __cplusplus +} +#endif + +/* + + Copyright Kevlin Henney, 1997, 2003. All rights reserved. + + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose is hereby granted without fee, provided + that this copyright and permissions notice appear in all copies and + derivatives. + + This software is supplied "as is" without express or implied warranty. + + But that said, if there are any problems please get in touch. + +*/ diff --git a/3rdparty/libprojectm/win32-dirent.h b/3rdparty/libprojectm/win32-dirent.h new file mode 100755 index 000000000..1b6f9a624 --- /dev/null +++ b/3rdparty/libprojectm/win32-dirent.h @@ -0,0 +1,59 @@ + +#ifndef DIRENT_INCLUDED +#define DIRENT_INCLUDED + +/* + + Declaration of POSIX directory browsing functions and types for Win32. + + Author: Kevlin Henney (kevlin@acm.org, kevlin@curbralan.com) + History: Created March 1997. Updated June 2003. + Rights: See end of file. + +*/ + +#ifdef __cplusplus +extern "C" +{ +#endif + +typedef struct DIR DIR; + +//static int errno; + +struct dirent +{ + char *d_name; +}; + +DIR *opendir(const char *); +int closedir(DIR *); +struct dirent *readdir(DIR *); +void rewinddir(DIR *); +int scandir( + const char* dir, + struct dirent*** namelist, + int(*filter)(const struct dirent*), + int(*compar)(const void*, const void*) ); +int alphasort(const void* lhs, const void* rhs); + +/* + + Copyright Kevlin Henney, 1997, 2003. All rights reserved. + + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose is hereby granted without fee, provided + that this copyright and permissions notice appear in all copies and + derivatives. + + This software is supplied "as is" without express or implied warranty. + + But that said, if there are any problems please get in touch. + +*/ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/3rdparty/libprojectm/wipemalloc.cpp b/3rdparty/libprojectm/wipemalloc.cpp new file mode 100755 index 000000000..14bcf7816 --- /dev/null +++ b/3rdparty/libprojectm/wipemalloc.cpp @@ -0,0 +1,44 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2004 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id: wipemalloc.c,v 1.1.1.1 2005/12/23 18:05:05 psperl Exp $ + * + * Clean memory allocator + */ + +#include "wipemalloc.h" + + void *wipemalloc( size_t count ) { + void *mem = malloc( count ); + if ( mem != NULL ) { + memset( mem, 0, count ); + } else { + printf( "wipemalloc() failed to allocate %d bytes\n", (int)count ); + } + return mem; + } + +/** Safe memory deallocator */ + void wipefree( void *ptr ) { + if ( ptr != NULL ) { + free( ptr ); + } + } diff --git a/3rdparty/libprojectm/wipemalloc.h b/3rdparty/libprojectm/wipemalloc.h new file mode 100755 index 000000000..6ff625d36 --- /dev/null +++ b/3rdparty/libprojectm/wipemalloc.h @@ -0,0 +1,60 @@ +/** + * projectM -- Milkdrop-esque visualisation SDK + * Copyright (C)2003-2007 projectM Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * See 'LICENSE.txt' included within this release + * + */ +/** + * $Id: wipemalloc.h,v 1.1.1.1 2005/12/23 18:05:03 psperl Exp $ + * + * Contains an inline function which can replace malloc() that also + * call memset( ..., 0, sizeof( ... ) ) on the allocated block for + * safe initialization + * + * $Log$ + */ + +#ifndef _WIPEMALLOC_H +#define _WIPEMALLOC_H + +#ifndef MACOS +#ifndef HAVE_AIX /** AIX has malloc() defined in a strange place... */ +#ifdef WIN32 +#include +#endif +#include +#include +#else +#include +#endif /** !HAVE_AIX */ +#else +#include +#include +#endif /** !MACOS */ +#include + +#ifdef PANTS +#if defined(WIN32) && !defined(inline) +#define inline +#endif +#endif + +/** Safe memory allocator */ + void *wipemalloc( size_t count ); + void wipefree( void *ptr ); + +#endif /** !_WIPEMALLOC_H */